Yük Altında Yazılım Tasarımı: Ölçeklenebilirliğin İlkeleri

Yüksek trafikli sistemlerde tasarım ilkeleri: durumsuzluk (stateless), yatay ölçekleme, veri partisyonlama, koordinasyondan kaçınma ve kapasite matematiği — ölçeklenebilirliğin mühendislik temelleri.

Durumsuz servis ve yatay ölçekleme yapılandırmasını gösteren kod editörü penceresi

Ölçeklenebilirlik ne zaman tasarlanır?

Trafik geldiğinde değil, mimari kurulurken. Yüksek trafik altında ayakta kalan sistemlerin ortak özelliği egzotik teknolojiler değil, az sayıda ilkenin baştan ve tavizsiz uygulanmasıdır: durumu doğru yere koymak, yatay ölçeklenebilir kalmak, veriyi bölünebilir tasarlamak ve koordinasyonu en aza indirmek. Bu yazı o ilkeleri, kampanya günü çöken sistemlerden çıkan derslerle birlikte derler.

İlke 1: Durum (state), en pahalı mimari karardır

Bir servisin ölçeklenebilirliği, taşıdığı durumla ters orantılıdır. Uygulama düğümünde tutulan oturum, yerel bellekteki 'geçici' liste, diske yazılan dosya — her biri o düğümü biricikleştirir ve yük dengeleyiciyi yapışkan oturuma (sticky session) mahkûm eder. Kural: uygulama katmanı durumsuz kalır; oturum ve geçici durum paylaşımlı depoya (Redis vb.), kalıcı durum veritabanına, dosyalar nesne depolamaya gider. Durumsuz düğüm; çoğaltılabilir, öldürülebilir ve otomatik ölçeklenebilir düğümdür — modern altyapının tüm otomasyonu bu varsayıma yaslanır.

İlke 2: Yatay ölçekleme varsayılan, dikey ölçekleme istisnadır

Boyut

Dikey (daha büyük makine)

Yatay (daha çok makine)

Üst sınır

Donanımın fiziksel tavanı

Mimari doğruysa pratikte çok yüksek

Maliyet eğrisi

Üst segmentte hızla pahalılaşır

Doğrusala yakın; talebe göre in-çık

Dayanıklılık

Tek makine = tek hata noktası

Düğüm kaybı emilebilir

Ön koşul

Yok — her kod dikey büyür

Durumsuzluk + bölünebilir veri

Dikey ölçekleme geçerli bir araçtır — özellikle veritabanı için ilk hamledir; ama tavanı ve tek-nokta riski bellidir. Uygulama katmanında hedef her zaman 'N kopya çalışabilir' özelliğini korumaktır: tekil zamanlayıcılar (tek düğümde koşması gereken cron), yerel kilitler ve 'sıradaki numarayı bellekte üret' gibi desenler bu özelliği sessizce öldürür — dağıtık kilit/lider seçimi veya işin veritabanı/kuyruk üzerinden koordine edilmesiyle değiştirilmelidir.

İlke 3: Veri, bölünebilir tasarlanır

Uygulama katmanı kolay çoğalır; darboğaz veri katmanında birikir. Erken alınacak iki karar sonrayı belirler: partisyon anahtarı — veriye hangi eksenden erişiliyor (müşteri, sipariş, kiracı)? Tablolar bu anahtar etrafında tasarlanırsa yarın okuma kopyaları, önbellek bölmeleri ve gerekirse sharding doğal gelir; anahtar kesitli sorgular (cross-partition) ise en pahalı işlem olarak istisnalaşır. İkincisi sıcak nokta yönetimi: tek bir sayaç satırı, ardışık artan kimlikle tek bloğa yığılan yazmalar veya 'herkesin güncellediği' tek kayıt, ölçek büyüdükçe kilitlenme üretir — sayaç parçalama (sharded counter), ID üretiminde dağınıklık ve yazma yayma desenleri baştan düşünülür.

İlke 4: Koordinasyon, gizli hız sınırıdır

