Topik temu duga representatif

Temu Duga Reka Bentuk Sistem: Bagaimanakah Anda Mereka Bentuk Suapan Berita Diperibadikan (Personalized News Feed)?

Reka bentuk sistemSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Reka bentuk suapan berita diperibadikan yang disokong oleh graf ikutan (follow graph). Sistem ini mempunyai 50 juta DAU dan menerima 10 juta siaran baharu setiap hari. Pengguna boleh menerbitkan siaran teks atau imej, mengikuti penulis, dan melayari suapan utama yang diranking mengikut kerelevanan. Terangkan API, model data, penjanaan calon, fan-out-on-write berbanding fan-out-on-read, perankingan, penomboran halaman, ketekalan, pemadaman, titik panas, pemulihan, dan pengesahan.

Kehendak Soalan dan Konteks Berkaitan

Reka bentuk suapan berita diperibadikan yang disokong oleh graf ikutan. Pengguna boleh menerbitkan siaran teks atau imej, mengikuti atau berhenti mengikuti penulis, dan melayari suapan utama yang diranking mengikut kerelevanan. Memadamkan siaran, menjadikannya peribadi, menyekat penulis, atau berhenti mengikuti mestilah memberi kesan kepada pembacaan seterusnya dengan segera. Suka (likes), komen, dan model pengesyoran merupakan isyarat perankingan. Transkod media, pepohon komen, lelongan iklan, dan latihan model adalah di luar skop.

Andaikan 50 juta pengguna aktif harian (DAU). Setiap pengguna aktif membaca 20 halaman setiap hari, dengan 20 item setiap halaman, dan sistem menerima 10 juta siaran baharu setiap hari. Bacaan suapan p99 mestilah di bawah 200 milisaat. Siaran daripada penulis biasa sepatutnya dapat dilihat oleh pengikut aktif dalam masa lima saat pada p99. Penulis biasa mempunyai purata 200 pengikut yang layak, manakala penulis terbesar mempunyai 50 juta pengikut. Angka-angka dan had masa ini adalah kekangan temu duga, bukannya tuntutan tentang produk sedia ada.

Soalan ini sesuai untuk temu duga peringkat pertengahan hingga kanan bagi bahagian backend, infrastruktur, dan reka bentuk sistem. Bahan temu duga awam bertanya secara terus tentang fan-out tulis, fan-out baca, penulis selebriti, penomboran halaman kursor, caching, dan ketekalan. Laporan kejuruteraan pihak pertama juga mengasingkan pengambilan calon, pengagregatan, penapisan, dan perankingan berbilang fasa sambil mengekalkan kandungan termaterialisasi untuk degradasi anggun (graceful degradation). Oleh itu, jawapan yang mantap menggabungkan mekanisme daripada keperluan kos dan ketepatan yang jelas dan bukannya sekadar menghasilkan semula satu rajah yang tetap.

Perkara yang Dinilai oleh Penemu Duga

Pertama, bolehkah calon mengukur asimetri baca-tulis? Lima puluh juta DAU didarabkan dengan 20 halaman bersamaan satu bilion bacaan setiap hari, atau kira-kira 11,600 purata QPS. Kemuncak lima kali ganda adalah kira-kira 58,000 QPS. Sepuluh juta siaran secara purata hanya menghasilkan kira-kira 116 ciptaan setiap saat, tetapi fan-out tulis kepada 200 pengikut yang layak mengembangkannya kepada kira-kira dua bilion sisipan rujukan garis masa setiap hari, atau secara kasarnya 23,100 setiap saat secara purata. Membandingkan QPS siaran mentah sahaja akan menyembunyikan beban tulis utama.

Kedua, adakah calon memahami sempadan tolak (push), tarik (pull), dan hibrid? Fan-out-on-write tulen menjadikan bacaan murah, tetapi seorang penulis dengan 50 juta pengikut mencipta 50 juta sisipan. Fan-out-on-read tulen menjadikan penerbitan murah, tetapi setiap bacaan mungkin perlu menggabungkan banyak penulis yang diikuti. Reka bentuk yang kukuh memprakira rujukan untuk penulis biasa, menarik penulis fan-out tinggi semasa bacaan, dan memperoleh sempadan tersebut daripada pengikut aktif, kadar pengeposan, belanjawan baris gilir, dan sasaran kesegaran.

