Topik temu duga representatif

Temu Duga Reka Bentuk Sistem: Bagaimanakah Anda Mereka Bentuk Sistem Sembang Masa Nyata?

Reka bentuk sistemSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Reka bentuk sistem sembang teks dengan 50 juta pengguna aktif harian, 5 juta sambungan serentak puncak dan 2 bilion mesej sehari. Sokong perbualan satu-lawan-satu, kumpulan sehingga 200 ahli, berbilang peranti, penyegerakan susulan luar talian, resit penghantaran dan bacaan, kehadiran serta penunjuk menaip. Mesej yang diterima tidak boleh hilang tanpa disedari, dan p99 penghantaran dalam talian mesti kekal di bawah satu saat di bawah beban normal. Terangkan protokol, API, storan, pengisihan, keidempoteman, sebar keluar (fan-out), penyambungan semula, kapasiti, kegagalan, keselamatan dan pengesahan.

Prompt dan Konteks Berkenaan

Reka bentuk perkhidmatan sembang teks dengan 50 juta pengguna aktif harian, 5 juta sambungan serentak puncak dan 2 bilion mesej sehari. Ia menyokong perbualan langsung, kumpulan maksimum 200 ahli, berbilang peranti bagi setiap pengguna, penyegerakan susulan luar talian, resit penghantaran dan bacaan, kehadiran serta penunjuk menaip. Lampiran, saluran awam, penulisan aktif-aktif rentas wilayah, carian teks penuh dan penyulitan hujung ke hujung adalah skop lanjutan.

Perkhidmatan ini memperakui penghantaran hanya selepas mesej disimpan secara tahan lasak. Ia tidak boleh kehilangan mesej yang diperakui secara senyap. Bagi penerima yang sudah berada dalam talian di bawah beban normal, p99 daripada penerimaan tahan lasak hingga ketibaan pada peranti yang disambungkan hendaklah di bawah satu saat. Pengangkutan mungkin menghantar semula, jadi klien mesti melihat satu mesej logik selepas penyahduplikasian. Pengisihan diperlukan dalam satu perbualan, bukan merentas perbualan yang tidak berkaitan.

Tiga panduan reka bentuk sistem awam yang diterbitkan atau dikemas kini pada tahun 2026 membentangkan sembang sebagai prompt temu duga langsung dan berulang kali memeriksa sambungan berterusan, penghalaan sambungan, pengisihan mengikut perbualan, penyegerakan luar talian, resit dan kehadiran. Piawaian WebSocket mentakrifkan pengangkutan dua hala dan bingkai kawalan, manakala spesifikasi klien-pelayan Matrix menyediakan contoh gred pengeluaran bagi ID transaksi klien, token penyegerakan berperingkat, resit bacaan dan peristiwa menaip efemeral. Sumber-sumber tersebut membuktikan bahawa topik ini dan sempadan kegagalannya adalah terkini serta berasaskan teknikal; skala dan SLO dalam prompt ini adalah input temu duga rekaan.

Perkara yang Dinilai oleh Penemu Duga

Isyarat pertama ialah ketepatan kontrak. "Dihantar," "diterima," dan "dibaca" adalah fakta yang berbeza. Perakuan pelayan bermaksud penerimaan tahan lasak. Resit penghantaran bermaksud peranti penerima yang dipilih telah menerima mesej tersebut. Resit bacaan memerlukan peraturan produk yang jelas bahawa pengguna benar-benar memaparkan perbualan tersebut. Menganggap ketiga-tiganya sebagai satu status mencipta dakwaan kebolehpercayaan palsu dan kiraan belum dibaca yang salah.

Isyarat kedua ialah sama ada calon mengelakkan janji tepat sekali (exactly-once) dari hujung ke hujung. Klien mungkin tamat masa selepas pelayan melakukan komit tetapi sebelum perakuan tiba. Get laluan (gateway) mungkin mengulangi penghantaran selepas menyambung semula. Kontrak praktikal ialah pengangkutan sekurang-kurangnya sekali (at-least-once) yang digabungkan dengan ID mesej klien yang stabil, rekod keidempoteman pelayan dan penyahduplikasian klien mengikut ID mesej pelayan.

