Amazon olarak, oluşturduğumuz hizmetler son derece yüksek erişilebilirlik hedeflerini karşılamalıdır. Bu nedenle, sistemlerimizin barındırdığı bağımlılıklar hakkında dikkatlice düşünmemiz gereklidir. Sistemlerimizi bu bağımlılıklarda sorun yaşansa bile dayanıklı olacak şekilde tasarlarız. Bu makalede, belirtilen dayanıklılık düzeyine ulaşmak için kullandığımız ve statik kararlılık denilen bir modeli tanımlayacağız. Bu kavramı, AWS'de altyapının temel bir yapı taşı olan ve dolayısıyla oluşturduğumuz tüm hizmetlerin ana bağımlılık işlevini gören Erişilebilirlik Alanlarına nasıl uyguladığımızı göstereceğiz.

Statik olarak kararlı bir tasarımda, bir bağımlılıkta sorun yaşansa bile genel olarak sistem çalışmaya devam eder. Sistem, bağımlılığının sağlaması gereken güncellenmiş bilgileri (yenilikler, silinenler veya değiştirilenler gibi) muhtemelen görmez. Ancak, bağımlılıkta sorun yaşanmadan önce yapmakta olduğu her şey, sorunun yaşandığı bağımlılığa rağmen çalışmaya devam eder. Amazon Elastic Compute Cloud (EC2) hizmetini nasıl statik olarak kararlı olacak şekilde oluşturduğumuzu açıklayacağız. Ardından, Erişilebilirlik Alanlarını temel alan yüksek oranda erişilebilir bölgesel sistemler oluşturmaya yardımcı olduğunu düşündüğümüz statik olarak kararlı iki örnek mimari sunacağız.

Son olarak, nasıl yazılım düzeyinde Erişilebilirlik Alanı bağımsızlığı sunacak şekilde tasarlandığı dahil olmak üzere Amazon EC2'nin arkasındaki tasarım felsefesinin bir bölümünü daha kapsamlı bir şekilde inceleyeceğiz. Ayrıca, bu mimari seçimiyle hizmet oluşturmanın getirdiği bazı ödünleri ele alacağız.

Erişilebilirlik Alanlarının rolü
Erişilebilirlik Alanları, bir AWS Bölgesinin mantıksal olarak yalıtılmış bölümleridir ve her AWS Bölgesinde, bağımsız çalışacak şekilde tasarlanmış birden fazla Erişilebilirlik Alanı bulunur. Yıldırım çarpmaları, kasırga ve deprem gibi olası sorunlardan kaynaklanan ilişkili olumsuz etkilere karşı koruma sağlamak için Erişilebilirlik Alanları makul uzaklıklarla fiziksel olarak birbirinden ayrılmıştır. Kullandıkları elektrik altyapısı ve diğer altyapılar farklıdır ancak uygulamaların kesinti olmadan hızlıca yüklerini devredebilmesi için hızlı, şifreli ve özel fiber optik ağ iletişimiyle birbirlerine bağlıdırlar. Bir başka deyişle Erişilebilirlik Alanları, altyapı yalıtımımız üzerinde bir soyutlama katmanı sağlar. Bir Erişilebilirlik Alanı gerektiren hizmetler, arayanın altyapıyı fiziksel olarak Bölgenin neresinde tedarik edeceğini AWS'ye bildirmesini ve böylece bu bağımsızlıktan faydalanabilmesini sağlar. Amazon olarak, kendi yüksek erişilebilirlik hedeflerine ulaşmaları için bu alansal bağımsızlıktan yararlanan bölgesel AWS hizmetleri oluşturduk. Amazon DynamoDB, Amazon Simple Queue Service (SQS) ve Amazon Simple Storage Service (S3) gibi hizmetler, bu tür bölgesel hizmetlere örnektir.
 
