Skip to content
Berktuğ Berke Ateş
Berktuğ Berke Ateş

Yazılım Mühendisi

Blog

Pratikte Sıfır Kesintili Veritabanı Taşımaları

· 6 dk okuma

Şemaları gerçek trafik altında güvenle değiştirmek için expand-and-contract teslimatını kullanın.

Deploy'lar örtüşür

Bir şema taşıması nadiren yalnız çalışır. Eski ve yeni uygulama örnekleri aynı anda trafik sunabilir, işçiler gecikmiş işleri işleyebilir ve mobil istemciler aylarca aktif kalabilir. Güvenli bir taşıma bu örtüşmeyi varsayar ve her ara durumu uyumlu tutar.

Expand-and-contract kalıbı riskli bir değiştirmeyi geri alınabilir aşamalara ayırır. Önce şemayı veya arayüzü genişletin, sonra davranışı ve veriyi taşıyın, sonucu gözlemleyin ve ancak daha sonra eski yolu kaldırın. Ek adımlar önemli anda kontrol satın alır.

Anlamı değiştirmeden genişletin

Yeni nullable sütunları, tabloları, indeksleri veya uç noktaları mevcut kodun yok sayabileceği şekilde ekleyin. Veritabanı davranışını anlamadan kilit altında büyük bir tabloyu yeniden yazan varsayılanlar veya kısıtlardan kaçının. Motor desteklediğinde büyük indeksleri eşzamanlı oluşturun ve çoğaltma gecikmesi ile kilit süresini izleyin.

Her iki temsili yazabilen veya yeni oluşturulan veri için yeni modeli doldurabilen kodu deploy edin. Çift yazmalar tutarlılık riski getirir; bu yüzden geçişi sınırlı tutun, sapmayı enstrümante edin ve her iki kayıt aynı veritabanını paylaştığında tek bir işlemi tercih edin.

  • Önce tablo boyutunu ve kilit davranışını ölçün
  • Taşıma komutlarını yeniden başlatılabilir yapın
  • Üretim yükü altında backfill'leri kısıtlayın
  • İlerlemeyi kararlı kontrol noktalarıyla kaydedin

Backfill'i bir operasyon olarak ele alın

Bir üretim backfill'i tek seferlik bir script değil, bir iş yüküdür. Deterministik yığınlar işleyin, kontrol noktalarını kalıcılaştırın, eşzamanlılığı sınırlayın ve ilerleme ile başarısızlıkları görünür kılın. İş etkileri çoğaltmadan durdurulup sürdürülebilir olmalıdır.

Yeni temsili sürekli doğrulayın. Sona kadar beklemek yerine sayıları, sağlama toplamlarını, değişmezleri ve örneklenmiş kayıtları karşılaştırın. Taşıma anlamı dönüştürüyorsa beklenen eşlemeyi alan sahiplerince incelenen çalıştırılabilir kontrollerde kodlayın.

Okumaları bilinçli kaydırın

Yeni yazmalar ve tarihsel veri hazır olduğunda okumaları bir özellik bayrağı veya kontrollü yayın arkasına kaydırın. Gölge okumalar kullanıcı yanıtını değiştirmeden eski ve yeni sonuçları karşılaştırabilir. Hataları ve gecikmeyi yola göre segmentleyin ki ilerleme kararı kanıta dayansın.

Bu aşamada geri alma genellikle şemayı tersine çevirmek değil, okumaları geri anahtarlamak anlamına gelmelidir. Yıkıcı geri alma script'leri kurtarılabilir bir deploy'u çok daha kötü hale getirebilir. Güven yüksek olana kadar genişletilmiş durumu koruyun.

Yalnızca kanıttan sonra daraltın

Eski temsili yazmayı bırakın, örtüşen uygulama sürümlerinin ve kuyruklanmış işin temizlenmesini bekleyin, sonra kullanılmayan kodu kaldırın. Telemetriyle eski alanın veya tablonun artık okunmadığını doğrulayın; ardından ayrı bir deploy'da düşürün.

Sıfır kesinti riskin yokluğu değildir. Riski gözlemlenebilir kılan, etki yarıçapını sınırlayan ve her aşamada güvenli bir karar koruyan bir teslimat biçimidir.


5 Haziran 2024 tarihinde Berktuğ Berke Ateş tarafından yayımlandı.