Load Balancing(Yük Dengeleme) ve Load Balancer(Yük Dengeleyici) Nedir?
Bu içeriğimizde, bundan sonraki içeriklerimiz için teorik temel olarak kullanacağımız Load Balancing(Yük Dengeleme) ve Load Balancer(Yük Dengeleyici) üzerine duruyor olacağız. Load Balancing’in ne olduğu, ne amaçla kullanıldığı, ne tarz algoritmaları olduğu vs. gibi sorular eşliğinde hasbihalde bulunacak ardından sonraki içeriklerimizde pratiksel olarak Load Balancer’ı farklı teknolojiler eşliğinde tematik olarak inceliyor olacağız.
Load Balancing Nedir?
Ben yoğunum ablacım, arkadaş ilgilensin.
Load Balancer
Yük dengeleme, sunucu mimarilerindeki sınırlı sistem kaynaklarına rağmen artan yükün/trafiğin/isteğin karşılanabilmesi için sunucu üzerinde mevcut kaynakların donanımsal olarak arttırılmasına nazaran sisteme aynı özellikte yeni sunucuların dahil olmasına ve bu birden fazla sunucu arasında kaynakların orantılı bir şekilde kullanılabileceği vaziyette trafiğin dağıtılmasına Load Balancing denmektedir.
Geleneksel yöntemlerde, gelen ve sistem kaynaklarını tüketen(ya da bir başka deyişle aşan) yoğun trafik/istek durumlarına karşı bir önceki paragrafta değinildiği üzere önlem amaçlı donanımsal kaynak arttırımı yöntemi tercih edilmekteydi. Bu yönteme halk dilinde çoğaltmak, yükseltmek yahut arttırmak anlamına gelen Scale-Up ya da bir başka deyişle Vertical Scaling(Dikey Ölçeklendirme) denmektedir. Bu dikey ölçeklendirme neticesinde avantaj ve dezavantajlar edinilmekteydi:
SCALE UP | |
---|---|
Avantajları | Dezavantajları |
Var olan sunucu üzerinde geliştirme yapıldığı için sunucu sayısı artmayacaktır. Haliyle bu durum enerji tasarrufunu getirecektir. | Sistemin yeri gelecek CPU, yeri gelecek RAM vs. gibi donanımsal ihtiyaçları olacağından dolayı maliyeti fazladır. |
Yukarıdaki sebepten dolayı sunucu sayısı sabit olacağından dolayı soğutma maliyetide daha az olacaktır. | Donanımsal arızalardan dolayı kesinti yaşanma ihtimali oldukça yüksektir. Ve bu durum tehlikeli bir risk teşkil etmektedir. Load balancing özellikle bu riske karşı verimli bir çözüm olarak sunulabilmektedir. |
Teknik açıdan kolaydır. | Upgrade/yükseltme zorluğu vardır. |
Lisans maliyeti azdır. |
İşte bu geleneksel yönteme nazaran artık günümüzde sistemdeki mevcut sunucunun niceliksel olarak arttırılması tercih edilmektedir. Bu yönteme de Horizontal Scaling(Yatay Ölçeklendirme) nispetinde Scale-Out denmektedir.
Peki, sistemdeki sunucu sayısını niceliksel olarak arttırmak neye yaramaktadır?
Burada amacımız, gelen istek trafiğinin orantılı bir şekilde bu sunucular arasında paylaşımını sağlayarak yoğunluğu ölçeklendirebilmek ve böylece tek bir uygulama instance’ına tüm sorumluluğu vermeksizin yükü dengelemektir. Bu günümüzde birçok uygulamadan dolayı ihtiyacını hissettiğimiz bir durumdur. Farz-ı misal vermek gerekirse, yüzbinlerce kişinin eşzamanlı olarak istek yaptığı bir web uygulamasında bu isteklere karşılık doğru ve hızlıca gerekli hizmeti verebilmek için sunucu kaynaklarımızın buna elverişli olması gerekmektedir. Her bir istekte metin, resim, video veya uygulama verileri hızlı ve güvenilir bir şekilde istemcilere cevap olarak sunulabilmelidir. Bu şekilde yüksek hacimli trafiği karşılayabilmek için en uygun ve az maliyetli yöntem doğru bir şekilde ölçeklendirmedir. Bu durumda da aynı işi yapacak birden fazla sunucu eklemeyi gerektirir.
İşte bu şekilde birbirinin tekrarı olan sunucularda ayağa kaldırılmış birden fazla uygulama instance’ının gelen istek yoğunluğunu paylaşarak yükü dengelemesine Load Balancing denmektedir.
Load Balancer Nedir?
Load balancer’ı yol kavşaklarında duran trafik polisleri olarak düşünebilirsiniz. Nasıl ki trafik polisi, yolda araç yoğunluğuna göre geçiş üstünlüğünün kararını veriyor benzer mantıkla Load Balancer’da uygulamalarımıza gelen istekleri en uygun sunucudaki instance’a yönlendirmenin kararını vermektedir. Yani load balancing işini yapan yazılımlara yahut serverlara Load Balancer denilmektedir. Böylece yoğunluk her ne kadar yüksek olursa olsun, tüm ağırlık tek bir instance tarafından göğüslenmek mecburiyetinde kalınmamakta, ihtiyaç olan ölçeklendirme sağlanmış bulunmaktadır.
Load balancing için birçok load balancer tool’u mevcuttur. Bunlardan genel geçer olarak ilk beşte sayabileceğimiz;
tool’larıdır. Ayrıca Ocelot kütüphanesinin de kendine ait bir load balancing hizmeti mevcuttur. Bizler sonraki içeriklerimizde hem NGINX’de hem de Ocelot kütüphanesinde load balancing işleminin nasıl gerçekleştirildiğini ayrı ayrı ele alıyor olacağız.
Ayrıca load balancer’lar sadece gelen trafiği sunuculara dağıtmakla yetinmezler ve kendilerine bağlı bulunan sunucuları devamlı şekilde kontrol ederek isteklere yanıt vermeyen problemli sunuculara trafik yönlendirmesi yapmazlar! Yani bir nevi uygunluk kontrolü yaparak her gelen isteği cevaplayabilecek şekilde sağlıklı sunuculara yönlendirir ve böylece sunucu kaynaklı problem yaşanması engellenmiş olur. Ayrıca herhangi bir sunucu sıkıntısı istemcilere fark ettirilmeden süreç sağlıklı bir şekilde seyreder. Bu durumda olası istek kayıplarını ortadan kaldırmak için oldukça kritik arz etmektedir.
Haliyle load balancer için aşağıdaki işlevleri yerine getirir diyebiliriz :
- İstemcilerden gelen istekleri, mevcudiyetteki sunuculara verimli bir şekilde dağıtmaktadır,
- Yalnızca çevrimiçi olan sunuculara yönlendirme sağlayacağından dolayı kullanılabilirlik ve güvenilirlik sağlar,
- Gerektiğinde sunucu ekleme yahut çıkarma esnekliği sağlar.
Load Balancing Algoritmaları Nelerdir?
Bir load balancing operasyonu, gelen isteğin hangi şartlarda hangi sunucuya iletileceğini Round Robin, Least Connection ve Source (IP Hash) olmak üzere üç temel algoritma eşliğinde belirlemektedir. Bu algoritmaların ne olduğunu ele alırsak eğer :
- Round Robin
Gelen istekleri sunuculara sırasıyla dağıtan bir algoritmadır. Load balancer, dağıtım işlemi esnasında isteğin gönderildiği sunucuyu tutmakta ve sonraki istekleri itere ederek devam etmektedir. Sonuncu sunucuya gelindiği taktirde tekrardan başa döner ve istekleri aynı sırayla yönlendirmeye devam eder.
- Least Connection
Load balancer, gelen isteği en az yoğunlukta ve aktif olan sunucuya yönlendirir. Haliyle her sunucunun göreceli işlem kapasitesi mevcut olduğundan dolayı bu algoritma, istek neticesinde ağır ve uzun operasyonların yapılacağı durumlar için önerilmektedir.
- Source (IP Hash)
Source algoritması, gelen isteğin IP değerine göre hangi sunucuda işleneceğini belirlememizi sağlamaktadır. Böylece her sunucu aynı IP’den gelen istekleri işleyecektir. Amaç sadece salt bölmedir. Genellikle istemcilerin öngörülebilen işlevsel hacimlerini sunuculara dağıtabilmek ve böylece her bir sunucuda farklı işlevleri icra edebilmek için tercih edilir.
Bu temel algoritmaların dışında kullanılan load balancer türüne göre farklı algoritmalarında mevcudiyeti söz konusu olabilmekte ve hatta özelleştirilmiş algoritmalar dahi türetilebilmektedir.
Load Balancing ile Hangi Trafik Türleri Dengelenebilir?
Load balancer’lar ile HTTP, HTTPS, TCP ve UDP olmak üzere dört farklı protokolden gelen trafik türü için dengeleme kuralları oluşturulabilmektedir.
HTTP | HTTPS | TCP | UDP |
---|---|---|---|
Load balancer; HTTP protokolünden gelen istekleri ilgili sunuculara yönlendirirken, orjinal isteğe dair bilgilere erişebilmek için ilgili request’in header’ına ‘X-Forwarded-For’, ‘X-Forwarded-Proto’ ve ‘X-Forwarded-Port’ değerlerini yerleştirerek yönlendirir. | HTTP ile aynı süreç işlemekte ve belirtilen anahtar değerler eşliğinde yönlendirme yapılmaktadır. Aradaki tek fark HTTPS’de ki şifreleme süreçleridir. Bu şifreleme süreci iki farklı yöntemle sağlanmaktadır.
1. yöntem; şifreleme SSL ile backend’e kadar korunur. SSL’in load balancer üzerinde kurguladığı bu işleme SSL Offload denmektedir. |
HTTP ve HTTPS’e nazaran TCP protokolünden gelen isteklerde load balancing işlemine tabii tutulabilmektedir. | Son zamanlarda bazı load balancer yazılımlarında UDP protokolü için load balancing desteği eklenmiştir. |
Uygunluk Kontrolleri(Health Checks)
Load balancing uygulanan sistemlerde gelen isteklerin yönlendirilebilmesi için ilgili sunucunun bu isteği karşılayabilecek seviyede sağlıklı olması istenmektedir. Aksi taktirde sunucu listeden kaldırılır ve mevcut hata onarılıp, ortadan kaldırılıncaya ve sonrasında tekrar yapılacak uygunluk kontrolüne cevap verinceye kadar trafik yönlendirmelerinde kullanılmayacaktır.
Neden Load Balancing Kullanılmalıdır?
Load balancing, elimizdeki uygulamanın erişilebilirliğini üst seviyeye çıkarılabilmekte ve olası sunucu kesintilerinde istekleri diğer sunuculara aktararak sunucu sürekliliği de sağlayabilmektedir. Ayrıca dönemsel olarak yaşanabilirliği muhtemel olan trafik artışlarında olabilecek erişim kesintileri yahut gecikmeler için de kullanıcı deneyimi açısından gelişmeler göstermektedir. Tabi tüm bunların yanında kullanıcılardan gelen istek neticesinde yapılacak işin yoğunluğuna göre en uygun sunucularda icraatın sergilenmesi uygulama optimizasyonu açısından oldukça hızlı ve performanslı bir süreç sağlayacaktır.
Genellikle load balancing sürecinde uygulamalardaki kullanıcı session bilgileri sunucular arasında aktarılmadığı için session düşmesi yaşanmaktadır. Bu duruma istinaden session bilgilerinin ortak bir sunucuda yahut veritabanında tutulması idealdir.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
Merhaba, peki bu sistemi nasıl kuracağımıza dair eğitim serisi gelir mi?
Anlatım gerçekten süper olmuş, sizi tebrik ediyorum 👏
Teşekkürler.
Faydalandıysanız ne mutlu.
Sevgiler.
“ben yoğunum ablacım arkadaş ilgilensin” neşem yerine geldi qpowrkqwporkaisç
🙂
paylaşım için teşekkürler. çok faydalı.