Amazon Virtual Private Cloud (VPC) içerisinde bulut altyapısı tedarik eden bir AWS hizmetiyle etkileşime geçerken bu hizmetlerin çoğu, arayanın yalnızca bir Bölge değil, aynı zamanda bir Erişilebilirlik Alanı belirtmesini ister. Erişilebilirlik Alanı; örneğin bir EC2 bulut sunucusu başlatırken, Amazon Relational Database Service (RDS) veritabanı tedarik ederken veya Amazon ElastiCache kümesi oluştururken genellikle zorunlu bir alt ağ bağımsız değişkeninde dolaylı olarak belirtilir. Bir Erişilebilirlik Alanında birden fazla alt ağ bulunması yaygın bir durum olsa da tek bir alt ağ tamamen tek bir Erişilebilirlik Alanında bulunur ve bu sayede arayan bir alt ağ bağımsız değişkeni sunarak, kullanılacak Erişilebilirlik Alanını da dolaylı olarak sağlamış olur.

Statik kararlılık

Erişilebilirlik Alanlarını temel alan sistemler oluştururken çıkardığımız bir ders, sorunlar meydana gelmeden önce hazır olmaktır. Daha az etkili bir yaklaşım ise bir Erişilebilirlik Alanında sorun oluşması durumunda, (muhtemelen AWS Auto Scaling hizmetini kullanarak) hizmet ölçeğinin diğer Erişilebilirlik Alanlarında artacağı ve hizmetin tam performansa yeniden ulaşacağı beklentisiyle birden fazla Erişilebilirlik Alanına dağıtım yapmak olabilir. Bu yaklaşım, sorunlar ortaya çıkmadan önce hazırlıklı olmak yerine ortaya çıkan sorunlara müdahale etmeye dayalı olduğu için daha az etkilidir. Bir başka deyişle, statik kararlılıktan yoksundur. Buna karşın, daha etkili ve statik olarak kararlı bir hizmet, bir Erişilebilirlik Alanında sorun oluşsa bile yeni EC2 bulut sunucuları başlatmaya gerek kalmadan doğru çalışmaya devam edecek noktaya kadar altyapısını fazladan tedarik eder.
 
Statik kararlılık özelliğini daha iyi göstermek için bu ilkelere göre tasarlanmış Amazon EC2'ye göz atalım.
 
Amazon EC2 hizmeti, bir denetim düzlemi ve bir veri düzleminden oluşur. "Denetim düzlemi" ve "veri düzlemi", ağ iletişimiyle ilgili terimlerdir ancak bunları AWS içinde her yerde kullanırız. Bir denetim düzlemi; kaynak ekleme, kaynak silme ve kaynakta değişiklik yapma gibi sistem üzerinde yapılan değişikliklerde ve bu değişikliklerin, geçerli olması için ulaşması gereken yerlere dağıtmada kullanılan araçlardır. Buna karşılık bir veri düzlemi, bu kaynakların günlük işleridir. Başka bir deyişle, çalışmaları için gerekenlerdir.
 
Amazon EC2'de denetim düzlemi, EC2 yeni bir bulut sunucusu başlattığında gerçekleşen her şeydir. Denetim düzlemi mantığı, çeşitli görevleri gerçekleştirerek yeni bir EC2 bulut sunucusu için ihtiyaç duyulan her şeyi bir araya getirir. Aşağıda birkaç örnek bulabilirsiniz:
 
• Yerleşim grubu ve VPC kullanım hakkı gereksinimlere uygun olarak işlem için fiziksel bir sunucu bulur.
• VPC alt ağından bir ağ arabirimi tahsis eder.
• Bir Amazon Elastic Block Store (EBS) birimi hazırlar.
• AWS Identity and Access Management (IAM) rol kimlik bilgilerini oluşturur.
• Güvenlik Grubu kurallarını yükler.
• Çeşitli aşağı akış hizmetlerinin veri depolarında sonuçları depolar.
• Gerekli yapılandırmaları VPC'deki sunucuya ve ağ ucuna uygun şekilde dağıtır.
 
Buna karşın Amazon EC2 veri düzlemi, mevcut EC2 bulut sunucularını beklendiği gibi çalıştırmaya devam ederek şu tür görevleri gerçekleştirir:
 
• Paketleri VPC'nin yol tablolarına göre yönlendirir.
• Amazon EBS birimlerinden okuma ve yazma işlemi yapar.
• Ve benzeri.
 
