Bir kesinti süresine neden olmadan bir üretim sunucusunun kod tabanı / veritabanı şemasını güncellemek için bazı teknikler nelerdir?
Bir kesinti süresine neden olmadan bir üretim sunucusunun kod tabanı / veritabanı şemasını güncellemek için bazı teknikler nelerdir?
Yanıtlar:
Genel olarak, üzerinde çalıştığım web sitelerinin bu tür bir gereksinimi vardı, hepsi yük dengeleyicilerin arkasındaydı veya ayrı yük devretme konumlarına sahipti. Bu örnekte, tek bir yük dengeleyicinize, 2 web sunucusuna (A & B) ve 2 veritabanı sunucusuna (M & N - genellikle DB sunucularının logshipping yoluyla bağlı olduğunu - en azından SQL Server dünyasında olduğunu varsayalım. ).
Çok karmaşık bir web uygulamasında, 1-5 arasındaki adımlar olarak tanımlananlar 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 6: 00-18: 00 saatleri arasında gerçekleştirilirken, sistem kullanıcılara açık kalmaktadır. DR sitesi güncellemesinin yapılması genellikle ertesi gece için planlanıyor; ilk gün hiçbir şeyin bozulmadığını umuyoruz.
Çalışma süresinin bir gereksinim olduğu durumlarda, yamalar öncelikle ideal olarak üretim ile aynı donanım olan QA ortamında test edilir. Kesinti göstermezlerse, genellikle hafta sonları normal olan programa uygulanabilirler.
Tipik veritabanları için (örneğin Oracle), sorguları paralel olarak çalıştırırken veritabanı şemasını değiştirmek mümkündür. Yine de bazı ileri planlama gerektirir.
Bunların uygulanacak değişimin bazı kısıtları vardır:
CREATE INDEX
)Şemanın geriye dönük uyumlu olması için, genellikle bir sütunu ekleyebilir veya değiştirebilir, mevcut kodun artık kullanmaması durumunda yalnızca bir şeyi DROP yapabilirsiniz.
Kodunuz değişikliği şeffaf bir şekilde işleyemiyorsa, veritabanını değiştirmeden önce kodu değiştirin.
İleriye yönelik planlama konusunda basit tavsiyeler: DB taleplerinizde her zaman sütun adlarını belirtin (kullanmayın SELECT * FROM
). Bu şekilde eski isteklerde ortaya çıkan yeni sütunlarınız olmaz.
select *
araçlarının bu kod aralarının ise yeni sütun eklenir (yazacak değişken olmaması için). Tabii ki, bu kesinlikle yazılan bir dil kullanmanın sonucu olabilir.
select *
daha güvenilir ve güvenli olduğunu göremiyorum . Eskiden sahip select one, two from ...
olsaydın, sadece one
ve two
; eğer third
masaya eklenirse, o zaman (burada) kullanmazsınız, bu nedenle onu almak için hiçbir neden yoktur. Birden kullanmanız gerekiyorsa, kodu değiştireceksiniz, bu nedenle sorguyu bu noktada de değiştirebilirsiniz!
select
, mümkün olduğu kadar seçici olması gerektiği (ve bir endeks tarafından kapsanan) gerektiği anlamına geliyor, aksi halde tost (zorunluluk olan birleşimlerden önce). Bunu söylediğim için üzgünüm ama açıkladığınız yaklaşım bu ürünlerde tam bir başarısızlıktı.
Bütün sistemler yapamaz, onu destekleyecek şekilde kurulmalıdır.
Örneğin, birkaç yıl önce güncellemeye yardımcı olduğum büyük sistemlerimizden biri 7 gün 24 saat hizmete hazır 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, İş Katmanına veya DB şemasına gelecekteki herhangi bir değişiklik gerçek bir kesinti olmadan uygulanabilir. En kötü senaryoda, kullanıcı değişikliklerin yürürlüğe girmesiyle 10-30 saniyelik bir duraklama yaşayabilir.
Değişiklikler tamamen iş katmanındaki kod değişiklikleri olsaydı, sıraya alınabilir ve yalnızca milisaniye gecikmeyle 'çevrilebilir'.
Bunu yapabilirdi çünkü:
Diğer teknikler, işlemlerin mevcut sistemin başka bir aynasına çoğaltılmasını içerir. Güncellemeyi bire uygulayarak, güncelleme ve değiştirme arasında yapılan tüm işlemleri değiştirme ve tekrarlama. Yine de sisteminize bağlı olarak YMMV.
İş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ılabilirliği de dahil olmak üzere eXtremeDB gömülü veritabanı sistemi ürün ailesinin satıcısıyız.
Öncelikle, "gömülü veritabanı" nın, veritabanı sisteminin uygulama kodunuzla derlenmiş ve bağlantılı bir kütüphane olduğunu ifade eder; Bu anlamda, uygulamanıza "gömülü" dir.
EXtremeDB Yüksek Kullanılabilirlik ile, uygulamanızın (bir veya birkaç işlem olabilir) MASTER örneği ve uygulamanızın bir veya daha fazla REPLICA örneği vardır. Bir kopya ana ile bağlantı kurduğunda, ana veri tabanının bir kopyasını "ilk senkronizasyon" adı verilen bir işlemle alır. Master uygulama çalışmalarına devam ederken bu yapılabilir. Senkronize edildiğinde, master'in işlemlerini çoğaltma yoluyla alır. Bu nedenle, bir çoğaltma her zaman geçerli verilere sahiptir ve yöneticinin başarısız olması durumunda (yerine çalışma adı verilen bir işlemle) devralabilir.
İlk senkronizasyonun bir özelliği “ikili şema evrimi” olarak adlandırılıyor. Düz İngilizce olarak, bu, kopyaların veritabanını doldurma işleminin kopyaların veritabanı şeması ile ana veritabanı şeması arasındaki farklılıkları barındıracağı 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 dizinlerle) oluşturabileceğiniz, uygulamanızın bu yeni sürümünü bir ana programa ekleyebileceğiniz ve daha sonra yeni ana kopya olmak için daha yeni bir çoğaltma (yani yeni ana kopyalamaya bir yük devretme zorlar, böylece ana olur ve eski ana kendini kapatır). Voila, sisteminizin kullanılabilirliğini kesmeden başvurunuzu sürüm N'den N + 1'e yükselttiniz. Şimdi eski ana ve diğer kopyaları N + 1 sürümüne yükseltmeye devam edebilirsiniz.