IT & IoT Security | Cloud | It's all about the life itself

Nothing in life is as important as you think it is, while you are thinking about it.

AWS Auto Scaling

There are lots of documentation(blog posts etc.) about AWS in English that’s why I have been writing in Turkish. I hope this will be informative for Turkish readers.
Regards.

Merhaba,

Auto scaling, uygulamanızın performansını koruyabilmek için yeterli sayıda sanal sunucunun otomatik olarak açılmasını veya kapatılmasını sağlayan AWS servisidir. Uygulamanın performansına bağlı olarak belirli zamanlarda fazla sayıda EC2(sanal sunucusu) instance’ının çalışması gerekebilir,yoğunluk düştüğünde de, açılan EC2 instance’larını kapatmak gerekir. Bu şekilde, AWS bulutunda çalıştırdığınız uygulamanın performansını koruyarak masrafı optimize etmiş olursunuz.

Auto scaling servisinin bileşenleri aşağıdaki gibidir:

Groups: EC2 instance’ları gruplandırılır ve böylece auto scaling içinde performansa bağlı sahip olmanız gereken minimum,maksimum ve hedeflenen instance sayısını belirlemiş olursunuz.

Launch Configuration: EC2 instance’ları için bir şablon olarak düşünülmelidir. Bu yapılandırma ile, otomatik olarak oluşturulacak Amazon Machine Image,Instance type (t,m vb. size’lar),erişim için kullanılacak key pair’lar,security group bilgisi,block device’ların atanması detaylarını belirlersiniz. Uygulamanın performansından dolayı yeni EC2 instance’ı açılacağı zaman, burada belirlenen detaylar ile açılır.

Scaling Plan : Auto scaling için zamanlama seçeneğidir.Bir şarta göre veya belirli zamana göre işlem yapmak şeklinde yapılandırılabilir.

Auto Scaling servisini tek başına kullanabileceğiniz gibi Elastic Load Balancer servisi ile birlikte de kullanabilirsiniz. Production ortamınız için,uygun şartlar sağlanıyorsa, Auto Scaling ile Elastic Load Balancer servislerinin birlikte kullanılması gerektiğini düşünüyorum.

Auto scaling servisi ile genel olarak aşağıdaki kazanımları sağlarsınız:

Değişken compute capacity ihtiyacı

Uygulamanızın, compute capacity ihtiyacının,haftanın günlerine göre farklılaştığını düşünün. Fazla sayıda EC2 instance’ı çalıştırmak, uygulama performansının daima gereken kaynaklara sahip olması anlamında yeterli olacaktır. Fakat ,kaynak gerekmediği zamanlarda da fazla sayıda instance çalışacağı için masraf artacaktır.

clip_image002clip_image004

Uygulamanın compute capacity ihtiyacını, üstte soldaki resimde gösterildiği gibi düşünelim. Geleneksel yöntem ile ilerleyerek, ilave instance’lar açarak sağdaki durumu yakalabiliriz. Bu durumun dezavantajı, haftanın her günü ihtiyaçtan fazla compute capacity’ye sahip olmanızdır(üstte sağdaki durum). Dolayısıyla ihtiyacınızdan fazla hizmet satın almış olursunuz.

clip_image006

Masrafı azaltmak için üstte görülen yöntemi seçebilirsiniz.Uygulama için gereken ortalama compute capacity’yi satın almak! Tahmin edeceğiniz üzere bu durumda da bazı günlerde müşteri memnuniyetiniz düşecektir! Çünkü Pazartesi,Salı ve Çarşamba günü uygulamanız ortalama compute capacity’nin üzerinde çalışmak zorunda kalacaktır. Satın almış olduğunuz ortalama compute capacity limitinden dolayı bu durum gerçekleşemeyeceği için web/application sunucunuzda dar boğaz yaşanacaktır ve müşteri memnuniyeti azalacaktır.

clip_image008

Bu durumda en optimum yöntemi seçmek gerekir. Auto scaling 🙂 Üstte görüldüğü üzere gereken zamanlarda gereken miktarda compute capacity’ye sahip olursunuz.

