Migration Araçları Neden Başarısız Olur: Gerçek Tuzaklar
Flyway ve Liquibase gibi migration araçları bir sorun çözmek için geliştirildi: veritabanı şeması değişikliklerini sürüm kontrol altına almak. Ama pratikte bu araçlar kendileri bir sorun haline geliyor.
Benim gözlemim: migration araçları veri kaybı ve kilitlenmelerden sizi korumaz, yalnızca değişiklikleri kaydeder. Fark iki şey arasında büyük.
İlk tuzak, down migration yazma zorunluluğu. Bir kolonu silerseniz, geri dönüş scripti ne yapacak? Veriyi nereden bulacak? Flyway bunu çözmüyor. Siz yazmalısınız. Ama çoğu proje down scriptlerini hiç yazmıyor, sonra üretimde rollback yapamıyor.
İkinci sorun, migration sırası ve çakışmalar. İki geliştirici aynı anda şema değişikliği yapsa? Git merge'ı başarılı olsa bile, veritabanında hangi sıra ile çalıştırılacak? Araç bunu otomatik çözmüyor. Manuel müdahale gerekir.
Üçüncüsü, büyük tablolarda lock zamanı. Bir kolona index eklemek ya da tipi değiştirmek, milyonlarca satır varsa tüm tabloyu kilitler. Migration scripti başarıyla çalışır, ama uygulamanız o sırada ölü kalır. Araç bunu öngörmez.
Dördüncü ve belki en ciddi: test ortamında çalışan script, üretimde başarısız olabilir. Veri hacmi, index yapısı, diğer işlemler farklı olduğu için. Migration araçları bu farkı görmez.
Migration aracı kullanmak iyidir, ama tek başına yeterli değildir. Yapmanız gerekenler:
Şema değişikliğini iki aşamada yapın. Yeni kolonu ekleyin, uygulamayı güncelleyin, sonra eski kolonu silin. Bu "expand-contract" deseni çoğu sorunu önler.
Down migration'ı ciddiye alın. Yazamıyorsanız, o değişikliği yapma. Rollback yapamayan bir değişiklik, üretimde bomba gibidir.
Büyük tablolarda online migration araçları kullanın. PostgreSQL'de pg_repack, MySQL'de pt-online-schema-change. Bunlar kilit olmadan değişiklik yapar.
Staging ortamında, üretim verisiyle test edin. Geliştirme ortamındaki 100 satır değil, gerçek veri hacmiyle.
Migration araçları değişiklikleri organize etmek için vardır, veri güvenliğini sağlamak için değil. Bunu anlamayan projeler, ilk büyük şema değişikliğinde paniğe kapılır. Araç suçlu değildir; araç kullanıcısı sorumludur.
Flyway'i kullanın, ama ona güvenmeyin. Her migration'ı, üretimde ne olacağını düşünerek yazın.
0 yorum