Ketiga, bolehkah calon memisahkan punca kebenaran (source of truth) siaran, kumpulan calon, dan persembahan akhir? Garis masa menyimpan rujukan ringan dan bukannya menyalin badan siaran. Pengagregat menggabungkan peti masuk yang diprakira, siaran terkini daripada penulis fan-out tinggi, dan calon pengesyoran; menggunakan kebenaran, pemadaman, sekatan, dan penyahduplikasian; kemudian meranking dan menghidratkannya. Skor model tidak sekali-kali mengatasi peraturan keterlihatan.

Keempat, bolehkah calon mengekalkan semantik penomboran halaman yang berguna semasa perankingan berubah? Skor berubah mengikut penglibatan dan versi model, jadi offset atau skor sahaja akan menyebabkan duplikasi dan peninggalan. Jawapan tersebut harus mencadangkan sama ada sesi suapan beku jangka pendek atau kursor majmuk berversi dan menerangkan perkara yang berlaku apabila siaran baharu, pemadaman, henti ikut, dan perubahan keterlihatan berlaku semasa menatal.

Akhir sekali, reka bentuk mestilah boleh dipulihkan dan boleh dibuktikan salah (falsifiable). Bas peristiwa, cache, dan pekerja fan-out boleh gagal atau mengulangi kerja. Rujukan idempoten, pemantauan kelengahan, sandaran punca terikat, penapisan batu nisan (tombstone), dan imbasan pembaikan mestilah menumpu (converge). Pengesahan harus merangkumi lonjakan selebriti, peristiwa pendua dan tidak mengikut urutan, perlumbaan henti ikut, kebocoran pemadaman, dan kehilangan cache.

Soalan untuk Dijelaskan Sebelum Menjawab

  • Apakah yang mengisi suapan halaman utama? Terutamanya siaran daripada penulis yang diikuti, dengan kumpulan pengesyoran yang kecil. Iklan, kumpulan, dan suapan topik adalah di luar skop.
  • Apakah kontrak perankingan? Perankingan kerelevanan adalah lalai. Keputusan hendaklah segar dan mencampurkan sumber secara sengaja, tetapi susunan kronologi yang ketat tidak diperlukan.
  • Siapa yang boleh melihat sesuatu siaran? Siaran boleh bersifat awam, untuk pengikut sahaja, atau peribadi. Sekatan, pemadaman, dan sekatan keterlihatan diutamakan berbanding capaian cache dan perankingan.
  • Siapa yang memerlukan baca-tulis-sendiri (read-your-writes)? Penulis sepatutnya melihat siaran baharu dengan serta-merta. Pengikut biasa yang aktif mempunyai sasaran keterlihatan lima saat. Pengikut luar talian boleh dikemas kini pada lawatan mereka yang seterusnya.
  • Berapa stabildah penomboran halaman yang diperlukan? Satu tatalan berterusan harus meminimumkan pendua dan jurang. Siaran baharu boleh muncul semasa penyegaran semula atau dalam sesi baharu. Pemadaman dan penarikan balik akses berkuat kuasa serta-merta dalam sesi semasa.
  • Berapa condongkah graf tersebut? Penulis biasa mempunyai purata 200 pengikut yang layak, manakala yang terbesar boleh mempunyai 50 juta. Nilai purata tidak boleh menyembunyikan titik panas.
  • Berapa banyak yang dikekalkan? Prakira 500 rujukan calon terbaharu bagi setiap pengguna aktif. Kekalkan badan siaran mengikut dasar produk dan ambil item yang lebih lama daripada indeks penulis dan pengesyoran apabila diperlukan.
  • Apakah keperluan serantau? Layan bacaan secara setempat dan replikasi siaran secara tak segerak selepas ia dilakukan dalam rantau asal penulis. Kesegaran biasa mungkin mengambil masa beberapa saat; sekatan keterlihatan menggunakan laluan pembatalan keesahan berkeutamaan lebih tinggi.

