Gesaan dan konteks
Penghijrahan ini mengubah kedua-dua nama medan dan maknanya: total_cents menganggap USD, manakala amount_minor mesti berfungsi dengan mata wang yang jelas (explicit). Alias Avro boleh membantu resolusi nama, tetapi ia tidak dapat membuktikan bahawa "sen" telah dimigrasikan dengan betul kepada "unit mata wang minor".
Perkara yang dinilai oleh penemu bual
- Memperluas pembaca (readers) sebelum pengeluar (producers) mengisi medan baharu.
- Memisahkan keserasian struktur daripada semantik jumlah.
- Mengekalkan skema lama dan transformasi untuk main semula 90 hari.
- Menamatkan penggunaan medan berdasarkan bukti pengguna dan bukannya tarikh kalendar.
Penjelasan sebelum menjawab
Sahkan format, mod registry, tingkah laku medan yang tidak diketahui, perwakilan jumlah, ketersediaan mata wang, pengguna paling perlahan, dan kitaran main semula. Tanya sama ada topik v2 tersedia apabila kedua-dua makna tidak dapat diwakili secara serasi.
Rangka kerja jawapan 30 saat
Tambah amount_minor dan currency pilihan terlebih dahulu. Naik taraf setiap pengguna untuk mengutamakan medan baharu dan beralih (fallback) ke total_cents, sambil mengesahkan kesamarataan bagi peristiwa USD. Kemudian lakukan dwi-isi pada pengeluar dan hentikan logik perniagaan baharu daripada membaca medan lama. Kekalkan skema dan transformasi sejarah melebihi 90 hari. Alih keluar medan lama hanya selepas pengeluar berhenti menulisnya, pengguna dan kebergantungan luar talian berhenti membacanya, dan main semula 90 hari yang lengkap berjaya dengan skema baharu.
Analisis mendalam langkah demi langkah
Fasa satu adalah bersifat aditif. Keserasian registry dan matriks pembaca/penulis CI menyekat versi yang tidak sah. Pengguna memperoleh sokongan dwi-baca sebelum pengeluar baharu digunakan.
Fasa dua melakukan dwi-isi. USD memerlukan amount_minor == total_cents dan currency == USD; peristiwa bukan USD hanya mengisi semantik baharu yang tepat. Jejaki liputan, fallback dan ketidakpadanan mengikut versi pengeluar, pengguna dan mata wang.
Fasa tiga menghentikan kebergantungan perniagaan pada medan lama sambil mengekalkan keupayaan main semula. Pemain semula memilih transformasi mengikut ID skema penulis dan bukannya mentafsir sejarah dengan nilai lalai hari ini. Jika satu subjek tidak dapat menyatakan kedua-dua makna dengan selamat, gunakan topik v2 dan penterjemah yang jelas.
Tamatkan penggunaan hanya selepas semua pengeluar menghentikan penulisan lama, fallback mencapai sifar, keseluruhan tempoh main semula berlalu, dan tugas luar talian telah diinventori. Simpan skema rollback dan versi transformasi yang sedia untuk digunakan.
Contoh jawapan yang mantap
Saya akan menggunakan kaedah kembang-hijrah-kecut (expand-migrate-contract): tambah medan dan naik taraf pembaca, lakukan dwi-tulis dan penyelarasan, kemudian tamatkan medan lama hanya apabila bukti menunjukkan setiap kebergantungan telah meninggalkannya. Alias hanya menyelesaikan penamaan; semantik mata wang memerlukan ujian kontrak dan invariant masa jalanan (runtime).
Medan lama dikekalkan sepanjang satu tempoh main semula yang lengkap. Jika dwi-tulis USD tidak sepadan, bekukan pelancaran dan kekalkan total_cents sebagai autoritatif untuk kelompok USD tersebut sementara pengeluar diperbaiki. Peristiwa bukan USD mesti mengekalkan amount_minor + currency sebagai autoritatif; jeda pengingesan (ingestion) bukan USD baharu atau halakan ke topik v2 daripada mereka-reka nilai sen. Selepas penamatan, kedua-dua medan baharu menjadi invariant masa jalanan yang wajib. Pengalihan keluar kontrak bermula hanya selepas laluan dalam talian, luar talian dan main semula ditutup.
Kesilapan lazim
- Menamakan semula medan dalam satu komit skema.
- Menganggap alias sebagai penukaran jumlah.
- Menggunakan pengeluar sebelum pengguna.
- Membaca sejarah lama dengan mata wang lalai hari ini.
- Terlepas pandang pengguna luar talian dan main semula.
Soalan susulan
Mengapakah alias tidak mencukupi?
Ia membantu menyelesaikan nama medan; ia tidak membuktikan bahawa sen dan unit minor mata wang lain mempunyai makna yang setara.
Bilakah topik v2 diperlukan?
Apabila makna lama dan baharu tidak dapat diwakili tanpa kekaburan di bawah kontrak keserasian yang diperlukan.
Bagaimana jika dwi-tulis tidak sepadan?
Bagi dwi-tulis USD, hentikan pelancaran, kekalkan total_cents sebagai autoritatif bagi kelompok yang terjejas, asingkan mengikut versi pengeluar, betulkan dan main semula. Bagi bukan USD, kekalkan amount_minor + currency sebagai autoritatif dan jeda ingestion atau gunakan topik v2; jangan sekali-kali beralih kepada nilai sen rekaan.
Bilakah medan lama boleh dipadamkan?
Selepas penulisan lama berhenti, fallback adalah sifar, tempoh main semula yang lengkap telah berlalu, dan inventori luar talian telah selesai dibersihkan.