Isyarat ketiga ialah sempadan pengisihan (ordering boundary). Pengisihan global akan mensirikan perbualan yang tidak berkaitan. Kontrak produk yang berguna memberikan setiap mesej yang diterima jujukan monotonik dalam perbualannya. Oleh itu, semua penulisan untuk satu perbualan sampai kepada satu pemilik atau penyusun jujukan (sequencer) semasa. Ini memelihara susunan tempatan sambil membolehkan perbualan yang berbeza diskalakan secara bebas, dan ia mendedahkan had perbualan hangat (hot conversation) yang sebenar.

Isyarat keempat ialah pengasingan status tahan lasak dan efemeral. Mesej, selang keahlian dan kursor bacaan bertahan daripada kegagalan. Kehadiran dan aktiviti menaip boleh luput dan digugurkan. Membiarkan trafik menaip berkongsi log mesej tahan lasak membazirkan storan dan membolehkan lonjakan kosmetik melewatkan mesej sebenar.

Isyarat terakhir ialah pemikiran pemulihan. Jawapan harus merangkumi kehilangan perakuan penghantaran, kegagalan get laluan, ribut sambung semula, pemilik perbualan lapuk, peranti perlahan, perubahan keahlian, sebar keluar pendua dan kumpulan hangat. Nombor kapasiti harus diperoleh daripada prompt dan kemudian ditentukur melalui ujian beban dan bukannya dibentangkan sebagai had pelayan sejagat.

Soalan untuk Dijelaskan Sebelum Menjawab

  • Apakah jenis kandungan dan perbualan yang berada dalam skop? Jawapan ini mengendalikan teks, perbualan langsung dan kumpulan sehingga 200 ahli. Lampiran menggunakan storan objek dan mesej metadata; saluran awam memerlukan strategi sebar keluar dan sejarah yang berbeza.
  • Apakah maksud setiap resit? Diterima pelayan, diterima peranti dan dibaca pengguna adalah fakta monotonik yang berasingan. "Dibaca" berlaku hanya apabila klien memaparkan perbualan yang berkaitan, bukan apabila ia sekadar menerima tolak (push).
  • Apakah pengisihan yang diperlukan? Prompt ini memerlukan susunan yang stabil bagi setiap perbualan. Ia tidak menjanjikan bahawa jam dinding pengguna menentukan susunan atau bahawa dua perbualan berbeza berkongsi satu jujukan.
  • Bolehkah pengguna menghantar daripada berbilang peranti? Ya. Setiap peranti mempunyai sambungan dan kursor penyegerakan yang disahkan sendiri; percubaan semula penghantar menggunakan semula ID mesej klien yang sama.
  • Apakah yang berlaku apabila keahlian berubah? Keizinan disemak semasa penerimaan. Produk mesti mentakrifkan sama ada ahli baharu boleh membaca sejarah yang lebih lama dan perkara yang dikekalkan secara tempatan oleh ahli yang dialih keluar. Reka bentuk ini menyimpan selang keahlian mengikut jujukan perbualan.
  • Berapa lamakah mesej dan rekod keidempoteman disimpan? Pengekalan mesej ialah keputusan produk dan pematuhan. Pemetaan keidempoteman mesti meliputi tetingkap percubaan semula maksimum klien; memadamkannya lebih awal boleh mencipta semula pendua.
  • Wilayah manakah yang digunakan? Jawapan asas menetapkan wilayah utama bagi setiap perbualan dan melakukan failover secara sengaja. Replika boleh tulis serentak di pelbagai wilayah memerlukan model konflik dan pengisihan yang lebih kompleks.
  • Apakah yang berada di luar sasaran satu saat? Paparan tolak luar talian, penyegerakan susulan sambung semula, masa bacaan pengguna dan pemulihan bencana rentas wilayah diukur secara berasingan daripada penghantaran langsung ke peranti yang telah disambungkan.

Rangka Kerja Jawapan 30 Saat