İki düğümün anlaşmak zorunda olduğu her nokta — dağıtık kilit, senkron çapraz servis çağrısı zinciri, 'hepsi bitince cevap ver' birleşimleri — sistemin o noktadaki en yavaş üyeye kilitlenmesidir. Ölçeklenebilir tasarımın sessiz ilkesi koordinasyondan kaçınmaktır: mümkün olan her yerde iş, bağımsız işlenebilir parçalara bölünür; kesin sıra yerine idempotent işleme, senkron zincir yerine olay/kuyruk, küresel kilit yerine partisyon içi yerel işlem tercih edilir. Amdahl'ın yasasının mimari karşılığı budur: paralelleşemeyen küçük bir bölüm bile toplam ölçeklenmeyi sınırlar.

Kapasite matematiği: kaç düğüm, hangi eşik?

Ölçek planı slogan değil aritmetiktir. Basit ama işleyen model: hedef zirve RPS (geçmiş zirve × büyüme × kampanya çarpanı) ÷ tek düğümün güvenli RPS'i (yük testinde p99 hedefini koruduğu seviyenin ~%60-70'i) = gereken düğüm sayısı; üzerine N+1 yedeklik. Aynı hesap veritabanı bağlantıları, kuyruk tüketici sayısı ve önbellek belleği için tekrarlanır. Bu matematiğin ön koşulu ölçümdür: tek düğüm kapasitesi tahminle değil, üretim benzeri yük testiyle bulunur — ve her büyük sürümde yeniden doğrulanır.

İş etkisi: ölçeklenebilirlik, satın alınan değil korunan bir özelliktir

Bulut size sınırsız makine satar; mimariniz kullanamıyorsa fatura büyür, kapasite büyümez. Bu ilkelerle kurulan sistemin ticari karşılığı somuttur: kampanya trafiği makine ekleyerek karşılanır (panik mühendisliğiyle değil), altyapı maliyeti talebe göre iner-çıkar ve 'şu kadar trafiği taşır mısınız?' sorusuna yük testi raporuyla cevap verilir. Kurumsal satışta bu rapor, referans kadar güçlüdür.

Sık sorulan sorular

Baştan mikroservis mi kurmalıyım?

Hayır — bu ilkelerin hepsi modüler monolitte de uygulanır. Ölçeklenebilirlik servis sayısından değil; durumsuzluk, veri tasarımı ve koordinasyon disiplininden gelir.

Sticky session kullanmak her zaman yanlış mı?

Geçiş dönemi aracı olarak kabul edilebilir; kalıcı mimari olarak düğüm kaybında oturum kaybı ve dengesiz yük demektir. Hedef, oturumun paylaşımlı depoya taşınmasıdır.

Otomatik ölçekleme (autoscaling) her şeyi çözer mi?

Autoscaling, durumsuz ve hızlı açılan düğüm varsayımına yaslanır; ayrıca ani sıçramalarda açılış gecikmesi vardır. Kampanya gibi bilinen zirvelerde ön-ölçekleme (pre-scaling) planlanır.

Ne zaman sharding'e geçmeliyim?

Okuma kopyaları + önbellek + sorgu optimizasyonu tükenmeden değil. Sharding operasyon karmaşıklığı satın alır; partisyon anahtarını baştan doğru seçmişseniz bu geçiş de dilimlenebilir olur.

Yük altında tasarım kontrol listesi

  1. Uygulama katmanı durumsuz; oturum ve dosyalar paylaşımlı katmanda

  2. Her servis N kopya çalışabiliyor; tekil zamanlayıcılar koordine edilmiş

  3. Partisyon anahtarı tanımlı; çapraz-partisyon sorgular istisna

  4. Sıcak nokta analizi yapıldı; sayaç/ID desenleri gözden geçirildi

  5. Senkron çağrı zincirleri haritalandı; koordinasyon noktaları azaltıldı

  6. Tek düğüm kapasitesi yük testiyle ölçüldü; kapasite modeli yazılı

  7. Bilinen zirveler için ön-ölçekleme planı mevcut

SSH Yazılım, yüksek trafikli sistemlerin mimari değerlendirmesini ve ölçeklenebilirlik dönüşümünü uçtan uca yürütür. Sisteminizin ölçek haritasını birlikte çıkaralım.