Dağıtık Sistemler Kapsamlı Rehberi

1 Ağustos 2026 · netologist · 35 dakika, 7247 kelime ·

Temel Kavramlar, Desenler (Pattern) ve En İyi Pratikler

Güvenilir, ölçeklenebilir dağıtık sistemler inşa etmek için kullanılan temel teori ve sahada kanıtlanmış mühendislik desenlerini derinlemesine inceleyen bir referans rehber.


İçindekiler

  1. CAP Teoremi
  2. Tutarlılık (Consistency)
  3. Nihai Tutarlılık (Eventual Consistency)
  4. Güçlü Tutarlılık (Strong Consistency)
  5. Replikasyon (Replication)
  6. Sharding
  7. Partitioning (Bölümleme)
  8. Lider Seçimi (Leader Election)
  9. Dağıtık Kilit (Distributed Lock)
  10. Konsensüs (Consensus)
  11. Quorum
  12. Hata Toleransı (Fault Tolerance)
  13. Hata Tespiti (Failure Detection)
  14. İdempotentlik (Idempotency)
  15. Retry (Yeniden Deneme)
  16. Exponential Backoff (Üstel Geri Çekilme)
  17. Circuit Breaker (Devre Kesici)
  18. Timeout (Zaman Aşımı)
  19. Rate Limiting (Hız Sınırlama)
  20. Backpressure (Geri Basınç)
  21. Graceful Shutdown (Zarif Kapanış)
  22. Disaster Recovery (Felaket Kurtarma)

1. CAP Teoremi

Tanım

CAP teoremi (Eric Brewer, 2000), bir ağ bölünmesi (network partition) yaşandığında dağıtık bir veri sisteminin aşağıdaki üç özellikten aynı anda sadece ikisini garanti edebileceğini söyler:

Gerçek Trade-off

Gerçek dünyadaki her dağıtık sistemde ağ bölünmeleri mutlaka yaşanacağı için P, opsiyonel değildir — buna göre tasarım yapmak zorundasınız. Asıl seçim, bölünme sırasında C ile A arasındadır:

PACELC Genişletmesi

CAP yalnızca bölünme sırasındaki davranışı tanımlar. PACELC (Daniel Abadi) bunu genişletir: “eğer bir bölünme (Partition) varsa A veya C seç; aksi halde (Else), Latency (gecikme) veya Consistency (tutarlılık) seç.” Bu, ağ sağlıklıyken bile var olan gecikme-tutarlılık trade-off’unu yakalar.

En İyi Pratikler

Yaygın Hatalar


2. Tutarlılık (Consistency)

Tanım

Tutarlılık, verinin replikalar/node’lar arasında ne kadar “taze” ve “üzerinde anlaşılmış” göründüğünü tanımlar. İkili (boolean) değil, bir spektrum üzerindedir.

Tutarlılık Modelleri (en zayıftan en güçlüye)

  1. Nihai Tutarlılık (Eventual Consistency) — yeni yazma olmadığında ve yeterli zaman geçtiğinde replikalar yakınsar.
  2. Nedensel Tutarlılık (Causal Consistency) — birbiriyle nedensel ilişkili işlemler tüm node’lar tarafından aynı sırada görülür; ilişkisiz (“eşzamanlı”) işlemler farklı sıralarda görülebilir.
  3. Read-Your-Writes — bir istemci her zaman kendi önceki yazdıklarını görür.
  4. Monotonic Reads — bir istemci bir değeri gördükten sonra, sonraki okumalar asla daha eski bir değer döndürmez.
  5. Session Consistency — read-your-writes + monotonic reads’in bir oturum kapsamında birleşimi.
  6. Sequential Consistency — tüm işlemler, her istemcinin program sırasıyla tutarlı bir sıralı düzende gerçekleşiyormuş gibi görünür (ama mutlaka gerçek zamanlı sırayla değil).
  7. Linearizability (Doğrusallaştırılabilirlik / Güçlü Tutarlılık) — işlemler, çağrı ile yanıt arasındaki bir anda anlık gerçekleşmiş gibi görünür ve tüm istemciler arasında gerçek zamanlı sıralamayla tutarlıdır.