"Saya akan mengasingkan pengurusan sambungan daripada laluan mesej tahan lasak. Klien menghantar melalui WebSocket yang disahkan dengan ID mesej klien yang stabil. Perkhidmatan yang dihalakan mengikut perbualan menyemak semula keahlian, menetapkan jujukan perbualan seterusnya, menyimpan mesej dan hasil keidempoteman secara atomik, dan hanya selepas itu memperakuinya. Pekerja sebar keluar tak segerak mencari peranti penerima yang aktif dan menghantar mesej ke get laluan mereka; peranti luar talian atau gagal pulih daripada API penyegerakan berasaskan kursor. Kursor penghantaran dan bacaan meningkat secara monotonik, manakala kehadiran dan penunjuk menaip menggunakan laluan luput yang berasingan. Pengangkutan adalah sekurang-kurangnya sekali, jadi kedua-dua pelayan dan klien melakukan penyahduplikasian. Pada skala yang dinyatakan, saya akan merancang kira-kira 23,000 penghantaran purata dan 230,000 penghantaran puncak sesaat, kira-kira 2 TB data mesej logik sehari pada 1 KB setiap satu, dan menguji beban sambungan berterusan, kumpulan hangat, ribut sambung semula, percubaan semula, perubahan keahlian serta failover pemilik terhadap SLO."

Pecahan Langkah demi Langkah Mendalam

Langkah 1: Tetapkan kontrak produk dan kira batas kapasiti pertama.

Dua bilion mesej sehari secara purata adalah kira-kira 23,148 penghantaran sesaat. Jika puncak adalah sepuluh kali purata, perancangan masukan bermula sekitar 230,000 penghantaran sesaat. Pada andaian 1 KB bagi setiap mesej yang disimpan termasuk metadata dan indeks biasa, volum penulisan logik adalah kira-kira 2 TB sehari; tiga replika menjadikannya kira-kira 6 TB sehari sebelum pemadatan, rizab sistem fail, sandaran dan penulisan resit. Ini adalah andaian perancangan, bukan had perkakasan yang diukur.

Lima juta sambungan serentak mendominasi perancangan get laluan. Andaikan ujian beban pada instans yang dipilih, persediaan TLS, selang degupan jantung dan sasaran p99 membuktikan 50,000 sambungan sihat bagi setiap get laluan. Keperluan minimum mutlak ialah 100 get laluan. Beroperasi pada 70% daripada had terukur tersebut memerlukan kira-kira 143, dibundarkan kepada 150, ditambah rizab kegagalan zon. Ujian mesti merangkumi mesej, penyambungan semula dan klien perlahan; kiraan soket melahu sahaja adalah mengelirukan.

Langkah 2: Takrifkan protokol klien dan identitinya.

Setiap peranti membuka WebSocket yang disahkan ke get laluan serantau. Get laluan mengesahkan asal jika berkenaan, mengehadkan saiz bingkai dan kadar penghantaran, menyegarkan keizinan serta menggunakan ping/pong ditambah pajakan untuk mengesan sambungan yang mati. RFC 6455 membekalkan mekanik sambungan; protokol aplikasi masih memiliki pengesahan, perakuan, penjujukan, percubaan semula dan tekanan balik (backpressure).

Bingkai utama boleh dinyatakan sebagai:

text
SEND {
  conversation_id, client_message_id, body, client_sent_at
}

ACK {
  client_message_id, message_id, conversation_seq, accepted_at
}

MESSAGE {
  conversation_id, message_id, conversation_seq, sender_id, body, accepted_at
}

SYNC {
  device_sync_cursor, limit
}

client_message_id dijana sekali dan digunakan semula untuk setiap percubaan semula daripada peranti penghantar tersebut. message_id ialah identiti pelayan yang digunakan untuk penyahduplikasian penerima. conversation_seq ialah susunan paparan dan penyegerakan susulan dalam satu perbualan. accepted_at ialah masa pelayan untuk diagnostik, bukan pihak berkuasa pengisihan.

Langkah 3: Lakukan komit sekali bagi setiap penghantaran logik sebelum memperakui.

Get laluan memajukan SEND ke perkhidmatan sembang. Perkhidmatan tersebut memperoleh serpihan (shard) perbualan semasa, mengesahkan penghantar, mengesahkan keahlian pada versi keahlian semasa, mengesahkan saiz dan menggunakan had bagi setiap pengguna serta setiap perbualan. Pemilik serpihan mensirikan penulisan yang diterima untuk perbualan tersebut.