Rangka Kerja Jawapan 30 Saat

“Saya akan memisahkan stor siaran berwibawa, graf sosial, dan peti masuk calon bagi setiap pengguna. Transaksi cipta menulis siaran dan peristiwa outbox. Pekerja fan-out memasukkan penulis biasa secara idempoten ke dalam peti masuk pengikut aktif, manakala penulis fan-out tinggi hanya menulis pada indeks terkini penulis dan ditarik semasa bacaan. Pengagregat suapan menggabungkan calon yang diprakira, calon fan-out tinggi, dan calon yang disyorkan; menggunakan kebenaran, pemadaman, sekatan, dan penyahduplikasian; kemudian menggunakan pengambilan dan perankingan untuk mencipta sesi suapan jangka pendek. Kursor mengandungi sesi dan kedudukan, dan badan siaran dihidratkan hanya untuk item akhir. Pemadaman dan sekatan keterlihatan menulis batu nisan berwibawa dan pembatalan keesahan berkeutamaan tinggi, manakala setiap bacaan menyemak semula perkara ini. Semasa baris gilir lengah, kembalikan suapan termaterialisasi yang lebih lama dan lakukan bacaan punca terikat. Pantau kependaman siaran-ke-kelihatan, pendua, kebocoran pemadaman, dan p99 bagi setiap peringkat.”

Panduan Terperinci Langkah demi Langkah

Langkah 1: Terbitkan belanjawan seni bina daripada kapasiti

Bacaan suapan harian ialah:

text
50,000,000 DAU × 20 pages/day = 1,000,000,000 feed reads/day
1,000,000,000 / 86,400 ≈ 11,574 average read QPS
11,574 × 5 peak factor ≈ 57,870 peak read QPS

Penciptaan siaran secara purata adalah 10,000,000 / 86,400 ≈ 116 QPS. Jika penulis biasa melakukan fan-out kepada 200 pengikut aktif secara purata, mereka menghasilkan kira-kira dua bilion sisipan rujukan calon setiap hari, atau purata 2,000,000,000 / 86,400 ≈ 23,148 sisipan sesaat. Satu siaran dengan 50 juta pengikut melebihi belanjawan tulis biasa selama beberapa saat, jadi fan-out penuh secara segerak adalah tidak selamat.

Mengekalkan 500 rujukan bagi setiap 50 juta pengguna aktif menghasilkan 25 bilion rujukan. Jika rujukan kasar menggunakan 64 bait untuk post_id, author_id, skor awal, masa, dan bendera, batas bawah logik adalah kira-kira 1.6 TB sebelum indeks, overhed enjin, dan replika. Oleh itu, garis masa harus menyimpan rujukan terikat, bukannya menyalin badan siaran, dan menggunakan storan bertingkat aktiviti.

Langkah 2: Tentukan pemilikan, API, dan model data minimum

Perkhidmatan siaran memiliki badan, penulis, masa penciptaan, keterlihatan, versi, dan batu nisan pemadaman. Perkhidmatan graf sosial memiliki indeks kedekatan following dan followers. Perkhidmatan suapan memiliki rujukan calon, sesi, dan rekod impresi. Storan objek dan CDN memegang imej; garis masa hanya mengandungi rujukan media. API teras boleh menjadi:

text
POST   /v1/posts                         create a post with Idempotency-Key
DELETE /v1/posts/{post_id}               write a deletion tombstone
PUT    /v1/users/{id}/following/{author} follow an author
DELETE /v1/users/{id}/following/{author} unfollow an author
GET    /v1/feed?cursor=...&limit=20      read one ranked page
GET    /v1/posts/{post_id}               hydrate one visible post

posts menyimpan keadaan berwibawa mengikut post_id dan indeks terkini pada (author_id, created_at, post_id). follows mesti menyenaraikan yang diikuti mengikut pelihat dan membahagikan (shard) pengikut mengikut penulis. feed_inbox mempartisi mengikut viewer_id; kunci isihnya merangkumi skor pengambilan, masa penciptaan, dan post_id. feed_sessions menyimpan sementara versi perankingan, ID calon yang disusun, dan tamat tempoh. Peristiwa impresi dan penglibatan pergi ke log berasingan untuk ciri dan eksperimen daripada mengemas kini setiap calon secara segerak semasa bacaan.