En İyi Pratikler

Yaygın Hatalar


3. Nihai Tutarlılık (Eventual Consistency)

Tanım

Belirli bir veri öğesine yeni güncelleme yapılmadığı sürece, tüm replikaların eninde sonunda aynı değere yakınsayacağı bir tutarlılık modeli. Modelin kendisi bir eskime (staleness) üst sınırı garanti etmez (pratikte genelde saniyenin altından birkaç saniyeye kadar sürer).

Bunu Sağlayan Mekanizmalar

Çakışma Çözümleme Stratejileri

En İyi Pratikler

Yaygın Hatalar


4. Güçlü Tutarlılık (Strong Consistency)

Tanım

Herhangi bir okumanın, sanki verinin tek bir kopyası varmış gibi (linearizability) en son yazılan veriyi döndüreceğini, ya da tüm node’ların işlemleri aynı global sırada göreceğini (sequential consistency, biraz daha zayıf ama ilişkili bir garanti) garanti eder.

Nasıl Sağlanır

Maliyeti

En İyi Pratikler

Yaygın Hatalar


5. Replikasyon (Replication)

Tanım

Erişilebilirliği, dayanıklılığı, hata toleransını ve okuma ölçeklenebilirliğini artırmak için aynı verinin birden fazla kopyasını farklı node’larda tutmak.

Replikasyon Topolojileri

Replikasyon Modları

En İyi Pratikler

Yaygın Hatalar


6. Sharding

Tanım

Büyük bir veri setini yatay olarak birden fazla bağımsız veritabanı örneğine/node’a (“shard”) bölmek; her shard verinin ayrık bir alt kümesini tutar. Öncelikle bir ölçekleme tekniğidir (yazma verimi, depolama boyutu), partitioning’in daha geniş organizasyonel anlamının aksine (ayrım için bkz. Bölüm 7).

Sharding Stratejileri

En İyi Pratikler

Yaygın Hatalar


7. Partitioning (Bölümleme)

Tanım

Veriyi veya iş yükünü ayrı segmentlere bölmenin genel kavramı. Bu rehberde şu ayrımı yapıyoruz:

Partition’lar tek bir node içinde (örn. sorgu performansı/bakım için tarihe göre PostgreSQL tablo partition’ı) veya node’lar arasında (broker’lar arasında dağıtılmış Kafka partition’ları) var olabilir.

Türleri

Kafka Tarzı Partitioning (log-partitioning)

En İyi Pratikler

Yaygın Hatalar


8. Lider Seçimi (Leader Election)

Tanım

Dağıtık sistemdeki node’ların, çakışan eşzamanlı kararları önlemek için belirli bir fonksiyon (yazma kabul etme, olayları sıralama, iş atama) için tek bir koordinatör/lider node üzerinde anlaşma sürecidir.

Algoritmalar ve Mekanizmalar

En İyi Pratikler

Yaygın Hatalar


9. Dağıtık Kilit (Distributed Lock)

Tanım

Bellek paylaşmayan süreçler/node’lar arasında karşılıklı dışlama (mutual exclusion) sağlayan bir mekanizma — kritik bölgeye/kaynağa küme genelinde aynı anda yalnızca bir sahip erişebilir.

Uygulama Yaklaşımları

Kritik Güvenlik Gereksinimleri

  1. Karşılıklı dışlama — bir seferde yalnızca bir istemci kilidi tutar.
  2. Deadlock’tan bağımsızlık — sahip çökse bile kilit eninde sonunda serbest bırakılır (TTL/lease süresi dolması).
  3. Fencing — her kilit edinme işlemi tek yönlü artan bir token döner; korunan kaynak, o istemci hâlâ kilidi tuttuğunu “sansa” bile eski (daha düşük) bir token’dan gelen işlemleri reddetmelidir.

En İyi Pratikler

Yaygın Hatalar


10. Konsensüs (Consensus)

Tanım

