Topik temu duga representatif

Temu duga reka bentuk sistem: Bagaimanakah anda menggunakan seni bina berasaskan sel untuk mengekang radius letusan?

Reka bentuk sistemSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Reka bentuk seni bina berasaskan sel untuk SaaS global. Ia mesti mengekang radius letusan (blast radius) bagi satu kegagalan di samping menyokong sel baharu, migrasi penyewa, pelaporan rentas sel dan pelepasan sifar masa henti.

Gesaan dan skop

Anda memiliki SaaS global di mana kegagalan pangkalan data, barisan gilir (queue) atau penggunaan (deployment) dalam satu kluster boleh menjejaskan setiap penyewa. Reka bentuk seni bina berasaskan sel: setiap sel ialah salinan penuh sistem yang boleh beroperasi secara bebas yang melayani set penyewa tetap, dan lapisan masuk menghalakan permintaan ke sel sasaran melalui pemetaan yang stabil.

Kupas pemetakan penyewa, direktori penghalaan, sempadan pengiraan dan data di dalam sel, pelaporan rentas sel, pelepasan, migrasi, kapasiti dan pemulihan bencana. AWS menerangkan sel sebagai replika bebas dan menyimpan pemetaan pengguna-ke-sel dalam storan berketersediaan tinggi; panduan petak kedap (bulkhead) menerangkan penghalaan mengikut kunci partition di sebalik satu titik akhir.

Perkara yang dinilai oleh penemu duga

  • Sama ada anda mentakrifkan skop kegagalan, ketekalan penyewa dan penurunan prestasi yang boleh diterima terlebih dahulu.
  • Sama ada sel merupakan domain kegagalan sebenar dan bukannya sekadar perkhidmatan tanpa keadaan (stateless) yang diduplikasi.
  • Sama ada anda mengenal pasti risiko penghalaan, satah kawalan (control plane), kebergantungan berkongsi dan pertanyaan rentas sel.
  • Sama ada sel baharu, pengimbangan semula dan migrasi penyewa mempunyai langkah yang boleh diterbalikkan.
  • Sama ada metrik kapasiti, ralat dan kebergantungan pada peringkat sel membuktikan dakwaan radius letusan.

Rujukan temu duga reka bentuk sistem menganggap seni bina berasaskan sel sebagai corak pengasingan untuk sistem yang sangat besar. Jawapan yang mantap menerangkan bila faedah kebolehpercayaan mewajarkan pertindihan infrastruktur dan operasi; sel bukan sinonim untuk perkhidmatan mikro.

Soalan penjelasan sebelum menjawab

  • Adakah skop kegagalan sasaran merangkumi satu penyewa, satu sel, satu Zon Ketersediaan (AZ), atau satu wilayah?
  • Bolehkah penyewa berkongsi data, carian global, atau agregat rentas penyewa?
  • Operasi manakah yang memerlukan linearizabiliti, dan laporan manakah yang boleh ditangguhkan atau konsisten akhirnya (eventually consistent)?
  • Bolehkah migrasi dijadikan mod baca sahaja untuk seketika? Adakah terdapat kekangan pemastautan data?
  • Apakah sasaran ketersediaan, bilangan penyewa, pertumbuhan, kapasiti sel dan kekerapan pelepasan?

Kerangka jawapan 30 saat

Saya akan memetakan kunci penyewa yang stabil kepada sel yang tetap. Setiap sel memiliki pengiraan, barisan gilir, cache dan storan data utama; satah kawalan global hanya memiliki versi, kapasiti dan pemetaan. Penghala masuk membaca direktori berketersediaan tinggi dan hanya mengasingkan sel yang gagal. Laporan rentas sel menggunakan pengagregatan tak segerak (asynchronous) supaya pertanyaan tidak membina semula pangkalan data kongsi. Penciptaan, migrasi dan pelepasan sel menggunakan langkah-langkah kecil, boleh diperhatikan dan boleh diterbalikkan, dengan SLO peringkat sel yang membuktikan sempadan kegagalan.

Jawapan mendalam langkah demi langkah

Langkah 1: Tentukan sempadan sel dan andaian kegagalan

Takrifkan sel sebagai salinan lengkap yang boleh digunakan dan dipulihkan secara bebas: API, pekerja, cache, pangkalan data, awalan storan objek dan pemantauan. Perkhidmatan identiti, pengebilan atau konfigurasi yang dikongsi memerlukan belanjawan kegagalan yang jelas. Jika satah kawalan yang dikongsi menyekat setiap sel apabila ia tidak tersedia, satah data tidak diasingkan sepenuhnya.