Penciptaan siaran menerima kunci keidempotenan pemanggil. Siaran dan peristiwa outbox diserahkan dalam satu transaksi pangkalan data, selepas itu penulis boleh membaca daripada punca kebenaran siaran. Bas menyediakan penghantaran sekurang-kurangnya sekali (at-least-once). Penulisan (viewer_id, post_id) yang unik atau bersyarat menumpukan fan-out pendua. Peristiwa membawa versi siaran supaya peristiwa lama tidak dapat menghidupkan semula siaran yang dipadamkan atau yang baru disekat.

Langkah 3: Gunakan fan-out hibrid untuk penulis biasa dan penulis fan-out tinggi

Selepas penulis biasa membuat siaran, perkhidmatan fan-out membaca pecahan (shards) pengikut aktif yang layak dan memasukkan rujukan ringan secara kelompok ke dalam setiap peti masuk. Pekerja menjejaki kemajuan dengan kursor pecahan dan ID peristiwa. Kelompok yang tamat masa mencuba semula kerja yang sama tanpa mencipta calon kedua. Pengguna luar talian atau tidak aktif untuk jangka masa panjang tidak perlu dimaterialisasikan serta-merta; calon terkini mereka boleh dibina semula daripada graf ikutan pada lawatan seterusnya.

Siaran fan-out tinggi hanya pergi ke indeks terkini (author_id, created_at) dan cache panas. Apabila pelihat mengikuti penulis tersebut, pengagregat menarik bilangan item terkini yang terikat daripada setiap satu secara selari dan menggabungkannya dengan peti masuk. Sempadan tidak seharusnya menjadi satu pemalar kiraan pengikut yang kekal. Anggarkan kos tulis eligible_active_followers × posts_per_window dan bandingkannya dengan jangkaan kos baca-gabung, ruang baris gilir, dan belanjawan kesegaran lima saat. Jika seorang penulis menjadi popular atau membuat siaran secara mendadak, satah kawalan boleh menukar penulis kepada mod tarik. Kelompok yang sudah berada dalam baris gilir boleh diselesaikan secara idempoten atau dibatalkan, tetapi kedua-dua laluan tidak boleh berjalan tanpa batas.

Tarik masih boleh mencipta fan-out baca yang mahal apabila pelihat mengikuti banyak penulis fan-out tinggi. Pengagregat mengehadkan calon, keserempakan, dan had masa bagi setiap sumber; mencache indeks penulis terkini; dan mengembalikan calon lain yang layak apabila satu sumber tamat masa. Pra-pengagregatan serantau atau kluster-ikutan adalah mungkin, tetapi ia hanya wajar selepas kos penggabungan yang diukur menjadi kekangan (bottleneck).

Langkah 4: Asingkan penjanaan calon, penapisan, perankingan, dan penghidratan

Laluan baca mempunyai empat peringkat:

  1. Baca kelompok calon daripada peti masuk penulis biasa dan kelompok terikat daripada sumber fan-out tinggi dan pengesyoran.
  2. Penyahduplikasian mengikut post_id, kemudian semak ikutan, sekatan, batu nisan, keterlihatan semasa, dan dasar serantau.
  3. Gunakan skor murah untuk mengurangkan set tersebut, kemudian model yang lebih berat untuk kemungkinan penglibatan, kesegaran, kualiti sumber, dan maklum balas negatif, diikuti oleh kekangan kepelbagaian dan kekerapan.
  4. Hidrat kelompok bagi badan, ringkasan penulis, dan kiraan agregat untuk 20 item akhir, kembalikan item tersebut, dan log impresi secara tak segerak.

Laporan kejuruteraan Meta yang diterbitkan menerangkan pengagregat suapan yang mengumpul calon, objek, dan ciri sebelum perankingan, dengan beberapa fasa model yang mengurangkan pengiraan. Seni bina Pinterest yang diterbitkan juga mengasingkan kumpulan calon yang belum dilihat, penjanaan kandungan, dan suapan termaterialisasi. Reka bentuk temu duga tidak perlu meniru mana-mana sistem ini, tetapi laporan ini menunjukkan mengapa menyalin siaran penuh ke dalam cache dan mengisih di sana kekurangan sempadan yang penting.

