Topik wawancara representatif

Wawancara Data Engineering: Bagaimana Cara Anda Mendesain Pipeline Penghapusan Data Right-to-Erasure?

DataSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Sebuah perusahaan menyimpan data pengguna di PostgreSQL, indeks pencarian, cache, log peristiwa (event log), lakehouse Iceberg, warehouse, pemroses pihak ketiga, dan cadangan harian. Desain pipeline yang mengeksekusi permintaan right-to-erasure yang disetujui, menangani alias dan kegagalan parsial, mencegah replay atau restore membawa data kembali, dan menghasilkan bukti penyelesaian yang andal.

Pertanyaan dan Konteks

Sebuah perusahaan menyimpan data pengguna di PostgreSQL, indeks pencarian, cache, event log yang bersifat append-only, lakehouse Iceberg, warehouse, pemroses pihak ketiga, dan cadangan harian. Desain pipeline yang mengeksekusi permintaan right-to-erasure yang telah disetujui. Pipeline ini harus menyelesaikan alias subjek, menangani kegagalan parsial, mencegah event lama atau restore cadangan membuat ulang data yang telah dihapus, dan menghasilkan bukti penyelesaian yang andal.

Asumsikan layanan privasi atau hukum telah memverifikasi pemohon, menyetujui permintaan, menentukan cakupannya, mencatat pengecualian yang berlaku, dan memberikan batas waktu kebijakan (policy deadline). Platform data bertugas mengeksekusi keputusan tersebut. Wawancara ini tidak meminta insinyur untuk menafsirkan hukum.

Jaga agar batasan kebijakan tetap eksplisit. GDPR Pasal 17 mendefinisikan hak untuk penghapusan (right to erasure) dan juga mencantumkan ketentuan serta pengecualian, sehingga permintaan yang disetujui memerlukan cakupan yang tercatat. Pasal 19 dapat mewajibkan komunikasi kepada penerima data. Sistem live, cadangan, dan tabel berversi juga memperlihatkan status penghapusan yang berbeda: data cadangan dapat tetap ada hingga tertimpa saat dijadikan tidak dapat digunakan lagi (put beyond use), dan baris Iceberg yang dihapus dapat tetap berada dalam file yang dirujuk oleh snapshot yang lebih lama. Alur kerja harus merepresentasikan status-status tersebut alih-alih menggabungkannya ke dalam satu respons basis data saja.

Desain terkuat memperlakukan penghapusan sebagai alur kerja data yang durable dan terikat kebijakan. Alur ini dimulai dari identitas subjek yang terverifikasi, menurunkan manifes target berversi dari inventaris data dan grafik lineage, mengeksekusi pekerjaan idempoten per target, memblokir pemulihan kembali (resurrection), dan memverifikasi setiap target yang diperlukan sebelum dinyatakan selesai.

Hal yang Dievaluasi oleh Pewawancara

Pertama, apakah kandidat dapat mendefinisikan kontraknya? Penutupan akun, event penghapusan tingkat bisnis, pembatasan akses, dan penghapusan yang disetujui memiliki semantik yang berbeda. Layanan penghapusan memerlukan cakupan yang disetujui, batas waktu efektif (cutoff), tenggat waktu kebijakan, pengecualian, dan persyaratan bukti. Layanan ini tidak boleh mengada-ada secara diam-diam.

Kedua, dapatkah kandidat menemukan seseorang di seluruh model data nyata? Alamat email jarang sekali cukup. Orang yang sama mungkin memiliki ID akun, ID berlingkup tenant, ID perangkat, ID pelanggan pembayaran, identitas dukungan, dan pengidentifikasi yang diganti selama penggabungan akun (account merges). Jawaban yang kuat memperkenalkan langkah resolusi identitas yang terkontrol dan mempertimbangkan catatan bersama (shared records) yang dimiliki oleh lebih dari satu subjek.

Ketiga, dapatkah kandidat menganalisis penghapusan yang heterogen? Penyimpanan berbasis baris (row store) dapat melakukan hard-delete atau meredaksi baris. Pencarian dan cache memerlukan pembatalan (invalidation). File objek immutable mungkin memerlukan penulisan ulang. Penghapusan lakehouse membuat snapshot baru sementara snapshot lama masih mereferensikan file sebelumnya. Data agregat memerlukan keputusan anonimisasi dan komputasi ulang. Cadangan dan pemroses eksternal memiliki semantik penyelesaiannya sendiri.

