Gesaan dan skop
Soalan reka bentuk kejuruteraan data ini menguji kitaran hayat penuh rekod yang ditolak: pengesanan, kuarantin, pembaikan, main semula (replay) dan penutupan. Jawapan harus melindungi pemprosesan (throughput) pada laluan yang sihat sambil mengekalkan bukti yang mencukupi untuk menghasilkan semula sesuatu keputusan.
Perkara yang diuji oleh penemu duga
- Membezakan kegagalan skema, peraturan perniagaan, pendua, kelewatan dan poison pill.
- Mereka bentuk rekod kuarantin dengan bukti muatan (payload), kedudukan sumber dan sebab.
- Menggunakan keidempotennan (idempotency), peraturan berversi dan keadaan yang boleh diaudit untuk main semula.
- Merangkumi tekanan balik (backpressure), amaran, privasi, pengekalan (retention) dan pemilikan.
Soalan penjelasan untuk ditanya
Jelaskan sama ada input adalah kelompok, penstriman atau kedua-duanya; sama ada rekod yang sah boleh dikomit secara bebas; sama ada peristiwa mempunyai event_id yang stabil, cap masa perniagaan dan ofset sumber; sama ada main semula membaca peristiwa asal atau mengambil semula daripada sumber; dan apakah keperluan privasi serta pengekalan yang dikenakan.
Jawapan 30 saat
Saya akan mengasingkan lapisan mentah (raw) yang tidak boleh diubah (immutable), penghala pengesahan, laluan data sah dan laluan kuarantin. Setiap rekod yang gagal mengekalkan buktinya, kedudukan sumber, versi peraturan, sebab dan keadaan; rekod sah ditulis secara idempoten mengikut event_id. Selepas pembaikan, kelompok main semula menjalankan transformasi dan sempadan penulisan yang sama, dengan versi peraturan yang terkawal dan metrik penyesuaian (reconciliation) yang membuktikan bahawa rekod tidak hilang secara senyap mahupun diduplikasi.
Analisis terperinci langkah demi langkah
1. Kekalkan fakta sebelum penghalaan
Tulis peristiwa yang masuk ke storan tidak boleh ubah atau log yang boleh dimainkan semula terlebih dahulu, termasuk sumber, sekatan/ofset, masa penerimaan, event_id dan cincangan (hash) muatan. Kegagalan penghuraian (parse) atau skema harus dihala dengan kod ralat ke kuarantin dan bukannya dibuang. Rekod yang lulus diteruskan melalui laluan biasa, supaya satu rekod yang buruk tidak menghentikan kelompok atau sekatan yang tidak berkaitan.
2. Jadikan kuarantin boleh diambil tindakan
Simpan muatan atau rujukan terkawal, medan yang gagal, nama dan versi peraturan, masa kegagalan pertama, kedudukan sumber, kiraan percubaan semula, kelompok pembaikan dan keadaan seperti open, ready_for_replay, replayed atau rejected. Sulitkan atau minimakan medan sensitif dan laksanakan dasar pengekalan. Jadual kuarantin ialah baris gilir operasi, bukan arkib tanpa had.
3. Berikan sempadan ketepatan yang sama kepada main semula
Versikan peraturan pembaikan dan jangan sekali-kali menulis ganti peristiwa asal. Kerja main semula memilih keadaan dan versi peraturan yang diluluskan, mengesahkan sampel kecil atau sasaran bayangan (shadow target), kemudian memanggil transformasi dan laluan penulisan yang sama yang digunakan oleh trafik langsung. Gunakan event_id serta versi perniagaan sebagai kunci keidempotennan; tentukan sama ada konflik adalah upsert, no-op atau versi baharu. Memainkan semula dua kali mesti menumpu kepada hasil yang sama.
4. Kendalikan pendua, kelewatan dan poison pill
Kesan pendua dengan event_id, kedudukan sumber atau tetingkap penyahduplikasian yang didokumenkan; ofset sahaja bukan identiti perniagaan. Hentikan atau halakan peristiwa lewat mengikut masa perniagaan dan nyatakan bagaimana tera air (watermarks) atau pengisian semula (backfills) menjejaskan hasil hiliran (downstream). Hadkan percubaan semula untuk poison pill dan serahkannya kepada pemilik atau keadaan penolakan terminal, bagi mengelakkan satu rekod daripada menggunakan semua kapasiti pekerja (worker).
5. Buktikan kesihatan dengan kebolehcerapan
Jejak kadar kelulusan sah, kiraan kuarantin mengikut sumber dan peraturan, usia belum selesai yang paling lama, kadar kejayaan main semula, konflik penulisan pendua, kependaman hujung ke hujung dan kesegaran. Berikan amaran pada ambang batas atau asingkan satu sumber sebelum menghentikan keseluruhan saluran paip. Sesuaikan kiraan mentah, sah, dikuarantin, dimainkan semula dan ditolak untuk setiap kelompok atau julat ofset; perbezaan yang tidak dapat dijelaskan dianggap sebagai insiden.
Contoh jawapan yang mantap
Mula-mula, saya akan menjelaskan identiti peristiwa dan keperluan ketekalan. Kemudian saya akan mengekalkan peristiwa mentah secara tidak boleh ubah, mengesahkan skema, peraturan perniagaan, pendua dan susunan, serta menghalakan kegagalan ke storan kuarantin dan bukannya menggugurkannya. Rekod kuarantin menyimpan rujukan muatan, ofset sumber, versi peraturan, sebab terperinci dan keadaan kitaran hayat. Rekod sah dan rekod yang dimainkan semula berkongsi laluan penulisan idempoten yang sama yang dikunci oleh event_id dan versi perniagaan. Pembaikan menghasilkan kelompok main semula yang diluluskan tanpa mengubah peristiwa asal; saya akan menguji sampel kecil, mengehadkan percubaan semula poison pill dan menjelaskan tingkah laku peristiwa lewat. Akhir sekali, saya akan memantau usia kuarantin, kejayaan main semula, konflik penulisan, kesegaran dan penyesuaian kiraan, sambil melindungi medan sensitif dan menguatkuasakan pengekalan.
Kesilapan lazim
- Menggugurkan baris yang gagal atau hanya mencatat rentetan ralat dalam log.
- Mengabaikan kedudukan sumber, identiti peristiwa atau versi peraturan.
- Melaksanakan main semula dengan transformasi berasingan yang boleh menyimpang daripada trafik langsung.
- Mencuba semula poison pill tanpa had atau pemilik.
- Menganggap kuarantin sebagai tempat pembuangan sampah tanpa sebarang keadaan, pengekalan atau syarat penutupan.
- Hanya memantau kadar kejayaan agregat dan bukannya dimensi sumber, peraturan dan usia.
Soalan susulan dan respons
Bagaimanakah anda melindungi data peribadi dalam kuarantin?
Simpan hanya medan minimum yang diperlukan untuk diagnosis, sulitkan muatan sensitif, sekat akses dan dapatkan semula data asal melalui rujukan terkawal. Audit bacaan dan laksanakan pemadaman apabila mencapai tarikh akhir pengekalan.
Bagaimana jika data baharu tiba semasa main semula?
Gunakan kelompok main semula yang berasingan dan versi peristiwa yang eksplisit. Gabungkan menggunakan kunci keidempotennan; jika susunan adalah penting, tentukan sempadan sekatan atau entiti dan rekodkan keputusan konflik.
Bilakah anda akan menghentikan keseluruhan saluran paip?
Hanya untuk skema yang merosakkan (breaking schema), sasaran yang tidak tersedia atau risiko kerosakan yang boleh mencemarkan data sah. Satu sumber atau peraturan yang buruk biasanya perlu diasingkan sementara laluan lain diteruskan.
Bagaimanakah anda membuktikan bahawa tiada data yang hilang?
Cipta lejar untuk setiap kelompok input atau julat ofset dan selaraskan kiraan mentah, sah, dikuarantin, dimainkan semula dan ditolak. Ambil sampel set event_id dan sertakan usia belum selesai dalam SLO kualiti.