Kebenaran dan kekangan produk diguna pakai sebelum dan selepas perankingan. Penapisan awal menjimatkan kerja; menyemak semula versi siaran semasa penghidratan menyekat pemadaman atau sekatan keterlihatan yang tiba semasa perankingan. Skor model hanyalah input susunan dan tidak boleh memperkenalkan semula kandungan yang tidak kelihatan. Kiraan penglibatan mungkin konsisten akhirnya. Penulis, badan, keterlihatan, dan batu nisan datang daripada versi siaran yang berwibawa.

Langkah 5: Stabilkan perankingan dinamik dengan sesi suapan

offset mengulangi atau melangkau item apabila kandungan baharu tiba atau skor berubah. Keyset (score, post_id) sahaja juga tidak mencukupi apabila perankingan semula mengubah skor sebelum halaman seterusnya. Permintaan pertama boleh meranking sehingga 500 ID calon dan menyimpannya di bawah feed_session_id 30 minit. Kursor legap mengandungi sesi, kedudukan seterusnya, cap jari pertanyaan, dan tandatangan. Halaman kemudian membaca mengikut kedudukan, menyemak semula keterlihatan, dan mengisi kekosongan.

Siaran baharu muncul apabila pelihat menyegarkan semula atau memulakan sesi baharu dan bukannya diselitkan di tengah-tengah. Pemadaman, sekatan, dan sekatan keterlihatan ditapis serta-merta, jadi sesi semasa mungkin kehilangan item; pengagregat mengisi daripada calon sesi kemudian. Jika cache sesi hilang atau tamat tempoh, kembalikan hasil kursor tamat tempoh yang boleh dikenal pasti supaya klien boleh mengekalkan ID yang telah dipaparkan dan menyegarkan semula. Jangan sesekali menerapkan kedudukan lama secara senyap pada perankingan baharu.

Jika menyimpan 500 ID beku terlalu mahal, simpan epok perankingan dan keyset majmuk dan biarkan klien menghantar ringkasan ID yang dipaparkan. Reka bentuk itu menggunakan storan sesi yang lebih sedikit tetapi menyukarkan penyahduplikasian, perubahan model, dan pengisian pemadaman. Buat pilihan berdasarkan tempoh tatalan berterusan, kadar pendua yang boleh diterima, dan belanjawan sesi dan bukannya menganggap pengekodan kursor sebagai jawapan utama.

Langkah 6: Tumpukan ikutan, pemadaman, dan perubahan keterlihatan dengan betul

Selepas ikutan diserahkan, bacaan seterusnya oleh pelihat boleh menarik siaran terkini penulis baharu sementara pengisian semula terikat berjalan secara tak segerak. Henti ikut dan sekatan mula-mula mengemas kini graf berwibawa; laluan baca menapis penulis tersebut serta-merta, kemudian membersihkan peti masuk secara tak segerak. Jutaan pemadaman fizikal tidak perlu selesai sebelum persembahan dihentikan. Jika peristiwa ikuti dan siaran tiba tidak mengikut urutan, versi hubungan dalam calon hanyalah satu pengoptimuman. Keterlihatan akhir masih menggunakan peraturan berwibawa semasa.

Apabila memadamkan siaran atau menjadikannya peribadi, perkhidmatan siaran menyerahkan versi baharu, batu nisan, dan peristiwa outbox berkeutamaan tinggi bersama-sama. Pembatalan keesahan cache, pembersihan carian, dan pembersihan peti masuk mungkin berlaku secara tak segerak, tetapi penghidratan suapan membaca secara kelompok versi semasa dan menapisnya. Cache batu nisan panas memendekkan semakan, manakala rekod siaran tahan lama menghalang kandungan lapuk daripada muncul semula selepas kehilangan cache. Imbasan pembaikan mengalih keluar rujukan lama; pembersihan fizikal bukanlah kebenaran (authorization).