Dalam satu transaksi tahan lasak, ia memperuntukkan jujukan seterusnya, menulis mesej dan menulis pemetaan unik seperti (sender_device_id, client_message_id) → message_id. Permintaan pendua mengembalikan hasil sebelumnya dan bukannya menambah mesej lain. Hanya rekod yang dikomitkan secara korum menerima ACK. Jika perakuan hilang, percubaan semula adalah selamat. Jika storan gagal sebelum komit, tiada perakuan dihantar.

Mesej dipisahkan mengikut conversation_id dan diisih mengikut conversation_seq. Perubahan keahlian juga disusun, atau merujuk sempadan jujukan yang berkesan, supaya keizinan tidak bergantung pada cache ahli semasa yang konsisten akhirnya sahaja. Epok pemilik berpagar menghalang pemilik lama daripada menerima penulisan selepas failover.

Langkah 4: Sebar keluar selepas komit tahan lasak.

Log yang dikomitkan mengeluarkan tugas penghantaran. Direktori sambungan memetakan (user_id, device_id) ke get laluan dan pajakan sambungan. Untuk perbualan langsung atau kumpulan maksimum 200 ahli, pekerja sebar keluar memuatkan snapshot keahlian yang berkesan pada jujukan mesej, mengumpulkan peranti dalam talian mengikut get laluan dan menghantar arahan get laluan berkelompok. Badan mesej disimpan sekali; sebar keluar membawa rujukan atau peristiwa padat dan bukannya menyalin badan tahan lasak bagi setiap penerima.

Get laluan meletakkan peristiwa dalam baris gilir keluar berbatas bagi setiap sambungan. Peranti mengembalikan kursor penghantaran monotonik selepas ia menerima peristiwa tersebut secara tempatan. Jika sambungan perlahan, get laluan berhenti mengimbal (buffering) tanpa had, menandakannya untuk penyegerakan semula dan menutupnya dengan alasan aplikasi. Log tahan lasak kekal sebagai kebenaran mutlak, jadi pengguguran penghantaran langsung dalam ingatan tidak akan menghilangkan mesej tersebut.

Bagi pengguna luar talian, sistem boleh menghantar petunjuk tolak mudah alih yang selamat dari segi privasi. Tolak ialah mekanisme membangunkan peranti, bukan storan mesej atau bukti penghantaran. Apabila dibuka, klien mengesahkan identiti dan menyegerak daripada perkhidmatan tahan lasak.

Langkah 5: Jadikan sambung semula dan penyegerakan berbilang peranti eksplisit.

Setiap peranti mengekalkan device_sync_cursor yang legap. GET /sync?after=cursor atau bingkai yang setara mengembalikan delta perbualan yang tersusun, perubahan keahlian, delta resit dan kursor baharu. Pelayan tidak boleh memajukan kursor melangkaui peristiwa yang ditinggalkan daripada respons. Jika kursor telah luput atau jurangnya terlalu besar, pelayan mengembalikan snapshot berbatas ditambah token kesinambungan dan bukannya cuba memainkan semula tanpa batas pada satu sambungan.

Penghantaran langsung dan penyegerakan boleh bertindih, jadi klien menggabungkan mengikut message_id dan menyusun mengikut (conversation_id, conversation_seq). Peranti baharu menerima sejarah yang dibenarkan oleh dasar dan menetapkan kursornya sendiri. Status bacaan adalah pada peringkat pengguna dan monotonik bagi setiap perbualan; status penghantaran mungkin kekal bagi setiap peranti. Peraturan pengagregatan harus menyatakan sama ada "diterima" bermaksud mana-mana peranti atau setiap peranti aktif.

Langkah 6: Kekalkan kejujuran resit, kehadiran dan penunjuk menaip.

Kemas kini bacaan membawa conversation_seq paparan tertinggi; pelayan menggunakan maksimum bersyarat supaya permintaan yang lewat tidak boleh menggerakkan kursor ke belakang. Model resit spesifikasi Matrix menggambarkan mengapa bacaan ialah delta yang menggantikan kedudukan yang lebih lama dan mengapa sekadar resit penerimaan tidak mencukupi untuk membuktikan pengguna melihat kandungan.

Kehadiran dan aktiviti menaip mengikuti laluan yang berbeza. Get laluan menyegarkan pajakan kehadiran pendek. Peristiwa menaip diizinkan, dihadkan kadar, diskopkan kepada satu perbualan, digabungkan dan diluputkan selepas beberapa saat. Ia boleh digugurkan semasa beban lampau dan tidak pernah memasuki log mesej tahan lasak. "Terakhir dilihat" memerlukan dasar privasi yang jelas dan kemas kini kasar untuk mengelakkan penukaran trafik degupan jantung menjadi ribut penulisan.

