Scaling (Ölçekleme)
Scaling, sistemin artan:
- Kullanıcı sayısını
- İstek yükünü
- Veri hacmini
karşılayabilecek şekilde büyütülmesidir.
Amaç:
- Sistem çökmesin
- Response time artmasın
- Performans stabil kalsın
- Kullanıcı deneyimi bozulmasın
Scaling iki temel şekilde yapılır:
- Vertical Scaling (Scale Up)
- Horizontal Scaling (Scale Out)
Horizontal Scaling (Scale Out)
Horizontal scaling, yeni sunucular ekleyerek yükü dağıtmaktır.
Tek güçlü makine yerine, aynı işi yapan birden fazla makine kullanılır.
Client
↓
Load Balancer
↓
App1 App2 App3 App4
Load balancer trafiği dağıtır.
Nasıl Yapılır?
- Yeni sunucu ekleme
- Load balancer kullanma
- Container orchestration (Kubernetes)
- Distributed sistem tasarımı
- Stateless uygulama yazımı
Avantajları
- Teorik olarak sınırsız ölçeklenebilir
- High availability sağlar
- Fault tolerance yüksektir
- Downtime olmadan büyüyebilir
- Coğrafi dağıtım yapılabilir
Bir sunucu düşerse diğerleri çalışmaya devam eder.
Dezavantajları
- Mimarisi karmaşıktır
- Veri tutarlılığı zorlaşır
- Network latency vardır
- Session yönetimi zorlaşır
- Monitoring ve debugging zorlaşır
Uygulama dağıtık sistem için tasarlanmış olmalıdır.
Ne Tür Sistemlerde Kullanılır?
- Web uygulamaları
- Microservices
- Cloud-native sistemler
- Stateless API servisleri
- Yüksek trafikli sistemler
Vertical Scaling (Scale Up)
Vertical scaling, mevcut sunucuyu güçlendirmektir.
Örnek:
- Daha fazla RAM
- Daha güçlü CPU
- Daha hızlı disk
- Daha yüksek bandwidth
Örnek senaryo:
EC2 t3.micro → t3.large
Tek makine güçlenir.
Avantajları
- Mimari değişiklik gerekmez
- Yönetimi basittir
- Network latency yoktur
- Veri tutarlılığı sorunu yoktur
- Küçük sistemlerde pratiktir
Dezavantajları
- Fiziksel sınır vardır
- Single Point of Failure oluşturur
- Downtime gerektirebilir
- Maliyet üstel artabilir
- Belirli noktadan sonra verimsizleşir
Tek makine çökerse sistem tamamen durur.
Vertical vs Horizontal
| Özellik | Vertical Scaling | Horizontal Scaling |
|---|---|---|
| Sunucu sayısı | 1 | 1 → N |
| Kurulum | Basit | Karmaşık |
| Büyüme sınırı | Fiziksel sınırlı | Teorik olarak yüksek |
| Fault tolerance | Yok | Var |
| Cloud uyumu | Düşük | Yüksek |
| Deploy | Downtime olabilir | Zero-downtime mümkün |
| Uzun vadeli maliyet | Yüksek olabilir | Daha verimli |
Gerçek Hayatta Strateji
Genelde şu yol izlenir:
- Vertical scaling ile başlanır
- Donanım sınırına yaklaşılır
- Uygulama stateless yapılır
- Horizontal scaling’e geçilir
App server’lar genellikle horizontal ölçeklenir. Veritabanları çoğu zaman vertical ölçeklenir.
Büyük sistemlerde:
- App layer → Horizontal
- Cache layer → Horizontal
- DB → Önce Vertical, sonra replication
Kritik Noktalar
Horizontal scaling için:
- Stateless uygulama gerekir
- Session dışarı taşınmalı (Redis gibi)
- Shared filesystem kullanılmamalı
- Idempotent endpoint tasarlanmalı
- Distributed lock düşünülmeli
Startup vs Enterprise
Startup / Küçük Sistem:
- Vertical scaling yeterlidir
- Operasyonel maliyet düşüktür
Büyük Trafikli Sistem:
- Horizontal scaling zorunludur
- Load balancer şarttır
- Distributed mimari gerekir
Netflix, Google gibi sistemler sadece horizontal ile ayakta kalır.