Suka dan komen tidak sepatutnya menulis semula setiap peti masuk pengikut setiap kali skor berubah. Peristiwa penglibatan mengemas kini kiraan agregat dan ciri, dan pelihat aktif meranking semula calon pada permintaan mereka yang seterusnya. Kandungan yang sangat hangat boleh mengemas kini cache ciri yang dikongsi. Ini menerima kelapukan perankingan sementara dan mengelakkan penukaran setiap interaksi menjadi satu lagi fan-out global.

Langkah 7: Reka bentuk degradasi, pemulihan, dan sempadan serantau

Semasa kelewatan baris gilir fan-out, lindungi penciptaan siaran dan bacaan suapan termaterialisasi terlebih dahulu. Suapan boleh mengembalikan set calon layak yang lebih lama dan melakukan bacaan punca terikat untuk mereka yang diikuti yang aktif baru-baru ini oleh pelihat. Kesegaran mungkin merosot; kebenaran tidak boleh merosot. Jika seorang penulis mencipta titik panas baris gilir, tukar penulis tersebut kepada mod tarik dan hadkan kelompok yang belum selesai. Selepas pemulihan, kejar semula secara idempoten mengikut masa dan versi peristiwa. Pantau umur peristiwa tertua, bukan hanya panjang baris gilir.

Jika cache calon gagal, baca lebih sedikit calon daripada peti masuk tahan lama atau kembalikan sesi yang disimpan. Jika perankingan tamat masa, gunakan skor kesegaran deterministik ditambah peraturan kepelbagaian. Apabila stor siaran atau graf berwibawa tidak tersedia, layan hanya kandungan yang telah disahkan sebelum ini dalam TTL kebenaran yang selamat. Selepas TTL tersebut, gagalkan atau sempitkan keputusan dan bukannya memaparkan kandungan yang aksesnya mungkin telah ditarik balik.

Di pelbagai rantau, rantau asal penulis menerima siaran dan menetapkan ID global, kemudian peristiwa direplikasi ke rantau baca secara tak segerak. Kandungan biasa mungkin mempunyai kesegaran tahap saat; penulis mendapat baca-tulis-sendiri serta-merta melalui rantau asal. Pemadaman, sekatan, dan sekatan keterlihatan menggunakan replikasi berkeutamaan lebih tinggi, dan replika lama disekat sehingga perkhidmatan batu nisan global mengesahkan keadaan. Penulisan graf ikutan aktif-aktif menambah konflik hubungan dan hanya perlu diperkenalkan untuk keperluan yang jelas.

Langkah 8: Buktikan sempadan dengan metrik dan suntikan kerosakan

Metrik teras merangkumi kejayaan cipta, keterlihatan siaran-ke-pertama dan siaran-ke-95-peratus-pengikut-aktif, daya pemprosesan fan-out setiap pecahan dan kelengahan tertua, kependaman tarik fan-out tinggi, kiraan calon, kadar penyahduplikasian, kadar penapis, p99 pengambilan dan perankingan, saiz kelompok penghidratan, kadar capaian cache, tamat tempoh kursor, pendua halaman, halaman kosong, dan kebocoran kandungan yang dipadam atau ditarik balik. Metrik terakhir mestilah kekal sifar dan memerlukan prob sintetik aktif.

Suntikan kerosakan harus merangkumi peristiwa siaran pendua dan tidak mengikut urutan; siaran berulang oleh penulis dengan 50 juta pengikut; penulis bertukar daripada tolak ke tarik di tengah-tengah fan-out; ikuti, henti ikut, dan siar yang serentak; pemadaman atau perubahan privasi semasa penomboran halaman; cache batu nisan yang hilang; satu pecahan pengikut yang perlahan; gangguan bas peristiwa dan proses mengejar semula; tamat masa perankingan; nod sesi suapan yang hilang; dan kelewatan replikasi serantau. Setiap senario menegaskan bahawa tiada kandungan tanpa kebenaran muncul, rujukan menumpu, degradasi kependaman boleh diperhatikan, dan pemulihan tidak menguatkan penulisan pendua.

