𝗠𝗲𝗻𝗴𝗴𝗮𝗻𝘁𝗶 𝗻𝗮𝗺𝗮 𝘀𝗶𝘁𝘂𝘀 𝘁𝗮𝗻𝗽𝗮 𝗺𝗲𝗻𝗴𝗵𝗶𝗹𝗮𝗻𝗴𝗸𝗮𝗻 𝗱𝗮𝘁𝗮
Seorang klien meminta untuk mengganti nama situs dari acme-staging menjadi acme. Anda mengubah namanya di aplikasi. Tiba-tiba, semua cadangan database, tangkapan layar, dan thumbnail menghilang.
File-file tersebut masih ada di disk. Direktori yang baru hanya kosong. Data tersebut tidak mengikuti perubahan nama.
Kami melakukan kesalahan ini pada desain awal kami. Kami menggunakan nama situs untuk menentukan di mana file akan disimpan.
Jika Anda menyimpan file di backups/acme-staging/ lalu mengganti nama situs menjadi acme, aplikasi akan mencari backups/acme/. Aplikasi menemukan folder kosong. Data lama tetap berada di folder lama, tetapi aplikasi menganggapnya sebagai data usang dari situs yang berbeda.
Nama situs sering berubah. Klien memperbaiki salah ketik. Tim memindahkan situs staging ke produksi. Perusahaan melakukan reorganisasi.
Kami memperbaiki ini dengan memisahkan nama tampilan dari pengenal (identifier) yang stabil.
Setiap situs sekarang memiliki ID unik. Bentuknya seperti site_a1b2c3d4e5f6. ID ini tidak pernah berubah.
Kami sekarang menyimpan file menggunakan ID, bukan nama. Jalur direktori terlihat seperti backups/site_a1b2c3d4e5f6/. Meskipun Anda mengganti nama situs, jalurnya tetap sama. Data tetap terhubung.
Memindahkan pengguna yang sudah ada ke sistem ini adalah bagian yang sulit. Kami membangun migrasi yang bersifat idempotent. Ini berarti sistem memeriksa keberadaan ID saat startup. Jika sebuah situs tidak memiliki ID, sistem akan menetapkannya. Jika sudah ada, sistem tidak akan mengubahnya.
Kami juga memigrasikan file fisik. Jika sistem menemukan folder yang dinamai sesuai nama situs, sistem akan mengganti namanya ke format ID yang baru.
Kami bahkan memperbaiki log. Log baru menggunakan ID. Log lama menggunakan nama situs. UI menggabungkan keduanya sehingga riwayat Anda terlihat berkesinambungan.
Kami belajar pelajaran berharga tentang validasi. Setelah pembaruan, kami menambahkan aturan untuk memeriksa format ID. Aturannya terlalu ketat. Aturan tersebut menolak beberapa ID lama dari migrasi kami. Tiba-tiba, situs-situs menghilang lagi.
Pelajarannya sederhana: audit data Anda sebelum menambahkan aturan baru.
Memisahkan apa yang dilihat manusia dari apa yang digunakan sistem adalah pola klasik. Melakukannya setelah peluncuran akan memakan biaya besar dan berisiko. Gunakan ID yang immutable sejak hari pertama untuk menghindari jebakan ini.