it-swarm.dev

Üretim kod tabanı / veritabanı şemanızı kesinti süresine neden olmadan nasıl güncellersiniz?

Üretim sunucusu kod temeli/veritabanı şemasını kesinti yapmadan güncellemeye yönelik bazı teknikler nelerdir?

43
Olivier Lalonde

Genellikle, bu tür bir gereksinimi olan üzerinde çalıştığım web siteleri, yük dengeleyicilerin arkasındaydı veya ayrı yük devretme konumlarına sahipti. Bu örnekte, tek bir yük dengeleyiciniz, 2 web sunucunuz (A & B) ve 2 veritabanı sunucunuz (M&N - genellikle DB sunucuları logshipping yoluyla bağlanmıştır - en azından SQL Server dünyasında) ).

  1. Web sunucusu A'nın yük dengeleyiciden bağlantısı kesilecektir (böylece gelen tüm trafik B'ye gider).
  2. Günlük sevkiyatı durduruldu (önce DB Server M güncellenecektir).
  3. Web sunucusunu güncelleyin A. Yapılandırmayı DB Server M'ye yönlendirin.
  4. Güncellemenin çalışıp çalışmadığını test edin ve doğrulayın (genellikle insanlar doğrudan IP adresine vurur).
  5. Yük dengeleyiciyi mevcut oturumlar B'ye devam edecek şekilde ayarlayın. Yeni oturumlar A'ya gider.
  6. B'deki tüm oturumların süresinin dolmasını bekleyin (yarım saat veya daha fazla olabilir, genellikle trafiği izleriz ve planlanan 1 saatlik bir ara verilir).
  7. B ve N'yi güncelleyin.
  8. Güncellemenin çalışıp çalışmadığını test edin ve doğrulayın.
  9. Günlük gönderimini yeniden ayarlayın ve çalışıp çalışmadığını test edin.
  10. Yük dengeleyiciyi normal çalışmaya ayarlayın.

Çok karmaşık bir web uygulamasında, 1-5. Adımlar olarak tanımlanan şey bütün gece sürebilir ve zamanları ve acil durum irtibat numaralarını içeren 50 sayfalık bir Excel tablosu olabilir. Bu gibi durumlarda, sistemin yarısının güncellenmesi, sistemi kullanıcılara açık tutarken 18: 00-6: 00 saatleri arasında planlanır. DR sitesi için güncellemenin ele alınması genellikle ertesi gece için planlanır - umarım ilk gün hiçbir şey kırılmaz.

Çalışma süresinin bir gereklilik olduğu durumlarda, yamalar önce QA ortamında test edilir ve bu da ideal olarak üretim ile aynı donanımdır. Herhangi bir aksama göstermezlerse, genellikle hafta sonu olan normal programa uygulanabilirler.

20
Tangurena

Tipik veritabanları için (örneğin Oracle), sorguları paralel olarak çalıştırırken veritabanı şemasını değiştirmek mümkündür. Gerçi bazı ileri planlama gerektirir.

Uygulanacak değişikliğin bazı kısıtlamaları:

  • mevcut kodla çalışmalıdır, yani kod şemanın hem eski hem de yeni sürümleriyle ilgilenmelidir
  • dB üzerinde böyle bir yüke maruz kalmamalıdır işlemlerin durmak için çığlık atacak (sana bakıyorum CREATE INDEX)
  • veri kaybına maruz kalmamalıdır (tabloyu bırakıp yeniden oluşturamazsınız)

Şemanın geriye dönük olarak uyumlu olması için, genellikle bir sütun EKLEME veya DEĞİŞTİRME yapabilirsiniz, ancak varolan kod artık kullanılmıyorsa bir şeyi DAMLA yapabilirsiniz.

Kodunuz değişikliği şeffaf bir şekilde işleyemezse, veritabanını değiştirmeden önce kodu değiştirin.

İleri planlama hakkında basit öneriler: DB isteklerinizdeki sütun adlarını her zaman açıkça belirtin (SELECT * FROM). Bu şekilde eski isteklerde yeni sütunlar gösterilmez.

9
Matthieu M.

Tüm sistemler bunu yapamaz, onu destekleyecek şekilde kurulmalıdır.