Contoh Jawapan Berkualiti Tinggi

“Dengan 50 juta DAU dan 20 halaman setiap hari, saya mendapat kira-kira 11,600 purata bacaan suapan sesaat dan 58,000 pada kemuncak lima kali ganda. Sepuluh juta siaran harian hanya menghasilkan kira-kira 116 QPS, tetapi 200 pengikut aktif bagi setiap penulis biasa mengembangkannya kepada kira-kira 23,100 sisipan calon sesaat secara purata. Satu siaran kepada 50 juta pengikut tidak boleh menggunakan tolak penuh secara segerak.

Saya akan memisahkan punca kebenaran siaran, graf sosial, dan peti masuk calon. Transaksi cipta menulis siaran dan outbox. Peristiwa penulis biasa melakukan fan-out mengikut pecahan pengikut ke dalam peti masuk setiap pengguna dengan keidempotenan viewer_id + post_id. Penulis fan-out tinggi hanya menulis pada indeks terkini penulis dan ditarik serta digabungkan semasa bacaan suapan. Sempadan tolak-tarik menggunakan pengikut aktif, kadar pengeposan, belanjawan baris gilir, dan kos baca. Garis masa menyimpan rujukan; badan dan media dihidratkan secara berkelompok hanya untuk item akhir.

Untuk bacaan, pengagregat memperoleh calon terikat daripada peti masuk, sumber fan-out tinggi, dan pengesyoran. Ia menapis dan menyahduplikasi mengikut ikutan semasa, sekatan, batu nisan, dan keterlihatan sebelum pengambilan murah, perankingan lebih berat, kepelbagaian, dan kawalan kekerapan. Halaman pertama membekukan sehingga 500 calon dalam sesi suapan 30 minit, dan kursor mengandungi sesi serta kedudukan. Siaran baharu menunggu penyegaran semula, manakala pemadaman dan sekatan keterlihatan ditapis dan diisi semula pada setiap halaman.

Perubahan pemadaman dan privasi menyerahkan versi berwibawa ditambah dengan pembatalan keesahan berkeutamaan tinggi. Pembersihan cache dan peti masuk mungkin lengah, tetapi setiap persembahan menyemak semula keadaan. Semasa baris gilir lengah, kembalikan suapan termaterialisasi yang lebih lama dan lakukan bacaan punca terikat; semasa perankingan tamat masa, kembali kepada kesegaran. Kebenaran tidak sekali-kali merosot. Saya akan memantau kependaman siaran-ke-kelihatan, kelengahan tertua, p99 setiap peringkat perankingan, kadar pendua, dan kebocoran kandungan yang ditarik balik, kemudian menyuntik lonjakan selebriti, peristiwa pendua, perlumbaan henti ikut, pemadaman, kehilangan cache, dan kerosakan serantau.”

Kesilapan Biasa

  1. Membandingkan QPS baca dan tulis mentah sahaja. Pengeposan purata kira-kira 116 QPS, tetapi fan-out pengikut mendominasi penulisan. Kira penguatan dan graf berekor tebal (heavy-tailed).
  2. Menggunakan fan-out-on-write untuk setiap penulis. Penulis dengan 50 juta pengikut menyebabkan 50 juta sisipan. Tarik penulis fan-out tinggi semasa bacaan.
  3. Menjadikan ambang selebriti sebagai pemalar kekal. Aktiviti pengikut, kadar pengeposan, dan ruang baris gilir berubah-ubah. Kelaskan berdasarkan kos dan SLO serta lindungi peralihan.
  4. Menyalin badan penuh ke dalam garis masa. Pengeditan, pemadaman, dan perubahan keterlihatan mewujudkan permukaan pembatalan keesahan yang sangat besar. Simpan rujukan dan semak semula versi semasa penghidratan.
  5. Menggunakan offset untuk halaman yang diranking secara dinamik. Sisipan dan perankingan semula menyebabkan pendua dan jurang. Gunakan sesi suapan jangka pendek atau kursor majmuk berversi.
  6. Menapis henti ikut dan pemadaman hanya dalam tugasan latar belakang. Kelengahan pembersihan membocorkan kandungan. Semak graf berwibawa, batu nisan, dan keterlihatan semasa bacaan.
  7. Mendakwa tepat-sekali (exactly-once) hujung-ke-hujung daripada bas peristiwa. Pekerja, storan, dan percubaan semula masih boleh menduplikasi. Tumpukan dengan ID peristiwa, versi siaran, dan kunci calon yang unik.
  8. Melangkau kebenaran semasa degradasi. Susunan lapuk dan calon yang lebih sedikit mungkin boleh diterima; paparan tanpa kebenaran adalah tidak boleh sama sekali. Berikan penapisan keselamatan belanjawan dan dasar kegagalannya sendiri.
  9. Menguji trafik biasa sahaja. Risiko penting ialah penulis fan-out tinggi, kelengahan, penyusunan semula, dan perlumbaan kebenaran. Suntikan kerosakan mesti meliputi sempadan tersebut.