Keempat, dapatkah alur kerja bertahan dari percobaan ulang (retry) dan pemadaman (outage)? Permintaan sinkron yang menyebar (fan-out) ke setiap sistem akan mengalami timeout dan meninggalkan status parsial yang ambigu. Pewawancara mengharapkan status yang durable, tugas target yang idempoten, percobaan ulang yang terbatas, kepemilikan (ownership), tenggat waktu, dan cara untuk membedakan kegagalan yang dapat dicoba lagi, retensi terdokumentasi, pengecualian, serta celah implementasi permanen.

Terakhir, dapatkah kandidat membuktikan bahwa data tetap terhapus? Pekerjaan orkestrasi yang berstatus hijau adalah bukti yang lemah. Desain harus menguji ketiadaan target, versi yang dipertahankan, jalur replay, prosedur restore, penyimpanan yang baru ditemukan, dan konfirmasi downstream. Desain ini harus mempertahankan bukti kontrol yang non-personal atau diminimalkan secukupnya untuk mencegah pemulihan kembali tanpa menyimpan data pribadi yang justru telah disetujui untuk dihapus.

Pertanyaan Klarifikasi yang Perlu Diajukan

  • Apa sebenarnya yang telah disetujui? Subjek, yurisdiksi, tujuan data, rentang waktu, produk, dan pengecualian hukum mana yang berada dalam cakupan? Siapa yang memiliki keputusan kebijakan akhir?
  • Apa subject key-nya? Apakah ada subject ID internal yang stabil? Alias historis, akun yang digabungkan, tenant ID, device ID, dan ID pemroses eksternal mana saja yang harus diselesaikan?
  • Catatan mana saja yang bersifat bersama (shared)? Pesanan, percakapan, catatan organisasi, bukti penipuan, atau transaksi keuangan dapat merujuk ke beberapa orang atau memiliki persyaratan retensi yang disetujui. Bidang (field) mana yang dapat dihapus tanpa merusak catatan orang lain?
  • Bagaimana inventaris datanya? Apakah semua penyimpanan menyatakan pemilik, pencari subjek (subject locator), mode penghapusan, lineage, perilaku retensi, pemverifikasi, dan prosedur restore? Bagaimana aset yang tidak terdaftar dideteksi?
  • Penyimpanan mana yang bersifat mutable? Bisakah event log dan file objek ditulis ulang? Snapshot lakehouse dan versi time-travel warehouse mana yang tetap dapat di-query setelah penghapusan logis?
  • Apa yang dianggap sebagai penyelesaian untuk cadangan (backup)? Bisakah cadangan ditulis ulang secara selektif, haruskah dibiarkan kedaluwarsa secara alami, atau dapatkah dibatasi hingga tidak dapat digunakan? Bagaimana cadangan lama diamankan sebelum layanan yang di-restore menerima traffic?
  • Bisakah data baru tiba setelah cutoff? Apakah penutupan akun memblokir aktivitas baru? Bisakah event yang tertunda, retry CDC, impor, atau akun yang dibuat ulang menggunakan pengidentifikasi lama?
  • Pemroses mana yang menerima data tersebut? Apakah ada API, tiket, atau jalur konfirmasi kontraktual? Bukti apa yang diperlukan sebelum tugas target mereka mencapai status akhir (terminal state)?
  • Apa aturan tenggat waktu dan eskalasinya? Kegagalan mana yang memicu peringatan (page) ke pemilik, kapan permintaan menjadi lewat jatuh tempo (overdue), dan siapa yang boleh menyetujui pengecualian yang terdokumentasi?
  • Bagaimana verifikasi menghindari kebocoran data? Bisakah probe mengembalikan hitungan (counts), snapshot ID, dan bukti ber-salt daripada menyalin nilai pribadi ke dalam log?

Kerangka Jawaban 30 Detik

"Saya akan mengeksekusi permintaan penghapusan yang disetujui melalui alur kerja yang durable. Fan-out sinkron meninggalkan status parsial yang ambigu ketika satu target mengalami timeout. Layanan identitas yang terkontrol menyelesaikan subjek menjadi pengidentifikasi internal dan eksternal yang opaque. Katalog berversi dan grafik lineage menghasilkan manifes target, dan setiap adaptor melakukan penghapusan idempoten, penulisan ulang, pembatasan, atau pemberitahuan pemroses. Catatan supresi (suppression record) menghentikan event lama dan cadangan yang di-restore dari pembuatan ulang data. Penyelesaian memerlukan pemeriksaan ketiadaan tingkat target, bukti retensi snapshot dan cadangan, konfirmasi pemroses, dan uji replay. Setiap aset yang baru ditemukan akan membuka kembali permintaan tersebut."

