Load Balancing Nedir? Yük Dengeleme Rehberi
Tek bir sunucu tüm trafiği kaldıramıyor mu? Bir sunucu çökünce tüm sistem mi duruyor? Load Balancer ile trafiği birden fazla sunucuya dağıtın, yüksek erişilebilirlik ve performans kazanın.
Load Balancing Tanımı
Load Balancing, gelen ağ trafiğini birden fazla sunucu arasında dağıtan bir tekniktir. Tek bir sunucunun darboğaz olmasını engeller, yüksek erişilebilirlik (high availability) sağlar.
┌─ Server 1 ──→ App
Client ──→ Load ├─ Server 2 ──→ App
Balancer├─ Server 3 ──→ App
└─ Server 4 ──→ App
Load Balancing Algoritmaları
1. Round Robin
İstekleri sırayla dağıtır. En basit yöntem.
İstek 1 → Server 1
İstek 2 → Server 2
İstek 3 → Server 3
İstek 4 → Server 1 (başa döner)
2. Weighted Round Robin
Güçlü sunuculara daha fazla trafik yönlendirir.
Server 1 (weight: 3) → İstek 1, 2, 3
Server 2 (weight: 1) → İstek 4
Server 3 (weight: 2) → İstek 5, 6
3. Least Connections
En az aktif bağlantıya sahip sunucuya yönlendirir.
4. IP Hash
Aynı IP adresini her zaman aynı sunucuya yönlendirir (sticky session).
5. Least Response Time
En hızlı yanıt veren sunucuya yönlendirir.
Nginx ile Load Balancing
upstream backend {
least_conn;
server 10.0.0.1:3000 weight=3;
server 10.0.0.2:3000 weight=2;
server 10.0.0.3:3000;
server 10.0.0.4:3000 backup;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Health Check
Sağlıklı olmayan sunucuları otomatik olarak devre dışı bırakma:
upstream backend {
server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
}
Load Balancer Katmanları
| Katman | Çalışma Seviyesi | Bilgi | |--------|-----------------|-------| | L4 | Transport (TCP/UDP) | IP + Port bazında yönlendirme, hızlı | | L7 | Application (HTTP) | URL, header, cookie bazında yönlendirme |
L7 Yönlendirme Örneği
location /api/ {
proxy_pass http://api-servers;
}
location /static/ {
proxy_pass http://cdn-servers;
}
location /ws/ {
proxy_pass http://websocket-servers;
proxy_http_version 1.1;
proxy_set_header Upgrade $upgrade;
}
Load Balancer Araçları
| Araç | Tür | Avantaj | |------|-----|---------| | Nginx | L4/L7 | Performans, yaygınlık | | HAProxy | L4/L7 | TCP desteği, güvenilirlik | | AWS ALB | L7 | AWS entegrasyonu | | GCP LB | L4/L7 | Global, anycast | | Traefik | L7 | Container-native, auto-discovery |
SSL Termination
HTTPS şifresini load balancer'da çözerek backend sunucuları yükten kurtarma:
Client ──HTTPS──→ Load Balancer ──HTTP──→ Backend
(SSL burada çözülür)
Best Practices
- Health check zorunlu — Sağlıksız sunucuları otomatik çıkarın
- Graceful shutdown — Sunucu kapanırken mevcut bağlantıları tamamlasın
- Session yönetimi — Sticky session yerine shared session (Redis) tercih edin
- SSL Termination — TLS'i load balancer'da sonlandırın
- Monitoring — Her sunucunun yanıt süresini ve hata oranını izleyin
- Auto-scaling — Trafik artışında otomatik sunucu ekleme
Sonuç
Load Balancing, ölçeklenebilir ve yüksek erişilebilir sistemlerin temelidir. Doğru algoritma ve yapılandırma ile uygulamanız binlerce eş zamanlı isteği sorunsuz karşılayabilir.
Load balancing ve dağıtık sistem kavramlarını LabLudus platformunda öğrenin.