Horizontal Scaling (Node sayısının arttırımı):
Kullanıcılardan gelen isteklerin, farklı uygulama sunucularına yönlendirilmesinin var olan sunucuların kapasitesini arttırmaktan daha kolay olduğu durumlarda tercih edilmektedir. Özellikle cloud ortamlarda kolaylıkla gerçekleştirilebilmektedir. Ayrıca vertical scaling ile erişilebilecek maksimum bir kapasite olduğu için, bir noktadan sonra horizontal scaling yapılması zorunlu hale gelmektedir. Ayrıca, düşük maliyetli sunucular ile kapasitenin arttırımı ve availability açısından da avantaj sağlamaktadır. Ancak bu tarz bir yaklaşım için, uygulamanın uygun bir mimari ile geliştirilmiş olması gerekmektedir.
Horizontal Scale:
Scaling Performans Sorunlarını Çözebilir mi?
Temel olarak en basit çözüm, mevcut sunucu donanımının arttırılması (vertical scaling) ile kapasitenin yükseltilmesidir. Ancak bu yöntem belirli bir noktadan sonra oldukça pahalıya mal olmaya başlayacağı için, uygun bir mimari ile desteklenen yeni nodelara ihtiyaç duyulmaktadır.
Ancak çoğu zaman performans sorunları scale ile ilişkili olmamaktadır. Özellikle, yeterince yük altındaki iken sistem kaynaklarının tam olarak kullanılamaması senkronizasyon sorunlarına güzel bir örnek olmaktadır. Örneğin, ortak kullanımda olan bir I/O yada veri bu tarz sorunlara güzel birer örnek olmaktadır. Bu durumda, yeni donanım/kaynak eklenmesi sistemin performansını/kapasitesini maalesef ki arttıramayacaktır.
Vaka Analizi: Stok güncelleme işi yapan bir yazılım düşünelim. Eğer ki tüm stoğun eş zamanlı ve tutarlı olarak güncellenmesi isteniyor ise, herhangi bir anda en fazla bir process bu update işlemi için çalışabilecektir (syncronization). Bu işlemin süresi, örneğin 200ms, uygulamanın performans limitlerini ortaya koyacaktır. Eklenecek kaynak ve donanımdan bağımsız, uygulama performans limiti saniyede beş işlem olacaktır. Eğer daha yüksek bir throughput değerine ulaşılmak isteniyor ise, scaling (donanım yada sunucu eklenmesi) yerine toplam performansın iyileştirilmesi gerekmektedir. Bu durumda, sql yada uygulama kodlarının optimizasyonu, hatta gerçek zamanlı tutarlılıktan vazgeçilmesi dahi gerekli olabilmektedir.
Referanslar:
Improving .Net Application Scalability – Architecture and Design Review of a .Net Application for Performance and Scalability, Microsoft
Dynatrace: Java Enterprise Performance Book
Oracle Java Tutorials: Syncronized Methods