Pembahasan Mendalam Langkah demi Langkah

Langkah 1: Pisahkan keputusan kebijakan dari eksekusi pipeline

Buat amplop permintaan (request envelope) yang immutable setelah verifikasi identitas dan persetujuan cakupan. Amplop ini harus berisi ID permintaan, referensi subjek yang opaque, cakupan produk dan tujuan yang disetujui, batas waktu (cutoff), tenggat waktu, versi kebijakan, referensi pengecualian, dan keputusan otorisasi. Jauhkan dokumen identitas mentah dan catatan hukum bebas dari buku besar (ledger) orkestrasi.

Gunakan status eksplisit seperti received, authorized, planned, executing, verifying, completed, partially completed, rejected, dan overdue. Transisi status bersifat append-only dan dapat diatribusikan. Permintaan hanya dapat selesai jika setiap item dalam manifes target yang disetujui memiliki hasil akhir yang diizinkan: terhapus (erased), dijadikan tidak dapat digunakan hingga kedaluwarsa bertanggal (rendered beyond use), dikonfirmasi oleh pemroses, atau dicakup oleh pengecualian terdokumentasi.

Batasan ini menghindari dua jalan pintas yang berbahaya. Insinyur tidak memutuskan sendiri bahwa setiap agregat bersifat anonim, dan layanan hukum tidak menandai permintaan selesai hanya karena alur kerja telah diantrekan. Masing-masing pihak memberikan keputusan atau bukti yang menjadi tanggung jawabnya.

Langkah 2: Selesaikan identitas sekali dan pertahankan riwayat dengan aman

Selesaikan orang yang terverifikasi ke subject key yang stabil, lalu kembangkan melalui grafik identitas yang dibatasi. Tepi (edges) kandidat mencakup ID akun saat ini dan sebelumnya, ID akun yang digabungkan, ID berlingkup tenant, pengidentifikasi perangkat, ID pelanggan pembayaran, kontak CRM, dan referensi pemroses pihak ketiga.

Grafik memerlukan tanggal efektif dan asal-usul (provenance). Alamat email atau nomor telepon yang digunakan kembali tidak dapat diperlakukan sebagai bukti abadi bahwa dua akun dimiliki oleh satu orang. Objek bersama memerlukan aturan tingkat bidang: menghapus satu peserta tidak boleh menghapus pesanan atau pesan peserta lain, tetapi pengidentifikasi langsung peserta pertama mungkin perlu dihapus atau diganti.

Bekukan versi identitas khusus permintaan dalam rencana. Jika alias ditemukan kemudian, tambahkan alias tersebut dan buat ulang target yang terpengaruh. Simpan hanya locator minimal yang dikontrol aksesnya dalam muatan tugas. Log harus menggunakan ID permintaan, ID target, hitungan, dan versi daripada nama atau alamat email mentah.

Langkah 3: Hasilkan manifes target dari inventaris dan lineage

Setiap aset data yang mungkin menyimpan data subjek harus mendaftarkan kontrak penghapusan:

  • pemilik dan saluran eskalasi;
  • pencari subjek (subject locator) dan namespace identitas;
  • tujuan data dan kelas retensi;
  • lineage upstream dan downstream;
  • tindakan penghapusan, seperti hard delete, redaksi bidang, penulisan ulang file, pemusnahan kunci, pembatasan akses, atau pemberitahuan pemroses;
  • perilaku snapshot, time-travel, dan cadangan yang diharapkan;
  • kunci idempotensi dan semantik percobaan ulang yang didukung;
  • kueri verifikasi atau probe;
  • skema bukti dan aturan status akhir.

Perencana (planner) menggabungkan cakupan yang disetujui, rangkaian identitas yang dibekukan, katalog, dan grafik lineage untuk menghasilkan manifes berversi. Manifes dapat ditinjau sebelum dieksekusi dan mencakup target dengan nol kecocokan yang diharapkan; kelalaian yang tidak dapat dijelaskan lebih berbahaya daripada angka nol eksplisit.

Cakupan katalog memerlukan kontrolnya sendiri. Pindai akun penyimpanan, warehouse, topik, bucket, skema, indeks, dan registri pemroses untuk aset yang tidak terdaftar. Bandingkan log akses runtime dan event lineage dengan katalog. Aset downstream yang baru terdaftar yang berisi data dalam cakupan harus membuat tugas target untuk setiap permintaan yang terbuka dan dapat membuka kembali permintaan yang telah selesai sesuai kebijakan.

Langkah 4: Jalankan alur kerja yang durable dan idempoten