Genellikle veri ve denetim düzlemlerinde söz konusu olduğu üzere Amazon EC2 veri düzlemi, denetim düzlemine göre çok daha sadedir. Göreli sadeliği sayesinde Amazon EC2 veri düzleminin tasarımı, Amazon EC2 denetim düzleminden daha yüksek bir erişilebilirlik düzeyi hedeflemektedir.
 
Amazon EC2 veri düzleminin, (EC2 bulut sunucularını başlatma özelliğindeki sorunlar gibi) denetim düzlemi erişilebilirliği olayları karşısında statik olarak kararlı olacak şekilde tasarlanmış olması da önemlidir. Örneğin Amazon EC2 veri düzlemi, ağ bağlantısındaki kesintileri önlemek için bir EC2 bulut sunucusunun çalıştığı fiziksel makinenin, paketleri VPC'sinin içindeki ve dışındaki noktalara yönlendirmek amacıyla ihtiyaç duyduğu tüm bilgilere yerel erişimi olacak şekilde tasarlanmıştır. Amazon EC2 denetim düzleminde meydana gelen bir sorun, fiziksel sunucunun olay sırasında bir VPC'ye eklenen yeni bir EC2 bulut sunucusu veya yeni bir Güvenlik Grubu kuralı gibi güncellemeleri göremeyebileceği anlamına gelir. Ancak, olaydan önce gönderebildiği ve alabildiği trafik çalışmaya devam edecektir.
 
Denetim düzlemleri, veri düzlemleri ve statik kararlılık kavramları; kapsamlı bir biçimde ve Amazon EC2'nin ötesinde bile geçerlidir. Bir sistemi denetim düzlemine ve veri düzlemine ayırabilmek, birçok nedenden dolayı yüksek oranda erişilebilir hizmetler tasarlamak için yararlı bir kavramsal araç olabilir:
 
• Veri düzlemi erişilebilirliğinin, bir hizmetin müşterilerinin başarısı için denetim düzleminden daha önemli olması yaygın bir durumdur. Örneğin, çoğu AWS müşterisi için bir EC2 bulut sunucusunun, çalışmaya başladıktan sonra kesintisiz erişilebilir olması ve doğru çalışması, yeni EC2 bulut sunucuları başlatabilmekten daha önemlidir.
• Veri düzleminin, denetim düzleminden daha yüksek bir hacimde (genellikle büyüklük derecesine göre) çalışması yaygın bir durumdur. Bu nedenle, her birinin kendi ilgili ölçeklendirme boyutlarına göre ölçeklendirilebilmesi için bu düzlemleri ayırmak daha uygundur.
• Yıllar içinde bir sistemin denetim düzleminin, veri düzleminden daha fazla hareketli parçaya sahip olma eğiliminde olduğunu belirledik. Bu nedenle, denetim düzleminin istatistiksel olarak yalnızca bu nedenle bile sorun yaşama olasılığı daha yüksektir.
 
Bu düşünceleri bir araya getirdiğimizde, en iyi uygulamamız sistemlerimizi denetim ve veri düzlemi sınırına göre ayırmaktır.
 
Uygulamada bu ayrımı sağlamak için statik kararlılık ilkelerini uyguluyoruz. Bir veri düzlemi, genellikle denetim düzleminden gelen verilere bağlıdır. Ancak veri düzlemi, daha yüksek bir erişilebilirlik hedefine ulaşmak için mevcut durumunu korur ve denetim düzlemi sorun yaşasa bile çalışmaya devam eder. Veri düzlemi, sorunun yaşandığı sırada güncelleme alamayabilir ancak sorun yaşamadan önce çalışmakta olan her şey çalışmaya devam eder.
 
Bir Erişilebilirlik Alanı sorununa müdahale olarak bir EC2 bulut sunucusunun değiştirilmesini gerektiren bir planın daha az etkili bir yaklaşım olduğunu daha önce belirtmiştik. Bunun nedeni yeni EC2 bulut sunucusunu başlatamayacak olmamız değildir. Bunun nedeni, bir soruna müdahale olarak sistemin Amazon EC2 denetim düzlemindeki kurtarma yoluna ve yeni bir bulut sunucusunun yararlı işler yapmaya başlaması için gerekli olan uygulamaya özel tüm sistemlere yönelik derhal bir bağımlılık alması gerekmesidir. Uygulamaya bağlı olarak bu bağımlılıklar; çalışma zamanı yapılandırmasını indirme, bulut sunucusunu keşif hizmetlerine kaydetme, kimlik bilgilerini alma vb. gibi adımları kapsayabilir. Denetim düzlemi sistemleri, yapısı gereği veri düzlemindekilerden daha karmaşıktır ve genel olarak sistemde bir sorun yaşandığında yanlış davranış sergilememe olasılıkları daha yüksektir.