Langkah 7: Reka bentuk laluan kegagalan sebelum mendakwa kebolehpercayaan.

  • Kehilangan ACK: klien mencuba semula client_message_id yang sama; pelayan mengembalikan hasil yang disimpan.
  • Kegagalan get laluan: peranti menyambung semula dengan jitter dan menyambung dari kursor; pajakan sambungan luput.
  • Kegagalan pekerja sebar keluar: tugas penghantaran tahan lasak dicuba semula; get laluan dan klien melakukan penyahduplikasian.
  • Kegagalan pemilik perbualan: epok baharu dan status korum memilih pengganti; pemilik lapuk dipagari (fenced).
  • Peranti perlahan: baris gilir berbatas mencetuskan penyegerakan semula dan bukannya menggunakan memori tanpa had.
  • Perbualan hangat: satu penyusun jujukan mengehadkan kadar penulisan. Kelompokkan komit, asingkan serpihan hangat dan gunakan had kadar produk; menambah pemisahan cincangan (hash partitions) biasa tidak boleh memparalelkan satu jujukan ketat.
  • Perlumbaan keahlian: jujukan perubahan keahlian bersama mesej dan sahkan keizinan terhadap selang yang berkesan.
  • Gangguan serantau: halakan perbualan ke replika yang dinaikkan pangkat hanya selepas memagari wilayah utama lama; masa pemulihan dan kemungkinan kehilangan mesej yang belum diperakui adalah berasingan daripada jaminan tiada kehilangan untuk mesej yang telah diperakui.

Percubaan sambung semula menggunakan pengunduran eksponen berjitter (jittered exponential backoff) dan kawalan kemasukan. Jika tidak, permulaan semula get laluan serantau boleh menukar lima juta klien sihat menjadi ribut jabat tangan yang menghalang pemulihan.

Langkah 8: Buktikan invarians dengan ujian berlapis dan kebolehcerapan.

Ujian sifat menjana percubaan semula, penghantaran yang disusun semula, perubahan keahlian dan epok pemilik, kemudian menegaskan satu mesej logik bagi setiap ID klien, jujukan perbualan unik, kursor monotonik dan tiada mesej tanpa kebenaran selepas sempadan pengalihan keluar. Ujian integrasi mematikan proses sebelum komit, selepas komit tetapi sebelum perakuan dan semasa sebar keluar. Ujian huru-hara mengalih keluar get laluan, pekerja, pemilik serpihan, zon dan partition direktori sambungan.

Ujian beban memodelkan lima juta sambungan jangka panjang, 230,000 penghantaran puncak sesaat, sebar keluar kumpulan, penerima perlahan dan sambungan semula besar-besaran. Perhatikan kependaman penerimaan, kependaman penghantaran langsung, sela penyegerakan, kadar pendua sebelum dan selepas penyahduplikasian klien, jurang jujukan, ketepuan serpihan hangat, bait baris gilir keluar, kemasukan sambung semula dan penolakan bacaan tanpa kebenaran. Pelancaran kenari berkembang hanya apabila invarians ketahanan dan keizinan kekal bersih.

Contoh Jawapan Berkualiti Tinggi

"Saya mula-mula akan mentakrifkan tiga hasil yang berbeza: penerimaan pelayan tahan lasak, penghantaran peranti dan bacaan pengguna. Perkhidmatan memperakui hanya selepas korum menyimpan mesej tersebut. Penghantaran rangkaian kekal sekurang-kurangnya sekali, jadi ID mesej klien yang dijana oleh penghantar menjadikan percubaan semula idempoten dan penerima menyahduplikasi mengikut ID mesej pelayan.

Klien menyambung ke get laluan WebSocket serantau. Direktori sambungan memberitahu pekerja sebar keluar get laluan mana yang memegang setiap peranti pengguna, tetapi get laluan tidak memiliki sejarah. Perkhidmatan sembang menghalakan setiap penulisan mengikut ID perbualan kepada pemilik berpagar semasa. Pemilik tersebut menyemak semula keahlian, memperuntukkan jujukan mengikut perbualan dan menyimpan mesej serta hasil keidempoteman secara atomik. Perbualan yang tidak berkaitan dilaksanakan secara selari; satu perbualan yang sangat hangat kekal sebagai hambatan bersiri yang disengajakan.