Langkah 2: Pilih kunci partisi dan direktori penghalaan

Gunakan tenant_id sebagai kunci partisi yang stabil. Direktori menyimpan pemetaan penyewa-ke-sel, versi, keadaan migrasi dan kapasiti. Penghala membaca cache tempatan terlebih dahulu dan menyegarkan daripada direktori berketersediaan tinggi; nombor versi dan pajakan (leases) menghalang laluan lama daripada menulis kepada dua sel semasa migrasi. Klien melihat satu nama hos manakala penghala mengurus sempadan percubaan semula.

Langkah 3: Bina satah data dalam sel

Setiap sel mempunyai pangkalan data utama dan barisan gilir mesejnya sendiri; data penyewa tidak ditulis secara segerak merentasi sel. Replika, cache dan storan objek membawa identiti sel, dan sandaran mengekalkan metadata tersebut. Konfigurasi global menggunakan snapshot baca sahaja atau pelancaran berversi daripada menghantar trafik aktif ke satu pangkalan data global.

Langkah 4: Kendalikan pertanyaan rentas sel

Setiap sel mengeluarkan penstriman perubahan (change stream) untuk membina jadual agregat yang digunakan oleh lapisan analitik global. Laporan menyertakan cap masa data dan penanda sel yang hilang dan bukannya mendakwa kesempurnaan masa nyata. Operasi rentas penyewa yang konsisten kukuh (strongly consistent) harus dikecilkan, dibuat tak segerak, atau menerima domain kegagalan kongsi yang lebih besar secara eksplisit; elakkan komit dua fasa (two-phase commit) pada laluan permintaan.

Langkah 5: Reka bentuk laluan kegagalan dan penurunan fungsi

Pemeriksaan kesihatan meliputi kebergantungan dalam sel, ketercapaian laluan dan ketepatan perniagaan. Apabila sel gagal, direktori menandakannya sebagai sedang disalirkan (draining) dan menghentikan permintaan baharu; cache bacaan atau kerja tak segerak boleh diturunkan fungsinya apabila produk membenarkan. Jangan pindahkan penyewa ke sel sebarangan sehingga sempadan replikasi, keidempotetan (idempotency) dan kebenaran terbukti, jika tidak operasi alih ganti (failover) boleh menghasilkan penulisan pendua.

Langkah 6: Tambah sel dan seimbangkan semula kapasiti

Cipta sel kosong daripada templat infrastruktur, jalankan trafik sintetik dan bacaan bayangan (shadow reads), kemudian benarkan set penyewa kecil masuk. Isyarat kapasiti termasuk CPU, sambungan pangkalan data, kelewatan barisan gilir, pertumbuhan storan dan kos setiap penyewa. Pengimbangan semula membekukan versi pemetaan, menyalin dan mengesahkan data, melaksanakan penyerahan penulisan yang singkat, dan memerhatikan sel lama serta baharu; sekiranya berlaku kegagalan, undurkan pemetaan dan bukannya memadamkan data lama.

Langkah 7: Tadbir pelepasan dan versi

Lepaskan satah kawalan, templat sel dan versi perniagaan secara berasingan. Lakukan pelepasan kenari (canary) dalam satu sel, kemudian kembangkan sel demi sel. Kekalkan tetingkap keserasian supaya versi baharu tidak boleh menulis medan yang tidak boleh dibaca oleh versi lama. Jadikan pengedaran versi dan ralat boleh dilihat mengikut sel; purata global tidak boleh menyembunyikan satu versi yang bermasalah.

Langkah 8: Sahkan radius letusan dan kos operasi

Suntik kegagalan pangkalan data, barisan gilir, direktori penghalaan dan penggunaan ke dalam satu sel dan sahkan bahawa hanya penyewa yang dijangka terjejas. Jejaki ketersediaan sel, belanjawan ralat, bahagian permintaan rentas sel, masa undur migrasi, kebergantungan satah kawalan kongsi dan kapasiti ganti. Jika sel terlalu sedikit untuk mengasingkan kerosakan atau kos operasi pendua melebihi peningkatan kebolehpercayaan, pilih reka bentuk partisi atau petak kedap yang lebih mudah.

Jawapan model