Statik kararlılık modelleri

Bu bölümde, statik kararlılıktan faydalanarak sistemleri yüksek erişilebilirlik düzeyine ulaşacak şekilde tasarlamak için AWS'de kullandığımız iki üst düzey modeli tanıtacağız. Her bir modelin uygulanacağı farklı durumlar bulunur ancak her ikisi de Erişilebilirlik Alanı soyutlamasından yararlanır.

Erişilebilirlik Alanlarında etkin-etkin örneği: Yük dengeli bir hizmet
Birçok AWS hizmeti, dahili olarak yatay bir şekilde ölçeklenebilir, durum bilgisi olmayan EC2 bulut sunucusu filosu veya Amazon Elastic Container Service (ECS) container'larından oluşur. Bu hizmetleri, bir Otomatik Ölçeklendirme grubunda üç veya daha fazla Erişilebilirlik Alanında çalıştırıyoruz. Ayrıca bu hizmetler, bir Erişilebilirlik Alanının tamamı kullanılamaz hale gelse bile, kalan Erişilebilirlik Alanlarındaki sunucuların yükü taşıyabilmesi için kapasiteyi fazladan tedarik eder. Örneğin üç Erişilebilirlik Alanı kullandığımızda, yüzde 50 oranında fazladan tedarik ederiz. Bir başka deyişle, her Erişilebilirlik Alanına yük testi yaptığımız düzeyin yalnızca yüzde 66'sında çalışacak şekilde kapasite tedarik ederiz.
 
En bilinen örnek, yük dengeli bir HTTPS hizmetidir. Aşağıdaki diyagramda, HTTPS hizmeti sağlayan ve genel erişime açık Application Load Balancer gösterilmektedir. Yük dengeleyicinin hedefi, eu-west-1 Bölgesindeki üç Erişilebilirlik Alanını kapsayan bir Otomatik Ölçeklendirme grubudur. Bu, Erişilebilirlik Alanlarının kullanıldığı etkin-etkin yüksek erişilebilirliğe örnektir.

Bir Erişilebilirlik Alanında sorun yaşanması durumunda, önceki diyagramda gösterilen mimaride hiçbir eylem gerekmez. Sorunlu Erişilebilirlik Alanındaki EC2 bulut sunucuları, durum denetimlerinde hata vermeye başlayacak ve Application Load Balancer hizmeti, trafiği başka yerlere kaydıracaktır. Elastic Load Balancing hizmeti, aslında bu ilkeye göre tasarlanmıştır. Ölçeği artırmaya gerek kalmadan bir Erişilebilirlik Alanı sorununa dayanacak kadar yük dengeleme kapasitesi tedarik etmiştir.

Bu modeli ayrıca yük dengeleyici veya HTTPS hizmeti olmadığında da kullanırız. Örneğin, Amazon Simple Queue Service (SQS) kuyruğundaki mesajları işleyen bir EC2 bulut sunucusu filosu da bu modeli uygulayabilir. Bulut sunucuları, birden fazla Erişilebilirlik Alanındaki bir Otomatik Ölçeklendirme grubunda dağıtılır ve kapasite uygun şekilde fazladan tedarik edilir. Bir Erişilebilirlik Alanında sorun yaşanması durumunda hizmet hiçbir işlem yapmaz. Sorunlu bulut sunucuları iş yapmayı bırakır ve diğerleri ise boşluğu doldurur.