Gunakan antrean atau mesin alur kerja dengan pengiriman setidaknya satu kali (at-least-once delivery). State machine permintaan menjadwalkan satu tugas per target dan namespace identitas. Adaptor target menurunkan kunci idempotensinya dari permintaan, target, versi pencari subjek, dan versi tindakan. Mengulangi tugas yang telah selesai mengembalikan bukti akhir yang sama; ini tidak membuat mutasi kedua yang ambigu.

Simpan status target secara independen: pending, running, retryable failure, blocked, erased, restricted until expiry, processor pending, exception, dan verification failed. Gunakan exponential backoff terbatas untuk kesalahan sementara, status dead-letter atau blocked untuk upaya yang habis, dan tenggat waktu yang terlihat oleh pemilik. Pemadaman parsial tidak boleh membatalkan penghapusan yang berhasil (roll back).

Orkestrator tidak boleh menahan transaksi terdistribusi di seluruh penyimpanan. Orkestrator berperilaku seperti saga yang tindakan lanjutannya berkonvergensi pada status akhir yang disetujui. Kompensasi biasanya berarti mengoreksi redaksi yang terlalu luas dari sumber kebenaran yang dilindungi di bawah otorisasi terpisah, bukan memulihkan semua data yang telah dihapus sebelumnya.

Langkah 5: Pilih tindakan penghapusan untuk setiap kelas penyimpanan

Basis data transaksional. Temukan baris berdasarkan subject key yang stabil dan alias yang dipetakan. Hard-delete baris yang dimiliki sepenuhnya oleh subjek. Untuk catatan bersama atau yang dipertahankan, redaksi bidang yang disetujui atau ganti tautan subjek dengan nilai yang tidak mengidentifikasi. Hormati urutan foreign-key dan verifikasi tabel primer maupun sekunder.

Pencarian, cache, fitur, dan indeks vektor. Hapus dokumen dan embedding, batalkan cache key, dan paksakan refresh jika indeks bersifat asinkron. Penghapusan tabel sumber tidak membuktikan bahwa dokumen pencarian atau vektor fitur lama telah hilang. Pemverifikasi harus meng-query permukaan penyajian (serving surface) serta sumbernya.

Event log dan penyimpanan objek mentah. Jika catatan dapat ditulis ulang dengan aman, padatkan (compact) partisi yang terpengaruh tanpa menyertakan subjek. Jika sumber bersifat immutable selama jendela retensi, daftarkan erasure tombstone atau token supresi dan buat setiap pemateri (materializer), replay, ekspor, dan jalur bootstrap berkonsultasi dengannya. Sumber itu sendiri tetap mengikuti rencana pembatasan atau kedaluwarsa yang disetujui; tombstone saja tidak mengklaim penghapusan fisik.

Tabel Lakehouse. Terapkan equality atau position delete jika sesuai, atau tulis ulang file yang terpengaruh jika diperlukan penghapusan fisik yang lebih kuat. Catat ID commit dan snapshot. Kueri snapshot saat ini dapat menampilkan nol baris sementara snapshot yang lebih lama masih mereferensikan file tersebut. Apache Iceberg menyatakan bahwa file data tetap ada sampai tidak ada snapshot yang dipertahankan mereferensikannya, sehingga tugas harus melacak kedaluwarsa snapshot dan pembersihan file yatim (orphan file) sebelum mengklaim tahap penghapusan fisik yang sesuai.

Tabel Warehouse dan materialized view. Hapus baris yang memiliki kunci, buat ulang partisi yang terpengaruh jika perlu, segarkan materialized view, dan hitung klon, ekstrak, serta versi time-travel. Retensi spesifik produk adalah konfigurasi, bukan konstanta universal. Misalnya, BigQuery mendokumentasikan time-travel yang dapat dikonfigurasi dan periode fail-safe tambahan; manifes harus membaca kebijakan platform aktual dan mencatat kapan versi lama menjadi tidak dapat diakses.

Pemroses pihak ketiga. Kirim permintaan yang dicakup menggunakan saluran yang didukung pemroses, lampirkan referensi idempotensi yang stabil, dan simpan pengakuan serta status penyelesaian. Pasal 19 GDPR mencakup komunikasi kepada penerima dalam kasus yang berlaku. Email yang terkirim bukanlah bukti penyelesaian jika kontrak menyediakan konfirmasi yang dapat dibaca mesin atau status tiket.

Langkah 6: Tangani agregat, model, dan anonimisasi secara terukur

