Back to Blog

Horizontal & Vertical Scaling

February 2, 20263 min
System DesignScalabilityDistributed Systems
Horizontal & Vertical Scaling

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

ÖzellikVertical ScalingHorizontal Scaling
Sunucu sayısı11 → N
KurulumBasitKarmaşık
Büyüme sınırıFiziksel sınırlıTeorik olarak yüksek
Fault toleranceYokVar
Cloud uyumuDüşükYüksek
DeployDowntime olabilirZero-downtime mümkün
Uzun vadeli maliyetYüksek olabilirDaha verimli

Gerçek Hayatta Strateji

Genelde şu yol izlenir:

  1. Vertical scaling ile başlanır
  2. Donanım sınırına yaklaşılır
  3. Uygulama stateless yapılır
  4. 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.