Erişilebilirlik Alanlarında etkin-yedek örneği: İlişkisel bir veritabanı
Oluşturduğumuz hizmetlerden bazıları durum bilgisine sahiptir ve işleri koordine etmeleri için tek birincil veya lider düğüm gerektirir. Buna bir örnek olarak, MySQL veya Postgres veritabanı altyapısıyla Amazon RDS gibi ilişkisel veritabanı kullanan bir hizmet verebilir. Bu tür bir ilişkisel veritabanı için normal bir yüksek erişilebilirlik kurulumunda, tüm yazma işlemlerinin gitmesi gereken birincil bir sunucu ve yedek bir aday vardır. Aşağıdaki diyagramda gösterilmeyen ek okuma replikalarına da sahip olabiliriz. Durum bilgisine sahip bu gibi bir altyapı ile çalışırken, birincil düğümün Erişilebilirlik Alanından farklı bir alanda bulunan hazır bir yedek düğüm olacaktır.
 
Aşağıdaki diyagram, bir Amazon RDS veritabanını gösterir. Amazon RDS ile bir veritabanı tedarik ederken, bir alt ağ grubu gereklidir. Bir alt ağ grubu, içerisine veritabanı bulut sunucularının tedarik edileceği birden fazla Erişilebilirlik Alanını kapsayan bir alt ağ kümesidir. Amazon RDS, yedekteki adayı birincil düğümden farklı bir Erişilebilirlik Alanına yerleştirir. Bu durum, Erişilebilirlik Alanlarının kullanıldığı etkin-yedek yüksek erişilebilirliğe örnektir.

Durum bilgisi olmayan ve etkin-etkin örnekte görüldüğü üzere, birincil düğümün Erişilebilirlik Alanında sorun oluştuğunda durum bilgisi olan hizmet, altyapıyla ilgili bir işlem yapmaz. Amazon RDS kullanan hizmetler için RDS, yük devretme işlemini yönetecek ve DNS adını çalışan Erişilebilirlik Alanındaki yeni birincil düğüme yönlendirecektir. Bu model, ilişkisel veritabanı kullanmasalar bile diğer etkin-yedek kurulumlar için de geçerlidir. Bunu özellikle lider düğüme sahip küme mimarisi olan sistemlere uyguluyoruz. Bu kümeleri Erişilebilirlik Alanlarına dağıtıyor ve yeni lider düğümü "tam zamanında" bir başkasıyla değiştirmek yerine yedek adaylar arasından seçiyoruz.

Bu iki modelin ortak yanı, her ikisinin de gerçek bir sorun oluşmadan çok önce Erişilebilirlik Alanında bir sorun oluşması halinde ihtiyaç duyacakları kapasiteyi halihazırda tedarik etmiş olmalarıdır. Bu durumların hiçbirinde hizmet, Erişilebilirlik Alanında sorun oluşmasına müdahale olarak yeni altyapı tedarik etme veya değişiklikler yapma gibi denetim düzlemi bağımlılıklarını planlı olarak kullanmaz.

Amazon EC2'nin statik kararlılığını ayrıntılı inceleme

Makalenin bu son bölümünde, Amazon EC2'deki Erişilebilirlik Alanı bağımsızlık ilkesini uygulama yöntemlerimizden bazılarını kapsayan dayanıklı Erişilebilirlik Alanı mimarilerine bir derece daha yakından bakacağız. Bu kavramların bazılarını anlamak, yalnızca kendisinin yüksek erişilebilirliğe sahip olması değil, aynı zamanda başkalarının da yüksek erişilebilirliğe sahip olabileceği bir altyapı sağlaması gereken bir hizmet oluştururken yararlı olacaktır. Düşük düzeyli AWS altyapısı sağlayıcısı olarak Amazon EC2, uygulamaların yüksek oranda erişilebilir olmak için kullanabileceği altyapıdır. Diğer sistemlerin de bu stratejiyi uygulamak isteyebilecekleri durumlar bulunur.