Örneğin, birkaç yıl önce yükseltmeye yardım ettiğim ana sistemlerimizden biri 7/24 mevcut olmalıdır. Site dışı Kullanıcı Arabirimi Katmanı ve İş Katmanı arasında saf bir iletişim katmanı da dahil olmak üzere birden çok katmandan oluşuyordu. İletişim katmanının kodlanma şekli nedeniyle, Business Layer veya DB şemasında gelecekte yapılacak herhangi bir değişiklik gerçek bir kesinti olmadan gerçekleştirilebilir. En kötü senaryoda, kullanıcı değişikliklerin geçerli olması nedeniyle 10-30 saniyelik bir duraklama yaşayacaktır.

Değişiklikler yalnızca iş katmanındaki kod değişikliklerinden olsaydı, sıraya alınabilir ve yalnızca milisaniye gecikmeyle 'çevrilebilir'.

Bunu yapabilirdi çünkü:

  • İletişim katmanı mesajları tutabilir. Bu, UI'yi düşürmeye gerek kalmadan UI Katmanı dışındaki katmanlarda gerçek bir kesinti yapmamızı sağladı.
  • MVDB tarafından işlenen İş Katmanı niData olarak adlandırılır. Bu, tüm kodu bellekte tutar. Kodu derledikten sonra, eski nesne yerine yeni nesne kodunu belleğe zorlamak için bir komut kullanabilirsiniz.

Diğer teknikler, işlemlerin mevcut sistemin başka bir aynasına çoğaltılmasını içerir. Güncellemeyi bir tanesine uygulayarak, güncelleme ve geçiş arasında yapılan tüm işlemleri değiştirip tekrar oynatın. YMMV sistemlerinize bağlı.

5
Dan McGrath

İşte gömülü veritabanı sistemleri ve gömülü sistemler dünyasından farklı bir bakış açısı. Gömülü sistemler çeşitli ağ/telekomünikasyon altyapı ekipmanlarını içerir ve bu alanda genellikle% 99,999 (beş 9s) çalışma süresi hakkında konuşurlar.

Biz (McObject), eXtremeDB Yüksek Kullanılabilirlik dahil, gömülü veritabanı sistemi ürünleri eXtremeDB ailesinin tedarikçisiyiz.

İlk olarak, "katıştırılmış veritabanı" nın, veritabanı sisteminin derlenmiş ve uygulama kodunuzla bağlantılı bir kütüphane olduğu anlamına geldiğini anlayın; bu anlamda, uygulamanıza "gömülüdür".

EXtremeDB Yüksek Kullanılabilirlik ile, uygulamanızın bir MASTER örneği (bir veya birkaç işlem olabilir) ve uygulamanızın bir veya daha fazla REPLICA örneği vardır. Bir çoğaltma ana sunucu ile bağlantı kurduğunda, ana veritabanının bir kopyasını "ilk eşitleme" adı verilen bir işlemle alır. Bu, ana uygulama çalışmalarına devam ederken yapılabilir. Senkronize edildikten sonra, master'ın işlemlerini çoğaltma yoluyla alır. Bu nedenle, bir çoğaltma her zaman geçerli verilere sahiptir ve master'ın başarısız olması durumunda (yük devretme adı verilen bir işlem aracılığıyla) devralabilir.

İlk senkronizasyonun bir özelliği "ikili şema gelişimi" olarak adlandırılır. Basit İngilizce olarak, bu, replikanın veritabanını doldurma işleminin replikanın veritabanı şeması ile master'ın veritabanı şeması arasındaki farkları içereceği anlamına gelir.

Uygulamada bu, uygulamanızın daha yeni bir sürümünü (yeni/bırakılan tablolar, yeni/bırakılan/değiştirilen alanlar, yeni/bırakılan dizinler ile) oluşturabileceğiniz, uygulamanızın yeni sürümünü bir master'a ekleyebileceğiniz ve ardından bunun yeni master olmak için daha yeni çoğaltma (yani yeni çoğaltma için bir yük devretmeye zorlayın, böylece master olur ve eski master kendini kapatır). Voila, uygulamanızı sisteminizin kullanılabilirliğini kesintiye uğratmadan N sürümden N + 1'e taşıdınız. Artık eski master'ı ve diğer kopyaları N + 1 sürümüne yükseltmeye devam edebilirsiniz.

1
user22538