Hatalara ve ağ güvenilirsizliğine rağmen bir dizi dağıtık node’un aşağıdakileri sağlayarak tek bir değer (veya işlemlerin tek bir sıralı dizisi) üzerinde anlaşmasını sağlama problemi:

Başlıca Algoritmalar

FLP İmkânsızlığı

Fischer-Lynch-Paterson (1985) sonucu, tamamen asenkron bir sistemde, bir node bile hata verebiliyorsa hiçbir konsensüs algoritmasının hem güvenliği hem sonlanmayı garanti edemeyeceğini kanıtlar — deterministik konsensüs teoride imkânsızdır. Gerçek sistemler bunu zaman aşımları, rastgeleleştirme (rastgele seçim zamanlayıcıları) ve kısmi senkronluk varsayımlarıyla aşar.

En İyi Pratikler

Yaygın Hatalar


11. Quorum

Tanım

Bir okuma veya yazma işleminin geçerli/başarılı sayılması için katılması gereken minimum node sayısıdır; lidersiz/çoklu-replikalı sistemlerde tutarlılığı garanti etmek için kullanılır.

Temel Formül

N replika, W = yazma quorum’u, R = okuma quorum’u için:

W + R > N ise, okuma ve yazma en az bir node’da örtüşür — bu da okumanın en son yazmayı görmesini garanti eder (o işlem için güçlü tutarlılık).

Yaygın konfigürasyonlar:

En İyi Pratikler

Yaygın Hatalar


12. Hata Toleransı (Fault Tolerance)

Tanım

Bazı bileşenleri hata verse bile bir sistemin doğru şekilde (tam veya düşük performansla) çalışmaya devam etme özelliği.

Temel Teknikler

En İyi Pratikler

Yaygın Hatalar


13. Hata Tespiti (Failure Detection)

Tanım

Dağıtık bir sistemin bir node’un/bileşenin hata verdiğini (çöktüğünü, takıldığını veya erişilemez hale geldiğini) belirleme mekanizmasıdır — failover, lider yeniden seçimi veya node’u yük dengeleme havuzundan çıkarmayı tetiklemek için bir ön koşuldur.

Temel Problem

Asenkron bir ağda, “node ölü” ile “node/ağ sadece yavaş” durumunu ayırt edemezsiniz. Bu yüzden hata detektörleri doğası gereği olasılıksal/sezgiseldir, şunlarla karakterize edilir:

Mekanizmalar

En İyi Pratikler

Yaygın Hatalar


14. İdempotentlik (Idempotency)

Tanım

Bir işlem, birden fazla kez gerçekleştirilmesi bir kez gerçekleştirilmesiyle aynı etkiye sahipse idempotent’tir. Dağıtık sistemlerde kritik öneme sahiptir çünkü retry’lar kaçınılmazdır (bir isteğin sunucu tarafından işlenmeden önce mi sonra mı başarısız olduğunu genelde bilemezsiniz — “iki general problemi”).

Uygulama Desenleri

En İyi Pratikler

Yaygın Hatalar


15. Retry (Yeniden Deneme)

Tanım

Bazı hataların geçici olduğu (kısa süreli ağ sıçraması, anlık aşırı yük, kısa erişilemezlik) ve tekrar denendiğinde başarılı olacağı varsayımıyla başarısız bir işlemi yeniden denemek.

Ne Zaman Retry Yapılmalı

Tasarım Unsurları

En İyi Pratikler

Yaygın Hatalar


16. Exponential Backoff (Üstel Geri Çekilme)

Tanım

Ardışık retry denemeleri arasındaki bekleme süresinin üstel olarak arttığı (örn. 1s, 2s, 4s, 8s, 16s…) bir retry-gecikmesi stratejisi; hatalar devam ettikçe zorlanan sistem üzerindeki baskıyı azaltır ve toparlanması için zaman tanır.

Formül

delay = min(base * 2^attempt, max_delay)

Pratik olmayan derecede uzun beklemeleri önlemek için genelde bir max_delay tavanıyla sınırlandırılır.

Jitter Varyantları (senkronize retry’ları / sürü etkisini önlemek için)

En İyi Pratikler

Yaygın Hatalar