Dağıtım uygulamalarımızda Amazon EC2'deki Erişilebilirlik Alanı bağımsızlık ilkesini uyguluyoruz. Amazon EC2'de yazılımlar; EC2 bulut sunucularını barındıran fiziksel sunuculara, uç cihazlarına, DNS çözümleyicilerine, EC2 bulut sunucusu başlatma yolundaki denetim düzlemi bileşenlerine ve EC2 bulut sunucularının bağlı olduğu diğer birçok bileşene dağıtılır. Bu dağıtımlar, alansal dağıtım takvimine göre yapılır. Bu; aynı Bölgedeki iki Erişilebilirlik Alanının, belirli bir dağıtımı farklı günlerde alacağı anlamına gelir. AWS genelinde, dağıtımlar aşamalı bir şekilde yapılır. Örneğin, başlangıçta yerleşik olarak ve ardından sunucuların 1/N'i oranına dağıtılması şeklindeki en iyi uygulamayı (hangi hizmet türüne dağıttığımızdan bağımsız olarak) takip ederiz. Ancak, Amazon EC2'deki hizmetler gibi belirli bir hizmet durumunda dağıtımlarımız, bir adım daha ileri gidip planlı bir şekilde Erişilebilirlik Alanı sınırına göre ayarlanır. Bu sayede sorunlu bir dağıtım, bir Erişilebilirlik Alanını etkiler ve geri alınıp düzeltilir. Diğer Erişilebilirlik Alanlarını etkilemez ve bunlar normal çalışmaya devam eder.

Amazon EC2'de hizmet oluştururken bağımsız Erişilebilirlik Alanları ilkesini kullandığımız bir başka yol, tüm paket akışlarını Erişilebilirlik Alanı içinde kalacak ve sınırların dışına çıkmayacak şekilde tasarlamaktır. Ağ trafiğinin Erişilebilirlik Alanında yerel olarak tutulmasıyla ilgili bu ikinci nokta, daha ayrıntılı incelemeye değerdir. Bu, diğer kişilerin yüksek erişilebilirlik için ürün oluşturmalarını sağlayacak Erişilebilirlik Alanından bağımsız altyapı sağladığımız durumun aksine, bağımsız Erişilebilirlik Alanları tüketicisi olan (yani yüksek erişilebilirliğe sahip bir hizmet oluşturmak için temel olarak Erişilebilirlik Alanı bağımsızlığının garantilerini kullanan) bölgesel ve yüksek oranda erişilebilir bir sistem oluştururken nasıl farklı düşündüğümüzün ilginç bir örneğidir.

Aşağıdaki diyagramda, yeşil renkteki dahili başka bir hizmete bağlı olan turuncu renkteki yüksek oranda erişilebilir harici bir hizmet gösterilmektedir. Basit bir tasarım, bu iki hizmeti de bağımsız EC2 Erişilebilirlik Alanları tüketicisi olarak görür. Turuncu ve yeşil renkteki hizmetlerin her biri, Application Load Balancer arkasında yer alır ve her hizmet, üç Erişilebilirlik Alanına yayılan ve kapasite tedariği iyi yapılmış arka uç ana bilgisayar filosuna sahiptir. Yüksek oranda erişilebilir bir bölgesel hizmet, yüksek oranda erişilebilir başka bir hizmeti arar. Bu tasarım sadedir ve geliştirdiğimiz hizmetlerin çoğu için iyi bir tasarımdır.

Ancak, yeşil renkteki hizmetin temel bir hizmet olduğunu varsayalım. Diğer bir ifadeyle, yalnızca yüksek oranda erişilebilir olması için değil, aynı zamanda Erişilebilirlik Alanı bağımsızlığı sağlamak üzere bir yapı taşı görevi görmek için amaçlandığını varsayalım. Bu durumda, Erişilebilirlik Alanı duyarlı dağıtım uygulamalarını izlediğimiz alana özel bir hizmetin üç bulut sunucusu olarak tasarlayabiliriz. Aşağıdaki diyagramda, yüksek oranda erişilebilir bölgesel bir hizmetin yüksek oranda erişilebilir bir alansal hizmeti aradığı tasarım gösterilmektedir.

Yapı taşı olan hizmetlerimizi Erişilebilirlik Alanından bağımsız olacak şekilde tasarlamamızın nedenleri, temel aritmetiğe dayanır. Bir Erişilebilirlik Alanında sorun oluştuğunu varsayalım. Application Load Balancer, nedenleri kesin olan hatalarda etkilenen düğümlerin yüklerini otomatik olarak başka düğümlere devredecektir. Ancak, tüm hataların nedeni bu kadar açık değildir. Yazılımdaki hatalar gibi yük dengeleyicinin durum denetiminde göremeyeceği ve uygun şekilde düzeltemeyeceği gri hatalar olabilir.