Tanyakan apakah suatu output masih memungkinkan subjek untuk diidentifikasi atau dipilih (singled out). Data yang disamarkan (pseudonymized) tetap terhubung melalui kunci atau token dan tidak dapat disebut anonim hanya karena kolom email dihapus. Data agregat yang benar-benar anonim mungkin berada di luar target penghapusan, tetapi pemilik privasi harus menyetujui klasifikasi tersebut.

Untuk agregat dengan kunci atau kohort kecil, bangun kembali partisi yang terpengaruh dari catatan sumber yang diizinkan. Pengurangan hanya berfungsi untuk metrik yang dapat dibalik (invertible) dengan metadata kontribusi yang dipertahankan secara memadai. Persentil, sketch, embedding terlatih, dan banyak artefak model tidak dapat dikoreksi secara aman hanya dengan mengurangi satu baris. Pilih pembuatan ulang terdokumentasi, kebijakan pelatihan ulang, atau keputusan anonimisasi yang disetujui.

Penanganan model tergantung pada ancaman dan kontrak produk. Hapus fitur tingkat subjek, contoh, dokumen pengambilan (retrieval), cache, dan perlengkapan evaluasi terlebih dahulu. Kemudian terapkan kebijakan pelatihan ulang atau model-unlearning yang disetujui jika model itu sendiri berada dalam cakupan. Pipeline penghapusan mencatat keputusan dan bukti kebijakan tersebut; pipeline tidak boleh menjanjikan bahwa menghapus baris pelatihan secara otomatis menghilangkan pengaruhnya dari model yang ada.

Langkah 7: Mencegah kebangkitan kembali dari race condition, replay, dan restore

Pertahankan registri supresi minimal yang dikunci oleh token subjek yang opaque dan batas waktu (cutoff) permintaan. Jalur penyerapan (ingestion) dan materialisasi memeriksanya sebelum menulis event lama ke dalam penyimpanan penyajian atau analitis. Registri ini membutuhkan kontrol akses dan retensi yang lebih ketat daripada log biasa karena ia ada secara khusus untuk mengenali subjek yang dihapus.

Urutkan penghapusan terhadap penyerapan yang terjadi bersamaan (concurrent ingestion). Partisi pekerjaan berdasarkan subject key jika memungkinkan, atau catat watermark sumber dan ulangi pemindaian penutup setelah semua writer melewati batas waktu. Putuskan secara terpisah bagaimana aktivitas baru yang benar-benar sah setelah permintaan ditangani. Replay event lama ditekan; seseorang yang membuat akun baru di bawah tujuan produk yang valid mungkin memerlukan epoch subjek baru alih-alih pemblokiran global permanen.

Setiap runbook restore harus menerapkan kembali buku besar penghapusan dan set supresi sebelum layanan yang dipulihkan dapat dibaca atau memancarkan data downstream. Uji hal ini dengan latihan restore. Panduan ICO mengizinkan bahwa data cadangan dapat tetap ada hingga ditimpa dalam beberapa keadaan asalkan dibuat tidak dapat digunakan (beyond use); konsekuensi operasionalnya adalah pembatasan akses ditambah penerapan kembali penghapusan, kedaluwarsa terdokumentasi, dan tidak ada pemrosesan tujuan normal dari cadangan tersebut.

Langkah 8: Verifikasi penyelesaian dengan bukti independen

Adaptor yang melakukan mutasi dapat memancarkan bukti eksekusi, tetapi pemverifikasi terpisah harus menentukan penyelesaiannya. Untuk setiap target, tangkap:

  • target dan versi skema;
  • versi locator identitas;
  • stempel waktu tindakan, upaya, dan penyelesaian;
  • baris, dokumen, objek, atau file yang terpengaruh;
  • probe ketiadaan pada permukaan saat ini;
  • status snapshot atau cadangan yang dipertahankan dan perkiraan kedaluwarsanya;
  • referensi konfirmasi pemroses;
  • versi dan hasil pemverifikasi.

Lakukan pemeriksaan dengan hitungan dan kunci yang opaque. Hindari menyalin nilai yang dihapus ke dalam penyimpanan bukti. Pemeriksaan berbasis sampel dapat melengkapi tetapi tidak dapat menggantikan pemeriksaan deterministik untuk permintaan yang sedang diselesaikan.