17. Circuit Breaker (Devre Kesici)

Tanım

Elektrik mühendisliğinden ödünç alınan bir desen; hatalar bir eşiği aştığında çökmekte olan bir bağımlılığa yapılan çağrıları durdurur, “devreyi açarak” büyük olasılıkla başarısız olacak isteklere devam etmek yerine hızlıca başarısız olur — hem çağıranı (takılmak yerine hızlı hata) hem de çağrılanı (toparlanırken yükten kurtulma) korur.

Durumlar

  1. Closed (Kapalı) — normal çalışma; istekler geçer; hatalar sayılır.
  2. Open (Açık) — hata eşiği aşıldı; belirlenen bir soğuma süresi boyunca istekler bağımlılığı çağırmadan hemen başarısız olur (veya fallback’e düşer).
  3. Half-Open (Yarı Açık) — soğuma süresinden sonra, bağımlılığın toparlanıp toparlanmadığını test etmek için sınırlı sayıda deneme isteğine izin verilir. Başarı ⇒ Closed’a geçiş; başarısızlık ⇒ tekrar Open’a.

Konfigürasyon Parametreleri

En İyi Pratikler

Yaygın Hatalar


18. Timeout (Zaman Aşımı)

Tanım

Bir çağıranın, çağrıyı başarısız saymadan önce bir yanıt için bekleyeceği maksimum süre. Zaman aşımları temeldir — bunlar olmadan, yavaş/takılmış bir bağımlılık sınırsız kaynak tüketimine (süresiz tutulan thread’ler/bağlantılar) ve çağrı zincirinde kademeli hataya yol açabilir.

Türleri

En İyi Pratikler

Yaygın Hatalar


19. Rate Limiting (Hız Sınırlama)

Tanım

Kaynakları aşırı yüklenmeden korumak, kiracılar arasında adil kullanımı sağlamak ve API sözleşmelerini/fiyatlandırma katmanlarını uygulamak için bir istemcinin (veya sistemin bütününün) belirli bir zaman penceresi içinde gerçekleştirebileceği istek/işlem sayısını kısıtlamak.

Algoritmalar

Nerede Uygulanır

En İyi Pratikler

Yaygın Hatalar


20. Backpressure (Geri Basınç)

Tanım

Bir sistemin, gelen iş yükü oranına yetişemediğinde yukarı akıştaki üreticilere “yavaşla” sinyali vermesini sağlayan bir mekanizma; sınırsız kuyruk büyümesini, bellek tükenmesini ve kademeli hatayı önler. Backpressure, bileşenler arasındaki akış kontrolü hakkındadır; sınırda kabul kontrolü hakkında olan rate limiting’i tamamlar ama ondan farklıdır.

Mekanizmalar

En İyi Pratikler

Yaygın Hatalar


21. Graceful Shutdown (Zarif Kapanış)

Tanım

Bir süreci/servisi aniden öldürmek (bu düşen istekler, bozuk durum veya sahipsiz kaynaklara yol açar) yerine — devam eden işi tamamlayarak veya güvenli şekilde devrederek, yük dengeleyicilerden/servis keşfinden çıkışı kaydederek ve kaynakları temiz bir şekilde serbest bırakarak kontrollü bir şekilde sonlandırmak.

Kapanış Sırası (tipik)

  1. Sonlandırma sinyalini alma (orkestratörden SIGTERM, yakalanamayan SIGKILL değil).
  2. Yeni işi kabul etmeyi durdurmaönce servis keşfinden/yük dengeleyiciden kaydı silin, böylece mevcut bağlantılar sunulmaya devam ederken yeni trafik gelmez.
  3. Devam eden istekleri boşaltma (drain) — bir grace period (mühlet) kadar, şu anda işlenmekte olan isteklerin tamamlanmasını bekleyin.
  4. Kaynakları temiz kapatma — DB bağlantıları, mesaj consumer offset’lerinin commit edilmesi, dosya tanıtıcılarının flush/close edilmesi.
  5. Mühlet sonrası zorla çıkış — boşaltma çok uzun sürerse, sonsuza kadar takılı kalmak yerine (bir miktar kayıp kabul ederek) zorla sonlandırın, çünkü orkestratörler (Kubernetes) kendi mühletlerinden sonra ne olursa olsun SIGKILL gönderecektir.

