Laravel ve Node.js'te Sıfır Kesinti Veritabanı Göçleri – webdedik gönderisi

Laravel ve Node.js'te Sıfır Kesinti Veritabanı Göçleri

Üretim ortamında yaşanan çoğu kesinti, kötü uygulama kodundan değil zor görünmeyen bir migrasyon komutundan kaynaklanır. Bir tablo sütunu eklemek, sütun adını değiştirmek ya da 40 milyon satırlı bir tabloya indeks oluşturmak, bunlar çoğu zaman kilit beklemesine neden olur, sırada bekleyen sorgular yığılır, bağlantı havuzu dolar ve sağlık kontrolü başarısız olur.

Loop Origin ekibi PostgreSQL ve MySQL üzerinde Laravel ve Node.js çalıştıran SaaS müşterileriyle çalışıyor ve bakım penceresi planlayamayan sistemler için bir oyun planı geliştirmiş. Temel strateji üç noktada toplanıyor.

İlk olarak expand-contract deseni kullan. Yeni bir sütun eklerken bunu iki aşamada yap: önce sütunu ekle (eski kod hala çalışıyor), sonra kodu güncelle, en sonunda eski sütunu kaldır. Bu sayede eski ve yeni kod aynı şemaya karşı çalışabilir, hiç kesinti olmaz.

İkinci olarak her DDL komutuna kilit zaman aşımı ekle. Bir migrasyon çok uzun süre kilit bekliyorsa otomatik olarak başarısız olsun ve geri çekilsin. Bu, bağlantı havuzunun tam dolmasını engeller:

1ALTER TABLE orders ADD COLUMN status VARCHAR(50) DEFAULT 'pending';
2SET lock_timeout = '5s';

Üçüncü olarak büyük tablolardaki veri güncellemelerini toplu iş olarak yap. Tüm satırları bir seferde güncellemek yerine, 1000 satırlık parçalar halinde işle. Bu, diğer sorguların arasına girebilmesini sağlar.

Deploy sırasında da dikkatli ol: eski kodu kaldırmadan önce yeni kod birkaç dakika çalışsın ve hata olmadığını doğrula. Veritabanı şemada geriye dönük uyumluluğu korumak, kesintisiz geçişin anahtarı.

konu hakkında tepkinizi verebilirsiniz