Selepas komit, pekerja menyebar keluar ke peranti dalam talian. Penghantaran yang gagal atau luar talian dibaiki melalui API penyegerakan berasaskan kursor. Laluan langsung dan main semula mungkin bertindih, jadi ID mesej menyerap pendua dan jujukan perbualan memulihkan susunan tempatan. Kursor bacaan maju mengikut jujukan maksimum. Kehadiran dan aktiviti menaip menggunakan status usaha terbaik yang meluput dan tidak boleh menyekat mesej tahan lasak.

Pada 2 bilion mesej sehari, masukan purata adalah kira-kira 23,000 sesaat; saya akan merancang sekitar 230,000 pada puncak sepuluh kali ganda. Pada andaian perancangan 1 KB prompt, storan mesej logik adalah kira-kira 2 TB sehari dan 6 TB dengan tiga replika. Untuk lima juta sambungan, had get laluan terukur 50,000 sambungan membayangkan 100 nod asas atau kira-kira 150 pada penggunaan 70% sebelum rizab zon.

Saya akan mengesahkan kehilangan perakuan, kegagalan get laluan dan pemilik, epok lapuk, sebar keluar pendua, peranti perlahan, perlumbaan keahlian, kumpulan hangat dan ribut sambung semula. Pintu pelepasan ialah tiada kehilangan mesej yang diperakui, tiada mesej logik pendua selepas penyahduplikasian, tiada regresi jujukan, tiada akses di luar selang keahlian dan p99 penghantaran langsung yang dinyatakan di bawah beban wakil."

Kesilapan Biasa

  • Kesilapan: Memanggil penerimaan pelayan, penghantaran dan bacaan sebagai satu status → Akibat: Metrik kebolehpercayaan dan belum dibaca menjadi mustahil untuk disahkan → Pembetulan: Takrifkan status dan pemilik monotonik yang berasingan.
  • Kesilapan: Menjanjikan penghantaran tepat sekali melalui rangkaian → Akibat: Perakuan yang hilang atau penyambungan semula menghasilkan pendua yang tidak dapat dijelaskan → Pembetulan: Gunakan pengangkutan sekurang-kurangnya sekali dengan ID penghantaran stabil dan penyahduplikasian.
  • Kesilapan: Menyusun semua mesej secara global → Akibat: Perbualan yang tidak berkaitan berkongsi satu hambatan → Pembetulan: Tetapkan jujukan hanya dalam setiap perbualan.
  • Kesilapan: Memperakui sebelum komit tahan lasak → Akibat: Kegagalan proses atau zon boleh memadamkan mesej yang diterima secara senyap → Pembetulan: Peraku hanya rekod yang dikomitkan secara korum.
  • Kesilapan: Menyimpan sejarah pada get laluan WebSocket → Akibat: Pergerakan sambungan menjadi pergerakan data dan kehilangan get laluan mengancam sejarah → Pembetulan: Pastikan get laluan tanpa status melangkaui status sambungan berbatas.
  • Kesilapan: Mengimbal tanpa henti untuk peranti perlahan → Akibat: Satu klien boleh menghabiskan memori get laluan → Pembetulan: Bataskan baris gilir, putuskan sambungan dan segerak semula daripada storan tahan lasak.
  • Kesilapan: Meletakkan kehadiran dan penunjuk menaip dalam log tahan lasak → Akibat: Trafik kosmetik yang meluput meningkatkan kos dan boleh melewatkan mesej → Pembetulan: Gunakan laluan TTL usaha terbaik yang diizinkan dan dihadkan kadar.
  • Kesilapan: Mengizinkan hanya daripada cache ahli semasa yang lapuk → Akibat: Pengguna yang dialih keluar boleh menghantar atau menerima merentasi perlumbaan → Pembetulan: Susun sempadan keahlian dan pagari penerimaan terhadapnya.
  • Kesilapan: Mengukur saiz get laluan mengikut kiraan soket melahu → Akibat: TLS, degupan jantung, sebar keluar dan penyambungan semula memecahkan rancangan → Pembetulan: Buat penanda aras beban kerja penuh pada sasaran p99 dan simpan ruang simpanan kegagalan.