En İyi Pratikler

Yaygın Hatalar


22. Disaster Recovery (Felaket Kurtarma)

Tanım

Bir sistemin normal hata toleransı mekanizmalarının ötesine geçen felaket niteliğindeki bir olaydan (bölge çapında kesinti, veri bozulması, fidye yazılımı, üretim verisini silen insan hatası) sonra operasyonu yeniden sürdürmesini sağlayan strateji, süreçler ve altyapı.

Temel Metrikler

DR Stratejileri (artan maliyet, azalan RTO/RPO)

  1. Backup & Restore (Yedekleme & Geri Yükleme) — dayanıklı depolamaya (genelde bölgeler arası) periyodik yedeklemeler; talep üzerine geri yükleme. En ucuzudur, ama RTO/RPO’su en yüksektir (saatler).
  2. Pilot Light — DR bölgesinde her zaman çalışan minimal bir ortam versiyonu (örn. sadece replike olan veritabanı); failover’da hesaplamayı ölçeklendirin. Orta maliyet, onlarca dakikalık RTO.
  3. Warm Standby — DR bölgesinde sürekli çalışan, ölçeği küçültülmüş ama tamamen işlevsel bir replika ortam; failover’da ölçeklendirin. Daha düşük RTO (dakikalar), daha yüksek maliyet.
  4. Hot Standby / Multi-Site Active-Active — birden fazla bölgede eşzamanlı olarak tam ölçekli, canlı trafik sunan ortamlar; failover neredeyse anlıktır (saniyeler). En yüksek maliyet ve karmaşıklık, ama en düşük RTO/RPO (sıfıra yakın).

En İyi Pratikler

Yaygın Hatalar


Hızlı Referans Özeti

KonuTemel Trade-off
CAP TeoremiBölünme sırasında Tutarlılık vs. Erişilebilirlik
TutarlılıkTazelik garantisinin gücü vs. gecikme/erişilebilirlik
Nihai TutarlılıkYüksek erişilebilirlik/verim vs. sınırlı eskime
Güçlü TutarlılıkDoğruluk garantisi vs. gecikme/erişilebilirlik maliyeti
ReplikasyonDayanıklılık/erişilebilirlik vs. yazma gecikmesi & karmaşıklık
ShardingYatay ölçek vs. shard’lar arası işlem karmaşıklığı
PartitioningParalellik/sıralama granülerliği vs. operasyonel yük
Lider SeçimiKoordinasyon basitliği vs. failover karmaşıklığı
Dağıtık KilitKarşılıklı dışlama vs. deadlock/güvenlik riski (fencing gerektirir)
KonsensüsGüçlü anlaşma vs. verim & gecikme
QuorumTutarlılık (W+R>N) vs. erişilebilirlik/gecikme
Hata ToleransıYedeklilik maliyeti vs. dayanıklılık
Hata TespitiTespit hızı vs. yanlış-pozitif oranı
İdempotentlikMühendislik disiplini vs. retry’lar altında güvenlik
RetryDayanıklılık vs. amplifikasyon riski
Exponential BackoffKurtarma süresi vs. sistem rahatlaması
Circuit BreakerHızlı-başarısız koruma vs. geçici erişilemezlik
TimeoutYanıt verebilirlik vs. erken hata
Rate LimitingAdalet/koruma vs. meşru patlama toleransı
BackpressureKararlılık vs. yük altında verim
Graceful ShutdownDağıtım güvenliği vs. kapanış gecikmesi
Disaster RecoveryHazırlık maliyeti vs. RTO/RPO hedefleri

Bu rehber kavramsal ve pratik bir referans olarak tasarlanmıştır. Belirli sayıları (zaman aşımları, eşikler, quorum boyutları) körü körüne varsayılanları kopyalamak yerine her zaman kendi sisteminizin ölçülen gecikme/hata karakteristiklerine göre doğrulayın.