Web Uygulaması Mimarisi

clip_image010clip_image012

Üstte açıkça gürüldüğü üzere ihtiyaç anında web ve app tier’da gereken kapasite arttırımı yapılır. İhtiyaç kalmadığında arttırılan kapasite geri iade edilir.

Availability Zone’lar arasında Instance’ların dağıltılması

Önceki yazılarımda VPC’den,subnetlerden ve availability zone’lardan bahsetmiştim. Auto Scaling group’larındaki EC2 instance’larını farklı availability zone’larda(farklı subnet’lerde) çalışacak şekilde tasarlayabilirsiniz(Aynı region içinde!)

clip_image014

Bu tasarım ile de hata tolerasını sağlamış olursunuz.

Özetle:

Auto scaling, daha iyi hata toleransı,availability ve maliyet yönetimi ile şirketinizin AWS bulutundan maksimum seviyede faydalanmasını sağlar.

Yazımın devamında yapılandırmadan bahsedeğim.

clip_image016

Create…. kısmından Launch Configuration belirliyorsunuz. Test ortamımdaki launch configuration için t2.micro instance type’ını seçtim. Bu ayarlamaya göre Auto scaling servisi ortama yeni instance ekleyeceği zaman t2.micro tipinde instance ekleyecek. Bu konfigürasyonun detayı aşağıdaki gibidir.

clip_image018

Yeni açılacak instance’ların kullanacağı security group ve ip address assignment üstte belirlendiği şekilde yapılacak. Launch configuration’ı kullanacak auto scaling group’u yapılandırmamız gerekiyor. Oluşturduğum auto scaling group’un detayları aşağıdaki gibidir.

clip_image020

Üç farklı availability zone kullandım! Minimum 1,maksimum 3 instance’a sahip olacağım. Cooldown ve grace period’unu, uygulamanıza veya yapınıza uygun olacak şekilde tasarlamalısınız.

Oluşturduğum Auto scaling policy aşağıdaki gibidir. DEC kelimesini decrease anlamında,INC kelimesini increase anlamında kullandım.

clip_image022

Policy’de alarm threshold(eşik değeri) değeri görünüyor. Belirlediğim eşik değerlerine erişildiğinde yine belirlediğim işlemler yapılacak(bir instance eklenecek veya çıkarılacak). Yük testi yaparak auto scaling’i gözleyebilirsiniz.Test ortamımda çalışan bir instance mevcut.

clip_image024

Çalışan intance’ım Amazon Linux Image’den üretilen bir sanal sunucudur. Stress yazılımı ile sisteme yük getirelim ve CPU performansını zorlayalım. Sistemin şuanki yükü aşağıdaki gibidir.

clip_image026

Stress yazılımını çalıştırdım. CPU üzerindeki değişiklik aşağıdaki gibidir:

clip_image028

330 saniyeliğine stress tool’unu çalıştırdım. CPU kullanım orani, auto scaling group’ta seçtiğim eşik değerinin üzerine çıktı. Belirlenen süre boyunca gözlem yapılacak ve ortama yeni EC2 instance’ları eklenecek.

clip_image030

İkinci instance eklendi. Stress testini devam ettiriyorum. Maksimum instance sayısına ulaşacağız.

clip_image032

Bakınız, maksimum sayıya ulaşmışız, yük azalmış ihtiyaç kalmamış, auto scaling bir instance’ımızı yaşam döngüsünü bitiriyor(terminate=inctance’ı silmek)

clip_image034

Performan durumunun gözlemi sonucunda, ihtiyaç kalmadığına karar verildiği için diğer bir instance siliniyor.

Performans durumuna bağlı olarak açılan ve kapanan instance’ların raporunu aşağıdaki menüde gözleyebilirsiniz.

clip_image036

AWS Auto scaling servisini genel hatları ile incelemiş olduk.

Herkese sorunsuz ve neşeli günler dilerim.

Kaynaklar:

http://docs.aws.amazon.com/

https://aydogmusoglu.com

http://www.cyberciti.biz/faq/stress-test-linux-unix-server-with-stress-ng/