Jalankan kontrol menyeluruh (end-to-end): kirimkan permintaan yang sama dua kali; hentikan setiap target setelah mutasi tetapi sebelum pengakuan; putar ulang (replay) event lama; pulihkan cadangan lama ke dalam isolasi; gabungkan dan pisahkan identitas; buat ulang akun; tambahkan tabel downstream yang tidak terdaftar; tahan satu pemroses dalam keadaan offline; dan uji catatan bersama ditambah pengecualian yang terdokumentasi. Penyelesaian harus gagal tertutup (fail closed) jika target yang diperlukan tidak memiliki pemverifikasi atau statusnya tidak diketahui.

Langkah 9: Operasikan sistem dengan kewajiban yang terukur

Lacak waktu penyelesaian permintaan terhadap tenggat waktu kebijakan, permintaan yang lewat jatuh tempo dan selesai sebagian, tingkat keberhasilan dan percobaan ulang target, cakupan manifes, aset yang tidak diketahui, latensi konfirmasi pemroses, backlog kedaluwarsa snapshot dan cadangan, insiden pemulihan kembali akibat replay, dan keberhasilan penerapan kembali restore.

Berikan peringatan pada status alur kerja, bukan hanya pada pengecualian pekerjaan. Permintaan yang menunggu tanpa batas waktu untuk pemroses atau kedaluwarsa snapshot mungkin tidak memiliki kegagalan eksekusi namun tetap dapat lewat jatuh tempo. Berikan pemilik dan jalur eskalasi untuk setiap target yang diblokir. Tinjau penggunaan pengecualian dan target dengan nol kecocokan untuk pola yang mencurigakan.

Model biaya juga penting. Orkestrasi kira-kira sebanding dengan jumlah target, sedangkan pekerjaan fisik tergantung pada baris yang cocok dan byte dalam file atau partisi yang terpengaruh. Buat batch untuk penulisan ulang file dan pemeliharaan snapshot tanpa menyembunyikan keterlacakan per permintaan. Permintaan harus tetap menunjukkan pekerjaan pemeliharaan bersama mana yang menyediakan buktinya.

Contoh Jawaban Berkualitas Tinggi

"Saya hanya akan menerima amplop permintaan resmi: ID permintaan, referensi subjek yang opaque, cakupan yang disetujui, batas waktu (cutoff), tenggat waktu, versi kebijakan, dan referensi pengecualian. Layanan identitas terbatas memperluas subjek tersebut ke dalam ID internal, historis, tenant, perangkat, dan pemroses yang berversi. Layanan ini tidak menggunakan alamat email sebagai kunci utama abadi.

Selanjutnya saya akan menghasilkan manifes target berversi dari katalog dan grafik lineage. Setiap target mendeklarasikan pemilik, locator, tindakan, perilaku retensi, pemverifikasi, dan kontrak buktinya. Katalog mencakup basis data live, indeks, cache, event mentah, penyimpanan objek, tabel lakehouse dan warehouse, output materialisasi, ekspor, cadangan, dan pemroses. Penemuan infrastruktur dan lineage runtime membandingkan aset aktual dengan katalog tersebut, sehingga penyimpanan yang tidak diketahui akan memblokir atau membuka kembali penyelesaian.

Eksekusi adalah state machine asinkron dengan at-least-once delivery dan tugas per-target yang idempoten. Percobaan ulang menggunakan permintaan, target, versi identitas, dan versi tindakan sebagai kuncinya. Penyimpanan baris melakukan hard-delete pada baris yang dimiliki sepenuhnya dan meredaksi bidang yang disetujui dalam catatan bersama atau yang dipertahankan. Indeks penyajian, cache, feature store, dan vector store dihapus dan di-query secara independen. Log immutable mentah menerima catatan supresi dan mengikuti rencana pembatasan atau kedaluwarsa yang disetujui; setiap jalur replay harus berkonsultasi dengan catatan supresi tersebut.

Untuk Iceberg, saya akan menerapkan row delete atau menulis ulang file yang terpengaruh, mencatat commit dan snapshot, serta melacak kedaluwarsa snapshot lama karena kueri saat ini yang menghasilkan nol baris tidak berarti file yang mendasarinya telah dihapus. Warehouse memerlukan perlakuan yang sama untuk klon, materialized view, ekstrak, dan versi time-travel. Agregat dengan kunci atau kohort kecil dibangun kembali dari input yang diizinkan. Agregat yang benar-benar anonim hanya dapat dipertahankan setelah pemilik privasi menyetujui klasifikasi tersebut.

Cadangan memiliki status akhir yang eksplisit. Jika penulisan ulang selektif tidak tersedia, permintaan mencatat status dibatasi-di-luar-penggunaan (restricted-beyond-use) dan tanggal penimpaan yang dijadwalkan. Restore tidak dapat melayani traffic sampai buku besar penghapusan dan registri supresi telah diterapkan kembali. Pemroses pihak ketiga mendapatkan tugas yang idempoten dan tetap berstatus tertunda (pending) sampai konfirmasi yang diperlukan tiba.