Saya akan memetakan tenant_id kepada sel yang tetap. Setiap sel menjalankan API, barisan gilir, cache dan storan utama secara bebas; satah kawalan hanya mengurus versi, kapasiti dan pemetaan. Penghala nama hos tunggal membaca direktori berversi dan berketersediaan tinggi, dan sel yang gagal akan disalirkan (drain) dan bukannya menerima penulisan yang belum disahkan di tempat lain. Pelaporan rentas sel adalah secara tak segerak melalui penstriman perubahan. Migrasi menggunakan penyalinan, pengesahan, penyerahan singkat dan pemetaan yang boleh diterbalikkan. Saya akan membuktikan dakwaan radius letusan dengan SLO sel, bahagian kebergantungan berkongsi, masa pengunduran dan latihan kegagalan; jika kos pengasingan melebihi faedahnya, saya akan menggunakan petak kedap yang lebih mudah.

Kesilapan biasa

  • Menduplikasi perkhidmatan tanpa keadaan sahaja → pangkalan data kongsi kekal sebagai titik kegagalan tunggal → tetapkan sempadan data dan barisan gilir setiap sel.
  • Memindahkan penyewa secara rawak semasa kegagalan → penulisan pendua atau ketidakpadanan kebenaran berlaku → buktikan replikasi, keidempotetan dan versi laluan terlebih dahulu.
  • Mengagregat merentasi sel pada laluan permintaan → mewujudkan domain kegagalan global baharu → gunakan pengagregatan tak segerak dengan penanda cap masa data.
  • Menggunakan pemeriksaan kesihatan global sahaja → sel yang rosak tersembunyi di sebalik nilai purata → rekod SLO peringkat sel dan pengedaran versi.
  • Menukar laluan secara terus semasa migrasi → penulisan lama dan baharu bertindih → gunakan versi pemetaan, pengesahan salinan dan pengunduran.
  • Memberikan setiap kebergantungan selnya sendiri → kos dan operasi tidak terkawal → variasikan radius letusan dan faedah kapasiti terlebih dahulu.

Soalan susulan dan respons

Bagaimana jika direktori penghalaan gagal?

Kekalkan cache tempatan berversi dan snapshot baca sahaja, hadkan perubahan pemetaan, dan biarkan penyewa sedia ada meneruskan pada sel asal mereka. Jangan lakukan pengimbangan semula secara meluas sehingga direktori pulih.

Bagaimana jika laporan pentadbir mesti dalam masa nyata merentasi sel?

Jelaskan kelewatan yang dibenarkan dan semantik data yang hilang. Ketekalan yang kukuh mungkin memerlukan operasi dihadkan atau menerima domain kegagalan kongsi yang lebih besar; laporan biasa harus menggunakan agregat tak segerak dengan cap masa.

Bagaimanakah anda memindahkan penyewa apabila sesuatu sel telah penuh?

Salin dan sahkan data, terbitkan versi pemetaan baharu, selaraskan penyerahan penulisan yang singkat, dan tingkatkan trafik secara beransur-ansur. Kekalkan sel lama sehingga ketekalan terbukti; undurkan pemetaan jika sebaliknya.

Adakah selamat untuk menggunakan satu versi pada beberapa sel sahaja?

Ya, dengan skema yang serasi, kebolehcerapan versi dan susunan pelancaran yang eksplisit. Kadar kejayaan global tidak boleh menggantikan belanjawan ralat setiap sel.

Bagaimanakah anda membuktikan bahawa kegagalan tidak merebak?

Lakukan latihan kegagalan pangkalan data, barisan gilir, penghalaan dan penggunaan di dalam satu sel. Rekod penyewa yang terjejas, permintaan rentas sel, masa pemulihan dan panggilan kebergantungan kongsi.

Bilakah anda tidak patut menggunakan seni bina berasaskan sel?

Apabila skala penyewa dan kos kegagalan adalah rendah, atau ketekalan rentas penyewa yang kukuh mendominasi, sumber pendua dan kerumitan migrasi mungkin tidak memberi pulangan yang setimpal.

Bagaimanakah sel boleh berkongsi identiti dan pengebilan?

Kekalkan perkhidmatan berkongsi dalam satah kawalan berkadar rendah, simpan hasil baca sahaja dalam cache, dan tetapkan penurunan fungsi. Penulisan pengebilan memerlukan kunci keidempotetan dan pampasan supaya kerosakan perkhidmatan kongsi tidak merebak ke setiap satah data.

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