Sıfır kesinti süresi kesintisi sağlamaya çalışıyorum, bu sayede kapalı saatlerde daha az ve daha "yavaş" saatlerde veya herhangi bir zamanda teoride konuşlayabilirim.
Şu anki kurulumum biraz basitleştirildi:
- Web Sunucusu A (.NET Uygulaması)
- Web Sunucusu B (.NET Uygulaması)
- Veritabanı Sunucusu (SQL Server)
Mevcut dağıtım işlemim:
- Web Sunucusu A ve B'deki siteleri "durdur"
- Dağıtılmakta olan uygulamanın sürümü için veritabanı şemasını yükseltin
- Web Sunucusunu Güncelle A
- Web Sunucusunu Güncelle B
- Her şeyi tekrar çevrimiçi duruma getirin
Şuanki problem
Bu, her ay küçük bir kesinti süresine neden olur - yaklaşık 30 dakika. Bunu mesai saatleri dışında yapıyorum, bu yüzden büyük bir sorun değil - ama ondan uzaklaşmak istediğim bir şey.
Ayrıca - gerçekten geri dönmenin yolu yok. Genellikle geri alma DB komut dosyaları yapmıyorum - yalnızca komut dosyalarını yükseltin.
Yük Dengeleyicisini Kaldırma
Bir kerede bir Web Sunucusunu yükseltebilmeyi çok isterim. Web Server A'yı yük dengeleyiciden çıkarın, yükseltin, tekrar çevrimiçi duruma getirin ve ardından Web Server B için tekrarlayın.
Sorun veritabanı. Yazılımımın her sürümünün veritabanının farklı bir sürümüne karşı çalışması gerekiyor - bu yüzden "sıkışmış" durumdayım.
Olası çözüm
Düşündüğüm mevcut bir çözüm, aşağıdaki kuralları kabul ediyor:
- Bir veritabanı tablosunu asla silmeyin.
- Bir veritabanı sütununu asla silmeyin.
- Asla bir veritabanı sütununu yeniden adlandırmayın.
- Asla bir sütunu yeniden sırala.
- Saklanan her prosedür versiyonlanmalıdır.
- Anlamı - 'spFindAllThings' düzenlendiğinde 'spFindAllThings_2' olur.
- Sonra tekrar düzenlendiğinde 'spFindAllThings_3' olur.
- Aynı kural, görünümler için de geçerlidir.
Bu biraz aşırı gibi gözükse de, bence sorunu çözdü. Uygulamanın her sürümü DB'ye kesintisiz bir şekilde vuracak. Kod, görünümlerden / depolanan prosedürlerden belirli sonuçlar beklemektedir - ve bu, 'sözleşmeyi' geçerli kılar. Sorun şu ki - sadece özensiz görünüyor. Uygulama bir süre dağıtıldıktan sonra eski saklı yordamları temizleyebileceğimi biliyorum, ancak yalnızca kirli hissediyor. Ayrıca - bu kuralı izleyen tüm geliştiricilere dayanır, bu çoğunlukla olur, ancak birinin bir hata yapacağını hayal ediyorum.
Sonunda - Benim sorum
- Bu özensiz veya hacky mi?
- Bu şekilde yapan başka biri var mı?
- Diğer insanlar bu sorunu nasıl çözüyor?