Yüksek oranda erişilebilir bölgesel bir hizmetin yüksek oranda erişilebilir başka bir bölgesel hizmeti aradığı önceki örnekte, sistemden bir istek gönderilirse, isteğin sorunlu Erişilebilirlik Alanından kaçınma olasılığı bazı basitleştirici varsayımlarla 2/3 * 2/3 = 4/9 şeklindedir. Yani, isteğin olaydan kaçınma olasılığı yarıdan azdır. Buna karşın, mevcut örnekte olduğu gibi yeşil renkteki hizmeti alansal bir hizmet olarak oluşturursak, o zaman turuncu renkteki hizmette bulunan ana bilgisayarlar aynı Erişilebilirlik Alanında bulunan yeşil renkteki uç noktayı arayabilir. Bu mimari sayesinde sorunlu Erişilebilirlik Alanından kaçınma olasılığı 2/3 olur. N hizmet bu arama yolunun bir parçasıysa bu sayılar, N bölgesel hizmet için (2/3)^N'ye tekabül ederken N alansal hizmet için 2/3'te sabit kalır.

Bu nedenle, Amazon EC2 NAT ağ geçidini alansal bir hizmet olarak oluşturduk. NAT ağ geçidi, özel bir alt ağ kaynaklı giden internet trafiğine olanak sağlayan ve bölgesel, VPC çapında bir ağ geçidi olarak değil, müşterilerin aşağıdaki diyagramda gösterildiği gibi Erişilebilirlik Alanı başına ayrı olarak başlattığı alansal bir kaynak olarak görünen bir Amazon EC2 özelliğidir. NAT ağ geçidi, VPC internet bağlantısı yolunda bulunur ve bu nedenle, bu VPC içindeki her EC2 bulut sunucusu veri düzleminin bir parçasıdır. Bir Erişilebilirlik Alanında bağlantı sorunu varsa, bu sorunu diğer bölgelere yaymadan bu Erişilebilirlik Alanıyla sınırlamak isteriz. Sonuç olarak, bu makalenin önceki bölümlerinde belirtilene benzer mimariyi (yani, üç Erişilebilirlik Alanında bir filo tedarik edip iki Erişilebilirlik Alanının tüm yükü taşıyabileceği kadar kapasite ayırma) oluşturan bir müşterinin, sorunlu Erişilebilirlik Alanında meydana gelenlerden diğer Erişilebilirlik Alanlarının hiçbir şekilde etkilenmeyeceğini bilmesini isteriz. Bunu yapmamızın tek yolu, NAT ağ geçidi gibi tüm temel bileşenlerin gerçekten Erişilebilirlik Alanı içinde kalmasını sağlamaktır.

Bu seçim, ek karmaşıklık maliyetiyle birlikte gelir. Bizim için Amazon EC2'de ek karmaşıklık, bölgesel yerine alansal hizmet ortamlarını yönetme biçiminde gelir. NAT ağ geçidi müşterileri için ek karmaşıklık, VPC'nin farklı Erişilebilirlik Alanlarında kullanılmak üzere birden fazla NAT ağ geçidi ve yol tablosuna sahip olma şeklindedir. NAT ağ geçidinin kendisi, alansal erişilebilirlik garantileri sağlaması gereken Amazon EC2 veri düzleminin bir parçası olan temel bir hizmet olduğu için ek karmaşıklık oluşması normaldir.

Erişilebilirlik Alanından bağımsız hizmetler oluştururken dikkate aldığımız bir nokta daha bulunur ve bu nokta veri dayanıklılığıdır. Daha önce belirtilen alansal mimarilerin her biri, tek bir Erişilebilirlik Alanında bulunan yığının tamamını gösterse de olağanüstü durum kurtarma işlemleri için tüm sabit durumları birden fazla Erişilebilirlik Alanına çoğaltırız. Örneğin, genellikle düzenli aralıklarla veritabanı yedeklerini Amazon S3'e depolar ve Erişilebilirlik Alanı sınırlarında veri depolarımızın okuma replikalarını muhafaza ederiz. Bu replikalar, birincil Erişilebilirlik Alanının çalışması için gerekli değildir. Bunun yerine, müşteri veya iş açısından önemli verileri birden fazla konumda saklamamızı sağlarlar.