Soalan Susulan dan Maklum Balas

Susulan 1: Bagaimanakah anda menambah penyulitan hujung ke hujung?

Sulitkan badan mesej pada peranti penghantar dan simpan teks sifer sahaja ditambah metadata penghalaan yang diperlukan. Setiap peranti memerlukan kunci identiti, senarai peranti yang ditandatangani dan pengedaran kunci perbualan; menambah atau mengalih keluar peranti atau ahli akan memutarkan atau mengedarkan semula kunci mengikut dasar. Pelayan masih boleh menjujukan dan menghalakan teks sifer, tetapi carian pihak pelayan, penyederhanaan kandungan, pemulihan, pratonton dan pengendalian salah guna menjadi terhad. Metadata penghantaran, set peserta, pemasaan dan saiz mungkin kekal boleh diperhatikan, jadi penyulitan tidak menghapuskan kerja privasi metadata.

Susulan 2: Bolehkah satu kumpulan hangat dipecahkan merentasi banyak penyusun jujukan?

Tidak boleh jika mahu mengekalkan satu jujukan bersebelahan yang ketat tanpa pihak berkuasa pengisihan yang lain. Mencincang perbualan kepada lebih banyak serpihan biasa masih meninggalkan titik penggabungan atau konsensus. Pertama, kelompokkan komit dan asingkan serpihan, kemudian laksanakan had bagi setiap perbualan. Jika produk boleh menerima pengisihan separa, bahagikan mengikut bebenang atau penghantar dan dedahkan hubungan sebab akibat, tetapi itu mengubah kontrak dan kerumitan klien.

Susulan 3: Penghantar melihat ACK, tetapi penerima kekal luar talian selama seminggu. Adakah mesej itu telah dihantar?

Ia telah diterima, bukan dihantar ke peranti tersebut. Mesej tahan lasak kekal tersedia di bawah dasar pengekalan, dan petunjuk tolak boleh membangunkan peranti. Apabila menyambung semula, peranti menyegerak daripada kursornya dan kemudian melaporkan penghantaran. UI produk dan metrik harus memisahkan status diterima pelayan, dihantar ke mana-mana peranti, dihantar ke semua peranti aktif dan dibaca.

Susulan 4: Bagaimanakah suntingan dan pemadaman berinteraksi dengan pengisihan?

Wakilkan ia sebagai peristiwa tersusun baharu yang merujuk mesej asal dan bukannya mengubah sejarah secara tidak kelihatan. Klien melipat aliran peristiwa ke dalam paparan semasa. Keizinan disemak apabila suntingan atau pemadaman diterima, dan dasar mentakrifkan had masa serta sama ada pemadaman membuang kandungan, menandakan tanda kubur (tombstone) atau mencetuskan pemadaman tak segerak daripada storan sekunder.

Susulan 5: Bagaimana jika ahli yang dialih keluar menyambung semula dengan kursor lama?

Perkhidmatan penyegerakan menilai selang keahlian pengguna, bukan sekadar pemilikan kursor. Ia mengembalikan peristiwa yang dibenarkan untuk pengguna tersebut sahaja dan merangkumi sempadan pengalihan keluar keahlian. Kursor ialah kedudukan legap, bukan keupayaan (capability). Lampiran yang dicache dan salinan tempatan memerlukan jangkaan pembatalan dan pengekalan yang berasingan kerana pelayan tidak boleh memadamkan data yang telah disimpan pada peranti.

Susulan 6: Bagaimanakah anda menyokong saluran awam yang sangat besar?

Reka bentuk sebar-keluar-semasa-menulis (fan-out-on-write) kumpulan-200 tidak lagi sesuai. Simpan log saluran sekali, biarkan pengikut menarik mengikut kursor, sebar keluar petunjuk tolak atau unread yang padat sahaja, simpan segmen popular dalam cache dan longgarkan resit penghantaran individu. Pemisahan, penyederhanaan, penemuan dan titik panas saluran selebriti menjadi masalah kelas pertama, jadi ini harus dianggap sebagai beban kerja yang berbeza dan bukannya nilai berangka yang lebih besar dalam reka bentuk yang sama.

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