Petunjuk dan skenario
Sebuah SaaS global memungkinkan pengguna mengedit profil di wilayah mana pun. Selama partisi jaringan, Eropa dan Amerika Serikat sama-sama menerima pembaruan untuk pengguna yang sama; setelah pemulihan, nama, avatar, zona waktu, dan pengaturan privasi mengalami konflik. Desain penulisan, replikasi, deteksi konflik, penggabungan, audit, dan pemulihan pengguna, serta jelaskan kompromi (trade-off) antara ketersediaan dan konsistensi.
Hal yang diuji oleh pewawancara
- Apakah Anda mengklasifikasikan konsistensi berdasarkan semantik bidang daripada menerapkan satu aturan konflik untuk seluruh rekaman.
- Apakah Anda mendesain perutean regional, metadata versi, keterlambatan replikasi, dan percobaan ulang yang idempoten.
- Apakah Anda menangani bidang privasi dan keamanan yang tidak dapat digabungkan secara otomatis serta memberikan hasil yang dapat dijelaskan.
- Apakah Anda membuat kompromi yang jelas antara pemulihan, biaya, latensi, dan risiko kehilangan data.
Pertanyaan klarifikasi untuk diajukan terlebih dahulu
- Bidang mana yang dapat digabungkan secara independen, dan mana yang melibatkan privasi, identitas, atau keamanan sehingga memerlukan serialisasi atau konfirmasi manusia?
- Apakah targetnya adalah konsistensi kuat, sesi, atau eventual, dan berapa banyak keterlambatan replikasi yang dapat diterima pengguna?
- Bisakah satu pengguna secara aktif menulis di beberapa wilayah, atau dapatkah wilayah utama (home region) ditetapkan per pengguna atau penyewa (tenant)?
- Berapa lama kedua versi harus tetap tersedia, dan apa yang harus dilihat oleh pengguna, tim dukungan, dan auditor?
Jawaban 30 detik
Saya akan mengklasifikasikan konsistensi berdasarkan bidang: avatar dan biografi dapat menggunakan penggabungan tingkat bidang, sedangkan pengaturan privasi dan keamanan memerlukan pemeriksaan versi yang lebih ketat. Setiap penulisan membawa versi pengguna, wilayah, ID operasi, dan bidang yang diubah, serta replikasi menggunakan peristiwa yang idempoten. Saya akan menetapkan wilayah utama secara default untuk mengurangi konflik; jika multi-writer diperlukan, deteksi versi bersamaan, gabungkan bidang yang aman secara otomatis, dan buat konflik tinjauan untuk bidang sensitif. Pertahankan catatan audit yang tidak dapat diubah dan sediakan jalur pemulihan yang terlihat oleh pengguna. Ukur tingkat konflik, keterlambatan replikasi, pembaruan yang hilang, dan waktu pemulihan.
Pembahasan mendalam
1. Klasifikasikan konsistensi pada tingkat bidang
Bagi profil menjadi bidang yang dapat digabungkan dan bidang yang sensitif terhadap keamanan. Nama tampilan, biografi, atau avatar dapat menggunakan penggabungan berbasis penulisan terakhir atau versi, sedangkan email, MFA, visibilitas privasi, dan status akun mungkin memerlukan penulisan bersyarat, penulis tunggal, atau tinjauan manusia. Klasifikasi ini menentukan model data, UI, dan izin pemulihan; stempel waktu tingkat baris saja tidak cukup.
2. Pilih perutean single-home, partition-home, atau multi-writer
Desain paling sederhana menetapkan wilayah utama per pengguna atau penyewa, melayani pembacaan terdekat di tempat lain, dan mengambil alih sementara selama kegagalan. Jika bisnis memerlukan multi-writer, terima biaya deteksi dan penggabungan konflik. Perutean harus membawa metadata wilayah dan versi; pengalihan kegagalan (failover) memerlukan sewa (lease) atau epoch pengambilalihan eksplisit sehingga wilayah utama lama yang pulih tidak terus menulis dan menciptakan konflik pemutaran ulang (replay).
3. Desain versi, peristiwa, dan idempotensi
Simpan vektor versi, wilayah, waktu logis, dan ID operasi terakhir per bidang atau grup bidang. Penulisan bersyarat memverifikasi bahwa versi dasar klien masih valid; percobaan ulang dideduplikasi berdasarkan ID operasi. Peristiwa replikasi membawa versi lama, versi baru, dan bidang yang diubah, sehingga pengiriman duplikat, tidak berurutan, dan tertunda tidak dapat menerapkan atau menimpa perubahan dua kali.
4. Tentukan deteksi konflik dan penggabungan otomatis
Dua versi berkonflik ketika tidak ada yang mencakup satu sama lain. Bidang yang tidak bersinggungan (disjoint) dapat digabungkan; bidang yang sama mengikuti aturan bisnis seperti prioritas wilayah utama, penulis terakhir, atau tinjauan eksplisit. Jangan memperlakukan waktu jam dinding (wall-clock time) sebagai niat pengguna: pergeseran jam (clock skew) dapat membuat konten yang lebih lama menang. Catat aturan, versi sumber, dan hasil untuk setiap penggabungan.
5. Lindungi bidang privasi dan keamanan
Visibilitas privasi, email, metode masuk, dan MFA tidak boleh menggunakan aturan umum pemenang penulisan terakhir (last-write-wins). Wajibkan penulisan bersyarat, otorisasi wilayah utama, atau tinjauan manusia, dan jaga agar visibilitas tetap konservatif selama konflik. API pemulihan harus mengautentikasi operator serta memeriksa alasan dan izin agar “penyelesaian konflik” tidak menjadi jalur eskalasi hak istimewa.
6. Jadikan pemulihan dan observabilitas sebagai prioritas utama
Simpan versi sebelum dan sesudah konflik, rantai peristiwa, dan keputusan penggabungan, serta biarkan pengguna membatalkan (undo) atau memilih versi. Pantau tingkat konflik, keterlambatan replikasi, versi yang macet, pembaruan yang hilang, waktu resolusi manual, dan peralihan wilayah. Lakukan latihan isolasi regional, kebangkitan wilayah utama lama, peristiwa duplikat, dan pemutaran ulang sehingga pemulihan tidak menciptakan penimpaan kedua.
Jawaban kuat yang lengkap
Saya akan mengklasifikasikan konsistensi berdasarkan bidang dan memberikan aturan bersyarat atau penulis tunggal yang lebih ketat pada bidang privasi dan keamanan. Tetapkan wilayah utama pengguna secara default dengan pembacaan terdekat; jika multi-writer diperlukan, sertakan wilayah, versi, ID operasi, dan kumpulan bidang yang diubah di setiap peristiwa serta buat replikasi idempoten dan aman terhadap perubahan urutan. Deteksi versi bersamaan, gabungkan bidang yang tidak bersinggungan secara otomatis, dan gunakan aturan bisnis atau tinjauan pengguna untuk bidang yang sama; jangan pernah memperlakukan waktu jam dinding sebagai niat. Tulis versi, aturan penggabungan, dan operator ke log audit, pantau tingkat konflik, keterlambatan, pembaruan yang hilang, dan waktu pemulihan, serta latih skenario kebangkitan wilayah utama lama dan peristiwa duplikat.
Pola kegagalan umum
- Menerapkan satu aturan last-write-wins tingkat rekaman yang menimpa perubahan privasi atau keamanan.
- Mengatakan “gunakan vektor versi” tanpa menjelaskan granularitas bidang, biaya penyimpanan, dan pengalaman pengguna setelah konflik.
- Mengabaikan replikasi duplikat, tidak berurutan, tertunda, dan kebangkitan wilayah utama lama, yang menyebabkan penimpaan lain selama pemulihan.
- Menghilangkan ID operasi, riwayat audit, dan jalur pembatalan pengguna, membuat penggabungan tidak dapat dijelaskan dan tidak dapat diperbaiki.
- Hanya membahas ketersediaan dan latensi tanpa mengukur pembaruan yang hilang, tingkat konflik, dan biaya manual.
Pertanyaan lanjutan dan perluasan
Pertanyaan lanjutan 1: Mengapa tidak menggunakan last-write-wins di semua tempat?
Aturan ini sederhana dan konvergen, tetapi waktu jam dinding tidak mengekspresikan niat pengguna dan pergeseran jam dapat membuat konten lama menang. Ini mungkin dapat diterima untuk bidang berisiko rendah; privasi, keamanan, dan konten bernilai tinggi memerlukan penulisan bersyarat, penulis utama, atau konflik eksplisit.
Pertanyaan lanjutan 2: Apakah wilayah utama merusak ketersediaan?
Hal ini menambah latensi penulisan lintas wilayah dan memerlukan pengambilalihan selama kegagalan wilayah utama, tetapi sangat mengurangi konflik dan kompleksitas operasional. Pilih wilayah utama per penyewa, sediakan epoch pengambilalihan sementara, dan evaluasi target ketersediaan bersama dengan persyaratan keamanan data.
Pertanyaan lanjutan 3: Bagaimana UI harus menampilkan konflik?
Tampilkan bidang, kedua sumber, dan waktu pembaruan serta jelaskan mengapa pilihan diperlukan. Jaga agar bidang sensitif tetap konservatif dan hindari mengekspos istilah internal wilayah atau basis data. Sediakan jalur pembatalan, coba lagi, dan dukungan serta catat pilihan pengguna.
Pertanyaan lanjutan 4: Bagaimana cara membaca saat replikasi sangat tertunda?
Kembalikan watermark versi atau wilayah agar klien mengetahui tingkat kesegaran data. Rute pembacaan setelah penulisan (read-after-write) untuk alur kritis ke wilayah penulisan sementara pembacaan biasa menerima konsistensi eventual. Berikan peringatan, batasi perubahan berisiko tinggi, atau arahkan pengguna ke wilayah utama saat keterlambatan melebihi ambang batas.