Untuk mencegah race condition, saya akan mencatat watermark sumber dan menjalankan pemindaian penutup setelah writer melewati batas waktu cutoff. Event lama yang tertunda dan di-replay akan ditekan. Aktivitas sah yang baru akan menerima epoch subjek baru jika kebijakan mengizinkannya, sehingga perlindungan replay tidak secara diam-diam menjadi larangan seumur hidup.

Pemverifikasi terpisah memeriksa setiap permukaan penyajian, status tabel saat ini, snapshot yang dipertahankan, status cadangan, dan bukti pemroses. Hanya ketika setiap target memiliki status akhir yang diizinkan, permintaan dapat diselesaikan. Saya akan menguji pengiriman duplikat, crash antara mutasi dan pengakuan, target offline, replay, restore terisolasi, pembuatan ulang akun, penggabungan identitas, catatan bersama, dan aset yang baru ditemukan.

Metrik operasional saya akan mencakup kepatuhan tenggat waktu, hitungan parsial dan lewat jatuh tempo, cakupan katalog, target yang tidak diketahui, pemulihan akibat replay, backlog kedaluwarsa snapshot dan cadangan, latensi pemroses, dan keberhasilan penerapan kembali restore. Desain ini memberi perusahaan jejak bukti yang durable sambil menjaga nilai pribadi keluar dari log biasa dan menjaga keputusan cakupan hukum berada di luar pipeline data."

Kesalahan Umum

  • Hanya menghapus baris akun utama → Salinan tetap ada di indeks, tabel analitis, ekspor, dan pemroses → Hasilkan manifes target yang didukung lineage dan verifikasi setiap permukaan penyajian dan penyimpanan yang diperlukan.
  • Menggunakan email sebagai subject key universal → Email dapat berubah, digunakan kembali, dan melewatkan identitas yang digabungkan atau eksternal → Selesaikan subjek terverifikasi melalui grafik identitas berversi dengan asal-usul (provenance).
  • Memanggil fan-out sinkron dari API permintaan → Satu timeout menciptakan status parsial yang tidak diketahui dan percobaan ulang yang tidak aman → Gunakan tugas per-target yang durable, status eksplisit, idempotensi, dan eskalasi pemilik.
  • Memperlakukan soft delete sebagai penghapusan selesai → Data tetap dapat dibaca oleh kueri istimewa, ekspor, replay, atau restore → Gunakan soft delete hanya sebagai fase pembatasan yang disetujui dan lacak tindakan akhir atau kedaluwarsanya.
  • Menandai penghapusan Iceberg selesai setelah kueri saat ini mengembalikan nol → Snapshot yang dipertahankan mungkin masih mereferensikan file lama → Catat status snapshot dan tunggu tahap kedaluwarsa serta pembersihan yang disetujui.
  • Mengasumsikan setiap agregat bersifat anonim → Kohort kecil, join key, dan pseudonim masih dapat mengidentifikasi atau memilih seseorang → Dapatkan keputusan anonimisasi yang eksplisit dan bangun kembali output yang terpengaruh bila diperlukan.
  • Mengabaikan replay dan restore → Backfill di kemudian hari atau pemulihan cadangan dapat membuat ulang data di mana-mana → Pertahankan registri supresi minimal dan terapkan kembali buku besar penghapusan sebelum data yang dipulihkan disajikan.
  • Mencatat nilai identitas mentah sebagai bukti → Jejak audit menjadi salinan baru yang tidak terkontrol dari data yang dihapus → Simpan referensi yang opaque, hitungan, versi, transisi status, dan bukti yang dibatasi.
  • Memperlakukan "permintaan terkirim ke pemroses" sebagai penyelesaian → Pengiriman tidak membuktikan pemroses telah bertindak → Lacak pengakuan, konfirmasi akhir, tenggat waktu, dan eskalasi sesuai kontrak.
  • Membiarkan pekerjaan mutasi memverifikasi dirinya sendiri → Panggilan yang berhasil mungkin melewatkan indeks basi, snapshot, atau no-op yang tidak terlihat → Jalankan probe target independen serta uji replay dan restore menyeluruh.

Pertanyaan Lanjutan dan Tanggapan

Pertanyaan Lanjutan 1: Bagaimana Anda menangani permintaan penghapusan yang memengaruhi tabel agregat?

