AWS ElasticBeanstalk ile High Scalability
İlk yazımızda yüksek ölçeklenebilirliğin(high scalability) ne olduğuna değinmiştik. Bulut platformlarının sağladığı ölçeklenebilirlik özelliklerinden ve bu özellikler sayesinde uygulamalarımızı nasıl ölçekleyebileceğimizden bahsetmiştim. Bu yazımda da ilk yazıda kısaca değindiğim AWS ElasticBeanstalk’in bu çerçevedeki özelliklerine ve kullanımına göz atacağız.
Öncelikle AWS ElasticBeanstalk’ta kullanabildiğimiz scalability parametrelerine göz atalım:
- Trigger Parametreleri(Trigger Measure): Donanımsal olarak işlemci, network kullanımı, disk I/O, istek sayısı… gibi parametrelere göre trigger tanımları yapabilirsiniz. Olası parametreler şunlar: CPUUtilization, NetworkIn, NetworkOut, DiskWriteOps, DiskReadBytes, DiskReadOps, DiskWriteBytes, Latency, RequestCount, HealthyHostCount, UnhealthyHostCount
- Trigger Seviyeleri: Minimum, Maximum, Sum, Average
- Ölçü Birimleri: Seconds, Percent, Bytes, Bits, Count, Bytes/Second, Bits/Second, Count/Second, None
- Ölçüm Periyotları: Amazon CloudWatch’ın triggerları ne sıklıkla ölçeceğini belirler.
- İhlal Süresi(Breach Duration): Trigger tetiklenmeden önce belirtilen değerlerin ne kadar süreyle gerçekleşeğine bakılarak triggerın çalışması sağlanabilir.
- Üst Sınır(Upper Threshold): Trigger measure’da seçilen birim için bu değerin üzerine çıkılırsa trigger tetiklenir.
- Scale Üst Sınırı(Upper Breach Scale): Trigger devreye girdiğinde en fazla kaç adet Amazon EC2 örneğinin(instance) ekleneceği
- Alt Sınır(Lower Threshold): Trigger measure’da seçilen birim için bu değerin altına düşerse trigger tetiklenir.
- Scale Alt Sınırı(Lower Breach Scale): Trigger devreye girdiğinde en fazla kaç adet Amazon EC2 örneğinin(instance) sistemden çıkarılacağı
Yukarıda saydığımız parametrelerle oynayarak istediğiniz değerlere ulaşıldığında sunucudaki/sunuculardaki değerleri yükseltebilir veya düşürebilirsiniz.
Örnek birkaç senaryo üzerinden bu ayarları nasıl kullanabileceğimize bakalım.
Örnek-1: CPU kullanımına göre ölçeklendirme
En sık yapılan scaling işleminin CPU kullanımına göre yapıldığını söyleyebilirim. Diyelim ki elimizde sunucuda işlemcilerin bir dakika içerisindeki kullanımı %70’in üzerinde olursa 2 CPU arttırılacak, eğer 1 dakika boyunca CPU kullanımı %20’nin altında kalırsa da 2 CPU azaltılacak. Bu işlemi gerçekleştirmek için ayarları şu şekilde gerçekleştirmemiz gerekiyor:
- Trigger Measure: CPU Utilization
- Trigger Statistics: Average
- Measurement Period: 1 dakika
- Upper Treshould: 70
- Upper Breach Scale: 2
- Lower Threshold: 20
- Low Breach Scale: -2
Örnek-2: İstek(Request) sayısına göre ölçeklendirme
Uygulamanıza gelen request sayısının artışı gerek işlemci kullanımına gerekse disk I/O kullanımına yük getirecektir. Yaptığınız yük testlerinde uygulamanızın belirli bir zaman diliminde belirli bir rakaımn üzerinde isteklere yanıt vermesinin yavaşladığını tespit ettiyseniz bu değerlere göre scaling koşullarınızı belirleyebilirsiniz. Örneğin 1 dakika içerisinde uygulamanıza 10.000’den fazla istek gelirse yeni bir instance açmak isteyebilirsiniz. Aşağıdaki resimdeki değerlere göz atarak bu ayarların nasıl yapıldığını görebilirsiniz.
Görüldüğü gibi AWS ElasticBeanstalk’ın arayüzleriyle uygulamalarınızı kolayca ölçeklendirebiliyorsunuz. Gerek Amazon Web Servisleri, gerekse Microsoft Azure gibi bulut platformları bu tarz araçlar ve arayüzler sayesinde scale up/scale down işlemleri oldukça kolaylaşıyor.
Scalability konusunda daha detaylı bilgi edinmek isterseniz aşağıda AWS ekibinin yayınlamış olduğu bir webiner videosu bulunuyor, onu izlemenizi tavsiye ederim.