Soalan Susulan dan Maklum Balas

Susulan 1: Bagaimanakah kedua-dua laluan mengelakkan pendua apabila penulis biasa tiba-tiba memperoleh 50 juta pengikut?

Satah kawalan menukar penulis kepada mod tarik di bawah suatu versi. Tugasan fan-out membaca versi mod itu dan hanya membenarkan set kelompok yang terikat yang telah dituntut untuk diselesaikan. Calon adalah idempoten pada (viewer_id, post_id), jadi salinan tolak dan tarik bergabung menjadi satu. Baris gilir memberikan kuota kepada setiap penulis, dan siaran baharu semasa peralihan pergi terus ke indeks fan-out tinggi.

Susulan 2: Apakah yang berlaku kepada sesi suapan lama selepas pelihat berhenti mengikuti seorang penulis?

Sesi membekukan susunan, bukannya kebenaran. Setiap kelompok penghidratan halaman menyemak graf ikuti dan sekat semasa. Kandungan yang telah dihenti ikut ditapis dan digantikan daripada calon kemudian. Pembersihan peti masuk tak segerak menjimatkan ruang tetapi tidak memberikan semantik kebenaran serta-merta.

Susulan 3: Bagaimanakah anda menyokong susunan kronologi yang ketat?

Gunakan semula sumber calon dan penapis keterlihatan, tukar kunci isih kepada (created_at, post_id), dan gunakan penomboran halaman keyset dengan masa syot kilat batas atas. Siaran baharu muncul selepas penyegaran semula. Sumber peti masuk fan-out tinggi dan biasa masih memerlukan penggabungan, tetapi sesi perankingan yang lebih berat tidak diperlukan.

Susulan 4: Bagaimanakah anda mengasingkan peningkatan kadar pendua selepas keluaran model perankingan?

Bandingkan kiraan calon sebelum dan selepas penyahduplikasian, ID penjanaan sesi, kedudukan kursor, dan rekod impresi mengikut versi model. Tentukan sama ada duplikasi masuk melalui sumber, output ranking, atau sesi yang hilang. Petakan alias sumber kepada post_id yang berwibawa. Jika storan sesi tidak stabil (flapping), mengembalikan semula model tidak akan membantu; pulihkan stor sesi dan minta klien menyegarkan semula secara jelas.

Susulan 5: Bagaimanakah anda tahu sempadan fan-out hibrid adalah betul?

Mainkan semula kiraan pengikut sebenar dan taburan aktiviti di luar talian. Anggarkan penulisan prakira setiap penulis, penantian baris gilir, penggabungan bacaan, dan kos capaian cache. Alihkan sempadan secara beransur-ansur secara dalam talian sambil memerhatikan p99 siaran-ke-kelihatan, p99 baca-suapan, jumlah penulisan storan, dan kadar degradasi. Tambahkan histeresis supaya penulis tidak berbolak-balik antara mod tolak dan tarik.

Sumber awam

Soalan berkaitan

Alat temu duga berkaitan

Gunakan Jawab untuk jawapan reka bentuk sistem

Jelaskan keperluan terlebih dahulu, kemudian teruskan dengan skala, seni bina, pilihan komponen dan pertukaran (trade-off).

Lihat alat