CAP teoremi nedir? Gerçek sistemlerde nasıl yorumlanır?
Cevap
CAP teoremine göre dağıtık bir veri sistemi, bir ağ bölünmesi (network partition) sırasında aşağıdaki iki özellikten yalnızca birini garanti edebilir:
- Consistency (C): her okuma en son yazılan değeri döner (linearizability) ya da hata verir.
- Availability (A): çalışan her düğüm her isteğe (hata olmadan) yanıt verir.
- Partition tolerance (P): düğümler arası mesajlar kaybolsa da sistem çalışmaya devam eder.
Yaygın yanılgı: "3'ten 2'sini seç"
Dağıtık sistemde ağ bölünmesi kaçınılmazdır, yani P bir seçenek değildir. Asıl soru şudur: bölünme olduğunda sistem ne yapar?
- CP: tutarsız veri döndürmektense bazı istekleri reddeder. Örnek: ZooKeeper, etcd, çoğunluk (quorum) gerektiren HBase. Kullanım: lider seçimi, kilitler, finansal kayıtlar.
- AP: yanıt vermeye devam eder ama veri eski olabilir; bölünme bitince düğümler uzlaşır (eventual consistency). Örnek: Cassandra, DynamoDB (varsayılan ayarlarla), DNS. Kullanım: sepet, beğeni sayısı, sosyal akış.
Bölünme yokken C ve A birlikte sağlanabilir.
PACELC: daha gerçekçi bir model
Partition varsa A ile C arasında seç; Else (normal durumda) Latency ile C arasında seç. Bölünme olmasa da güçlü tutarlılık, replikalar arası senkron koordinasyon gerektirdiği için gecikmeyi artırır.
Ayarlanabilir tutarlılık
Cassandra ve DynamoDB'de tutarlılık istek bazında seçilebilir. N replika için okuma (R) ve yazma (W) quorum'ları R + W > N olacak şekilde seçilirse (ör. N=3, W=2, R=2) okumalar en son yazmayı görür.
Mülakatta nasıl kullanılır?
Sistemi tek etiketle (CP/AP) değil, her veri türü için değerlendirin: bir e-ticaret sisteminde ödeme ve stok rezervasyonu tutarlılık ister; ürün yorumları ve öneri listesi eventual consistency ile sorunsuz çalışır.
İlgili Sistem Tasarımı soruları
- Mesaj kuyruğu (RabbitMQ, Kafka) ne zaman kullanılır?
- Monolith ile mikroservis mimarisi arasındaki fark nedir? Mikroservislere ne zaman geçilmeli?
- Load balancer nedir? Yük dağıtım algoritmaları nelerdir?
- Dikey ve yatay ölçekleme arasındaki fark nedir?
- Hangi cache stratejilerini biliyorsunuz?
- REST ile GraphQL arasındaki farklar nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.