Migrasi database tanpa downtime: pola expand-contract untuk perubahan skema
Cara teraman mengubah skema database produksi adalah memecahnya menjadi beberapa rilis kecil dengan pola expand-contract: tambahkan struktur baru, jalankan kode lama dan baru berdampingan, pindahkan data, baru hapus struktur lama. Dengan begitu tidak ada saat aplikasi harus dimatikan.
Mengapa perubahan langsung berbahaya
Perintah seperti mengganti nama kolom atau mengubah tipe data dapat mengunci tabel dan menahan semua permintaan. Pada tabel jutaan baris, kunci itu bisa berlangsung menit, cukup untuk membuat aplikasi tampak mati.
Selain itu, saat rilis berjalan bertahap, kode lama dan baru sempat hidup bersamaan dan keduanya harus cocok dengan skema yang sama.
Empat langkah expand-contract
- Expand: tambahkan kolom atau tabel baru tanpa menghapus yang lama.
- Dual write: aplikasi menulis ke struktur lama dan baru sekaligus.
- Backfill: salin data lama ke struktur baru secara bertahap dalam batch kecil.
- Contract: setelah semua pembaca beralih, hapus struktur lama di rilis berikutnya.
Setiap langkah dirilis terpisah dan bisa dibatalkan tanpa kehilangan data. Jalankan backfill di luar jam sibuk dengan jeda antar batch.
Selalu uji di salinan data nyata
Latih migrasi di salinan database produksi untuk mengetahui durasi dan dampak kuncinya sebelum hari rilis.
Praktik pendukung
Simpan semua migrasi di repositori dan jalankan lewat pipeline yang sama di setiap lingkungan. Buat indeks baru dengan opsi concurrently pada PostgreSQL agar tidak mengunci tulis.
Siapkan rencana mundur dan backup tepat sebelum migrasi, serta pantau error dan latensi selama dan sesudah proses berjalan.
Daftar periksa hari migrasi
Gunakan daftar ini untuk memastikan migrasi berjalan terkontrol dan dapat dibatalkan.
- Backup terbaru dan sudah terbukti bisa dipulihkan.
- Migrasi sudah dilatih pada salinan data produksi.
- Waktu rilis di luar jam sibuk dengan tim siaga.
- Metrik error dan latensi dipantau selama dan sesudah proses.
- Rencana mundur tertulis dan dapat dijalankan dalam hitungan menit.
Setelah semua pembaca beralih, tunggu satu siklus rilis penuh sebelum menghapus struktur lama. Kesabaran kecil ini menghindari penyesalan besar.
Kesalahan yang perlu dihindari
Kesalahan umum adalah menjalankan perubahan skema besar sekaligus pada jam sibuk. Kesalahan lain adalah menghapus kolom lama terlalu cepat sebelum semua versi kode berhenti memakainya.
Hindari juga melewatkan latihan pada salinan data nyata. Migrasi yang cepat di data contoh bisa memakan puluhan menit di produksi dan menahan seluruh permintaan.
Pertanyaan yang sering muncul
Ya, tanpa komitmen. Kami balas dalam 1×24 jam kerja.
Tentang Tim AnabisolutionsStudio digital dari Pekanbaru yang mengerjakan website, aplikasi, dan sistem untuk klien di Riau dan sekitarnya.
Anabisolutions

