Azure'da Fault Domain ve Update Domain Nedir? Nasıl ayarlanır?

0 dakikada yazıldı

25423 defa okundu

Düzenle

[Aşağıdaki makalenin SDK2.2 ile beraber yeni Azure özelliklerine uygun
şekilde güncellenmiş halini
burada
bulabilirsiniz.]

Azure ortamında yayınlayabileceğimiz role'lerin instance count ve
instance size gibi özellikleri olduklarını daha önceki yazılarda
görmüştük. Böylece uygulamamızın kaç sanal makinede çalışacağına, ne
kadar kaynak kullanacağına karar verebiliyoruz. Azure'un en önemli
noktalarından biri ise Fault Tolerance yani hata toleransı. En basit
noktada Microsoft, Azure ortamındaki uygulamalarda %99.95 uptime
(çalışır durumda olma) garantisi veriyor. Bu garantiyi verebilmek için
tabi Microsoft'un bir şartı var, o da her role'ün en az iki instance
olması. Bu istek tabi ki çok doğal bir istek fakat %99.95'i garantilemek
ve hatta yükseltmek için aklımızda bulundurmamız gereken birkaç detay
daha var. İşte bunlar da Fault Domain ve Update Domain ;)

Fault Domain

Varsayılan ayarlarda her role'de en az iki tane Fault Domain oluyor.
Maalesef şimdilik Fault Domain sayısını biz belirleyemiyoruz ve tamamen
bizden bağımsız bir şekilde FC (Fabric Controller) tarafından
yönetiliyor. Normal şartlarda iki instance bir role yüklediğimizi
düşünürsek her bir instance ayrı Fault Domain'lere alınacaktır.

Fault Domain'lerin amacı network seviyesinde veya doğrudan donanım
seviyesinde hatalar olduğunda uygulamanızın ayakta kalmasını sağlamak.
Bunun için iki instance olan bir role'ün her instance'ı Azure
DataCenter'ı içerisinde farklı
Rack'lere
yerleştiriliyor. Eğer bir Rack'te sorun çıkarsa söz konusu instance
başka bir noktaya taşınana kadar FC Load Balancer'a trafiği kalan
instance'lara göndermesini söylüyor. Bu sürede yeni VM (sanal makina)
hazır olduğunda uygulamanız oraya yüklenerek yine trafik aktarımı
başlatılıyor.

Upgrade Domain

Azure ortamında projenize bir upgrade gönderdiğinizde doğal olarak tüm
instance'ların kapatılıp, upgrade edilip tekrar açılmaları düşünülemez.
Uygulamanız çalışır durumdayken bir yandan da bölüm bölüm upgrade
edilmeleri gerekiyor. İşte bu noktada UpgradeDomain'ler devreye giriyor.
UpgradeDomain'leri "beraber upgrade edilecek instance" grupları şeklinde
düşünebilirsiniz. Eğer iki instance uygulamanız varsa önce ilki Load
Balancer'dan çıkartılacak ve upgrade edilecek, sonra da ikincisi.
Böylece dışarıdan gelen taleplere sürekli olarak cevap verebilen ve
ayakta olan bir instance kesinlikle olacak. Azure içerisinde Upgrade
Domain sayısının varsayılan değeri 5.

UpgradeDomainCount csdef içerisinde.
UpgradeDomainCount csdef içerisinde.

UpgradeDomain sayısını isterseniz CSDEF içerisinde düzenleyebilirsiniz.
UpgradeDomain sayısı ile FaultDomain sayılarının ve tabi ki instance
sayınızın farklı durumlardaki birleşimi çok farklı sonuçlar verebilir.
Bu konuda çok yapabileceğiniz birşey olmasa da :) en azından başınıza
neler gelebileceğini bilmenizde fayda var.

Diyelim ki UpgradeDomainCount sayısını ayarlamadınız ve varsayılan
değeri olan 5 ile kaldı. Uygulamanızı ise 3 instance olacak şekilde
ayarladınız. Karşınıza çıkabilecek seçeneklerden biri aşağıdaki şekilde;

Senaryo 1
Senaryo 1

Yukarıdaki manzara çok güzel gözüküyor. Herşey güzel bir şekilde
dağıtılmış. FaultDomain'lerden biri giderse geriye iki instance kalacağı
garanti. Aynı şekilde Upgrade gerçekleşirken de tek bir instance dışarı
çekilecek ve upgrade tüm instance'lara tek tek yapıldığı sürede de en az
iki instance sahibi olacağımızı biliyoruz. Yani :) 3 instance olarak
düzenlediğimiz senaryoda arada sırada 2 instance'a düşme ihtimalimiz
var. Tabi burada şu notu da iletmem gerek, FaultDomain'lerin çatlaması
her dakikada bir olan birşey değil. Belki de aylarca hiç başınıza
gelmeyecek ki zaten başınıza gelse de pek farkına varabileceğinizi
sanmıyorum ama yine de bu durumu akılda tutmak gerek. 3 instance
olduğunda 10 dakika için sadece 1 instance kaybediyor olmak çok problem
olmasa da 3000 instance kullanırken 10 dakikalığına 1000 instance
kaybetmek ciddi sorun olabilir.

Senaryo 2
Senaryo 2

Peki ya FC performans kazanmak amacıyla toplam 3 instance'ınızın ikisini
aynı Fault Domain'e koyma kararı alırsa? Fault Domain sayısını bizim
belirleyemediğimizden bahsetmiştik. İşte böyle bir durumda hangi Fault
Domain'de hata yaşandığına göre 1 veya 2 instance'a düşme şansınız var.
Hatta daha da felaket senaryolarına doğru ilerlersek eğer network
seviyesinde / Rack seviyesinde hata gerçekleşirken siz de upgrade
gerçekleştiriyorsanız :) yukarıdaki resimden hem UpgradeDomain2'yi hem
de Fault Domain 1'i kaldırırsanız... servisiniz tamamen aşağı inmiş
oluyor. Tabi burada şunu diyebilirsiniz :) Fault varsa neden upgrade
domain'e upgrade çakarsın ki? :) ya tam upgrade anına denk geldiyse ve
zaten upgrade süreci başlamıştıysa :) Çok ince bir ip üzerinde
olduğumuzun farkındayım, milyonda bir ihtimallere doğru ilerliyoruz ama
en azından bu detayları bilmekte fayda var diye düşünüyorum.

Senaryo 3
Senaryo 3

Şimdi gelin biraz daha farklı bir senaryoya gidelim :) Role'ümüz 9
instance. UpgradeDomainCount'u da 3 olarak ayarladık. FC de 3 Fault
Domain düzenlemiş. Yine milyonda bir senaryosuna gidersek ve Upgrade
esnasından farklı bir Rack'de hata oldu dersek, 9 instance'dan 4'e
düşüyoruz. Cılkını çıkardığımın farkındayım :) Ama umarım genel
perspektifi aktarabilmişimdir.

Görüşmek üzere ;)