Klasifikasikan setiap output terlebih dahulu. Agregat yang benar-benar anonim dapat dipertahankan jika pemilik privasi yang bertanggung jawab menyetujui kesimpulan tersebut. Output yang disamarkan (pseudonymized), memiliki kunci, atau berkohort kecil tetap menjadi kandidat tindakan. Bangun kembali partisi yang terpengaruh dari catatan sumber yang diizinkan. Pengurangan sederhana hanya aman untuk agregat yang dapat dibalik dengan metadata kontribusi yang andal; persentil, sketch, dan banyak artefak terpelajar memerlukan komputasi ulang atau kebijakan terpisah yang disetujui.

Pertanyaan Lanjutan 2: Bagaimana Anda menghentikan Kafka replay dari membuat ulang baris yang dihapus?

Tulis catatan supresi yang durable sebelum sistem turunan menyatakan penyelesaian. Setiap konsumen, backfill, pemateri, dan jalur bootstrap memeriksa token subjek yang opaque dan batas waktu event. Catat watermark sumber dan jalankan pemindaian penutup setelah writer saat ini melewatinya. Uji dengan memutar ulang event sebelum batas waktu ke dalam lingkungan terisolasi dan buktikan bahwa tidak ada target yang dapat dibaca kembali.

Pertanyaan Lanjutan 3: Apa yang terjadi jika cadangan lama di-restore?

Pulihkan (restore) ke dalam lingkungan terisolasi. Sebelum membuka traffic atau emisi downstream, terapkan setiap permintaan penghapusan relevan yang dicatat setelah cadangan dibuat dan sebelum pemulihan, segarkan registri supresi, dan jalankan pemverifikasi target. Catat posisi buku besar penghapusan tertinggi yang diterapkan pada layanan yang dipulihkan. Cadangan yang tetap ada hingga penimpaan terjadwal tetap dibatasi aksesnya dan tidak dapat digunakan untuk pemrosesan biasa.

Pertanyaan Lanjutan 4: Bagaimana jika penyimpanan data yang diperlukan tidak tersedia menjelang batas waktu?

Pertahankan permintaan dalam status selesai sebagian (partially completed) atau lewat jatuh tempo (overdue), pertahankan hasil target yang berhasil, dan coba lagi target yang tidak tersedia secara idempoten. Eskalasikan ke pemilik yang disebutkan dan pemilik operasi privasi sebelum tenggat waktu kebijakan. Hanya pengecualian resmi yang dapat mengubah status akhir target yang diperlukan. Orkestrator tidak boleh mengubah percobaan ulang yang habis menjadi keberhasilan diam-diam.

Pertanyaan Lanjutan 5: Bagaimana Anda mendukung pembuatan ulang akun setelah penghapusan?

Pisahkan perlindungan replay historis dari aktivitas sah di masa mendatang. Berikan akun yang dibuat ulang epoch subjek baru dan ID internal baru. Registri supresi terus menolak pengidentifikasi dan event lama pada atau sebelum batas waktu yang disetujui, sementara kontrol kebijakan memutuskan apakah data baru dapat dikumpulkan. Resolusi identitas harus mencegah epoch baru secara tidak sengaja menghubungkan kembali catatan turunan lama.

Pertanyaan Lanjutan 6: Bisakah penghapusan kriptografis (cryptographic erasure) menggantikan penghapusan fisik?

Hanya di bawah desain penyimpanan yang terverifikasi. Jika semua salinan relevan dienkripsi dengan kunci berlingkup subjek yang unik, pemusnahan kunci tersebut dapat membuat data tidak dapat diakses. Kunci bersama, indeks teks biasa, log, cache, ekspor, cadangan, atau salinan kunci yang dipertahankan akan membatalkan klaim ini. Perlakukan pemusnahan kunci sebagai salah satu tindakan target dengan inventaris dan pemverifikasinya sendiri, bukan sebagai jalan pintas universal.

Pertanyaan Lanjutan 7: Bagaimana Anda tahu bahwa katalog tersebut lengkap?

Bandingkan secara terus-menerus aset yang dideklarasikan dengan inventaris cloud, metadata warehouse, daftar topik dan bucket, registri pemroses, serta event akses atau lineage runtime. Wajibkan kontrak penghapusan sebelum aset baru dapat memproses data subjek. Aset yang tidak dikenal akan menciptakan peringatan cakupan dan memblokir atau membuka kembali permintaan yang terpengaruh. Latihan restore dan replay berkala akan mengungkap jalur yang sering terlewatkan oleh lineage statis.

Sumber publik

Pertanyaan terkait