AWS'de çalışacak hizmet odaklı bir mimari tasarlarken, bu iki modelden birini veya ikisinin bir birleşimini kullanmayı öğrendik:

• Daha basit model: bölgesel-bölgeseli-arar. Bu genellikle dışa dönük hizmetler için en iyi seçimdir ve çoğu dahili hizmet için de uygundur. Örneğin, AWS'de Amazon API Gateway ve AWS sunucusuz teknolojileri gibi üst düzey uygulama hizmetleri oluştururken, Erişilebilirlik Alanında sorun oluşması durumunda bile yüksek erişilebilirlik sağlamak için bu modeli kullanıyoruz.
• Daha karmaşık model: bölgesel-alansalı-arar veya alansal-bölgeseli-arar. Amazon EC2'de dahili ve bazı durumlarda harici veri düzlemi bileşenleri (doğrudan önemli veri yolunda bulunan ağ gereçleri veya diğer altyapılar) tasarlarken, ağ trafiğinin aynı Erişilebilirlik Alanında kalması için Erişilebilirlik Alanı bağımsızlığı modelini takip ediyor ve Erişilebilirlik Alanlarında yalıtılmış olan bulut sunucularını kullanıyoruz. Bu model, meydana gelen sorunları bir Erişilebilirlik Alanıyla sınırlamakla kalmıyor, aynı zamanda AWS'de avantajlı ağ trafiği maliyeti özelliğine sahip.

Sonuç

Bu makalede, Erişilebilirlik Alanlarında bağımlılıkları başarıyla almak için AWS'de kullandığımız bazı basit stratejileri açıkladık. Sorunlar gerçekleşmeden önce bunları öngörmenin statik kararlılık için son derece önemli olduğunu öğrendik. Bir sistemin yatay olarak ölçeklenebilir etkin-etkin bir filoda çalışması ya da durum bilgisi olan etkin-yedek model olması fark etmeksizin, yüksek erişilebilirlik düzeylerini hedeflemek için Erişilebilirlik Alanlarını kullanabiliriz. Sistemlerimizi, bir sorun oluşması durumunda ihtiyaç duyulacak olan tüm kapasitenin halihazırda tedarik edilmiş ve kullanıma hazır olacak şekilde dağıtıyoruz. Son olarak, Amazon EC2'nin Erişilebilirlik Alanlarının birbirlerinden bağımsız olmalarını sağlamak için statik kararlılık kavramlarını nasıl kullandığını daha kapsamlı bir şekilde inceledik.


Yazarlar hakkında

Becky Weiss, Amazon Web Services'ta Kıdemli Baş Mühendistir. Şu anda AWS'de Identity and Access Management ve genel olarak bulutta müşteriler için esnek, kapsamlı ve güvenilir güvenlik kontrolleri sağlama üzerine odaklanmaktadır. Geçmişte, Amazon Virtual Private Cloud (örneğin ağ iletişimi) ile AWS Lambda üzerinde ve ayrıca kurumsal müşterilerin AWS'deki ortamlarını başarıyla korumalarına yardımcı olmak için AWS Profesyonel Hizmetleriyle çalıştı. Becky aynı zamanda AWS'nin en büyük hayranıdır ve boş zamanlarında AWS'de her türden yararlı ve yararsız ürünler oluşturmaktadır. Becky, AWS'de çalışmaya başlamadan önce Microsoft'ta Windows ve Windows Phone üzerinde çalıştı.

Mike Furr, Amazon Web Services'ta Baş Mühendistir. Maryland Üniversitesi, College Park'ta Bilgisayar Bilimi alanında doktora derecesini aldıktan sonra 2009 yılında Amazon'a katıldı. Amazon'da geçirdiği süre boyunca Virtual Private Cloud, Direct Connect ve ayrıca AWS ölçüm ve faturalama yığını üzerinde çalıştı. Şu anda ekiplere bulut sunucularının ölçeğini genişletmelerine yardım ederek EC2'ye odaklanmaktadır.

Aşırı yüklenmeyi engellemek için yük atma yöntemini kullanma