Tek bir sunucunun kaldırabileceği yükün bir sınırı vardır. Trafik bu sınırı zorladığında iki seçeneğiniz olur: sunucuyu büyütmek ya da yükü birden fazla sunucuya dağıtmak. İkinci yol, hem daha esnek hem de daha güvenilirdir; işte yük dengeleyici (load balancer) bu dağıtımı yöneten bileşendir. Kullanıcıdan gelen her isteği alır ve arkadaki sunuculardan uygun olana yönlendirir. Bu yazıda yük dengelemenin nasıl çalıştığını, hangi algoritmaları kullandığını ve pratikte hangi tuzaklara dikkat edilmesi gerektiğini ele alıyoruz.

Yük Dengeleyici Ne İşe Yarar?
Bir yük dengeleyici, istemci ile sunucu havuzu arasında duran bir trafik yöneticisidir. Kullanıcı tek bir adrese bağlanır; perde arkasında bu isteği hangi sunucunun karşılayacağını dengeleyici karar verir. Bu yapı iki temel fayda sağlar:
- Ölçeklenebilirlik: Trafik arttıkça havuza yeni sunucu ekleyerek kapasiteyi büyütürsünüz.
- Yüksek erişilebilirlik (high availability): Bir sunucu arızalanırsa dengeleyici trafiği sağlam olanlara yönlendirir; kullanıcı kesinti yaşamaz.
İyi bir yük dengeleyici sessiz bir kahramandır: işini doğru yaptığında kimse varlığını fark etmez; bir sunucu çökse bile kullanıcı hiçbir şey hissetmez.
Yük Dengeleme Algoritmaları
Dengeleyicinin hangi isteği hangi sunucuya göndereceğine karar vermesi için bir stratejiye ihtiyacı vardır. En yaygın algoritmalar şunlardır:
Round Robin (Sırayla Dağıtım)
İstekler sunuculara sırayla dağıtılır: birinci istek A'ya, ikinci B'ye, üçüncü C'ye, dördüncü tekrar A'ya. Basit ve öngörülebilirdir. Sunucuların kapasitesi eşit ve istekler benzer ağırlıkta olduğunda iyi çalışır.
Least Connections (En Az Bağlantı)
Yeni istek, o an en az aktif bağlantıya sahip sunucuya gönderilir. İsteklerin işlenme süresi değişkense round robin'den daha adildir; çünkü uzun süren işlemlerle dolu bir sunucuya yeni yük bindirmez.
Weighted (Ağırlıklı Dağıtım)
Sunuculara kapasitelerine göre ağırlık verilir. Güçlü bir sunucu, zayıf olandan daha fazla istek alır. Farklı donanımların bir arada bulunduğu heterojen ortamlarda kullanışlıdır.
IP Hash
İstemcinin IP adresine göre bir hesaplama yapılır ve aynı istemci her zaman aynı sunucuya yönlendirilir. Oturum tutarlılığı gereken durumlarda basit bir çözümdür, ancak dağılımı her zaman dengeli olmayabilir.
Sağlık Kontrolleri (Health Checks)
Yük dengeleyicinin en kritik görevlerinden biri, arkadaki sunucuların ayakta olup olmadığını sürekli denetlemektir. Bunu düzenli aralıklarla gönderdiği sağlık kontrolü istekleriyle yapar. Bir sunucu yanıt vermezse dengeleyici onu havuzdan çıkarır ve trafiği yalnızca sağlam sunuculara yönlendirir. Sunucu tekrar sağlıklı hale geldiğinde otomatik olarak havuza geri alınır.
# Nginx örneği: iki sunuculu havuz ve yük dengeleme
upstream uygulama {
least_conn;
server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://uygulama;
proxy_set_header Host $host;
}
}
Bu yapı sayesinde, bir sunucu üç kez üst üste hata verirse otuz saniye boyunca havuzdan çıkarılır. Kullanıcı bu geçişi fark etmez; işte yüksek erişilebilirliğin temeli budur.

Oturum Yönetimi: Sinsi Bir Tuzak
Yük dengelemenin en sık gözden kaçan sorunu oturum yönetimidir. Kullanıcı ilk isteğinde A sunucusuna, ikincisinde B sunucusuna düşerse ve oturum verisi A'nın belleğinde tutuluyorsa, kullanıcı aniden çıkış yapmış gibi görünür. Bu soruna iki temel çözüm vardır:
- Sticky session (yapışkan oturum): Dengeleyici, bir kullanıcıyı hep aynı sunucuya yönlendirir. Basittir ama o sunucu düşerse oturum kaybolur ve yük dağılımı dengesizleşebilir.
- Paylaşılan oturum deposu: Oturumlar Redis gibi merkezî bir depoda tutulur; hangi sunucuya düşerse düşsün kullanıcı oturumunu bulur. Daha sağlam ve ölçeklenebilir yaklaşımdır.
Doğru yaklaşım neredeyse her zaman ikincisidir. Uygulamayı durumsuz (stateless) tasarlayıp oturumu dışarı almak, yük dengelemeyi sorunsuz kılar. Berasoft'ta geliştirdiğimiz projelerde altyapıyı baştan bu prensiple kurarız; böylece büyüme geldiğinde sunucu eklemek bir sorun değil, birkaç dakikalık bir işlem olur.
Katman 4 mü, Katman 7 mi?
Yük dengeleyiciler iki seviyede çalışabilir. Katman 4 (transport) dengeleyiciler, içeriğe bakmadan yalnızca IP ve port bilgisine göre yönlendirir; çok hızlıdır. Katman 7 (uygulama) dengeleyiciler ise HTTP içeriğini okuyabilir; URL'ye, başlıklara veya çereze göre akıllı yönlendirme yapabilir. Örneğin "/api" ile başlayan istekleri bir havuza, "/blog" isteklerini başka bir havuza gönderebilirsiniz. Bu esneklik, modern mikroservis mimarilerinde çok değerlidir.
Sonuç
Yük dengeleme, büyüyen bir uygulamanın hem hızını hem de kesintisizliğini güvence altına almanın temel aracıdır. Doğru algoritma seçimi, düzenli sağlık kontrolleri ve en önemlisi oturumların merkezî yönetimi; bu üçlü, sistemin baskı altında bile ayakta kalmasını sağlar. Yük dengeleyici tek başına sihir yapmaz; asıl mesele, uygulamayı ona uygun, yani durumsuz tasarlamaktır. Bu temel doğru kurulduğunda, trafik ne kadar artarsa artsın kapasiteyi büyütmek sunucu havuzuna bir satır eklemek kadar basit hale gelir.
Bir sonraki projeniz için hazır mısınız?
Okuduklarınızı işinize uygulamak veya dijital dönüşümünüzü konuşmak isterseniz, ekibimiz bir mesaj uzağınızda.

Yorum Yap