- CAP theorem, dağıtık sistemlerde Consistency, Availability ve Partition Tolerance üçgenini tanımlar.
- Partition Tolerance bir seçim değildir; fiziksel bir gerçektir. Ağ er ya da geç bölünür.
- Gerçek karar tek bir soruya iner: Bağlantı koptuğunda yanlış veri mi göstereyim, yoksa sistemi kapayayım mı?
- Bankalar veriyi korumak için sistemi kapatır (CP). Sosyal medya platformları geçici tutarsızlığı kabul eder (AP).
- Bu kararı kriz anında değil, mimari tasarım aşamasında vermeniz gerekir.
Okyanusun binlerce metre altında, kıtalar arası trafiği taşıyan kalın bir fiber optik kablo düşünün. O kablo bir gün koptuğunda — fiziksel bir kesim, bir kazı hatası, olağandışı bir okyanus akıntısı — arka planda çalışan sistemleriniz anında bir çıkmazla yüz yüze gelir. Kullanıcılara hatalı veri mı göstereyim? Yoksa sistemi erişime tamamen kapatayım mı?
Bu ikilem, CAP theorem’i anlamanın tam merkezindedir. Ve cevabı önceden vermemişseniz, sisteminiz bu kararı sizin yerinize verir.
“İstediğiniz İkisini Seçin” Yanılgısı
CAP theorem, 2000 yılında Eric Brewer tarafından ortaya atıldı ve 2002’de Gilbert-Lynch kanıtıyla formalize edildi. Teorem şunu söyler: bir dağıtık sistem, ağ bölünmesi (Partition) durumunda aynı anda hem Consistency hem de Availability garantisini veremez.
Çoğu yazılımcı bunu “üçten iki seç” kuralı olarak öğrenir. Bu açıklama teknik olarak doğru ama pratikte yanıltıcıdır. Çünkü Partition Tolerance seçilebilir bir özellik değildir. Ağlar bölünür. Bu, fiziğin sınırıdır. Birden fazla sunucu çalıştıran her sistem, günün birinde bir network partition yaşayacaktır.
Gerçek seçim şu: Partition anında C mi, A mı?

Consistency’yi seçerseniz sistemin tutarlılığını korursunuz, fakat o an yanıt veremeyebilir. Availability’yi seçerseniz sistem her zaman yanıt verir, fakat bazı yanıtlar güncel olmayabilir.
Ne seçeceğinizi belirleyen şey teknoloji değildir. İş modelinizin doğasıdır.
Banka, Sosyal Medyayla Aynı Kodu Çalıştıramaz
Bir banka hesabını düşünün. New York’taki sunucunuza 100 dolar yatırdınız. Ağ tam o anda ikiye bölündü. Londra sunucusu bu güncellemeyi göremedi. Bir saniye sonra aynı hesaptan Londra üzerinden ödeme çekilmeye çalışıyor. Londra sunucusu bakiyeyi sıfır görüyor.
Eğer sistem o noktada Availability’yi seçip yanıt verirse, var olmayan para çekilmiş olur.
Bankalar bu yüzden Consistency tarafını seçer. İşlem gerçekleşemiyorsa HTTP 500 döner. Kullanıcı “şu an hizmet veremiyoruz” ekranını görür. Para kaybı önlenir. Bu pahalı bir karardır — sistem kapalı görünür — ama için doğru olandır. PostgreSQL ve benzeri ilişkisel veritabanları bu yüzden finansal sistemlerin standart altyapısı olmuştur.
Şimdi bir sosyal medya platformunu düşünün. İki kullanıcı aynı anda aynı gönderiye yorum yapıyor. Sunucular bölünmüş durumda. Her sunucu kendi yorumunu yazıyor ama karşı tarafa iletemiyor. Sonuç: iki farklı yorum listesi, iki farklı gerçeklik.
Ağ onarıldığında sistem bu iki versiyonu birleştirir. Birkaç saniyeliğine farklı kullanıcılar farklı yorum listeleri görmüş olur. Bu durumun hayati bir riski yoktur. Yeter ki kullanıcı “uygulama çöktü” sanıp uygulamayı kapatmasın.
Sosyal medya, anlık mesajlaşma ve içerik servisleri bu yüzden Availability’yi seçer.

Cassandra ve benzeri NoSQL veritabanları, bu eventual consistency modelini desteklemek için tasarlanmıştır.
Gerçekte Ne Olur?
Bu durum teorik değildir. Temmuz 2024’te Amazon Kinesis Data Streams, us-east-1 bölgesinde yaklaşık yedi saat boyunca kesintiye uğradı. Yalnızca Kinesis değil — bu servise bağımlı düzinelerce AWS bileşeni birlikte etkilendi. (Kaynak: AWS Post-Event Summary, Temmuz 2024)
Bu olay, bulut altyapısının ne kadar bölünebilir olduğunu gösteriyor. Tek bir iç bileşenin arızası, tam bir Partition durumu yaratabilir. O gün hangi veritabanı tercihini yapmış olduğunuza göre, bazı sistemler graceful bir hata verdi, bazıları ise planlanmamış tutarsızlıklar üretti.
Kendi sistemlerinizide aynı senaryo geçerliadir. Bir cloud availability zone bir dakikalığına düşse bile, veritabanınız ikiye bölünmüş olur. O an önceden bir karar vermediyseniz, sistem bu kararı sizin yerinize — ve büyük olasılıkla yanlış — verir.
Mühendisler İçin Ne Anlama Geliyor?
CAP theorem bir veritabanı konfigürasyonu değildir. Bir iş kararıdır.
Sisteminizi tasarlarken şu soruyu sorun: Partition anında kullanıcının karşılaştığı en kötü senaryo hangisi daha az zararlı — yanlış veri mi, yoksa erişim hatası mı?
Para, hisse senedi, sağlık verisi içeren sistemler için cevap neredeyse her zaman Consistency yönündedir. Kullanıcı birkaç saniyeliğine hata görür ama veri bütünlüğü korunur.
Sosyal etkileşim, içerik, bildirim, öneri sistemleri için cevap genellikle Availability yönündedir. Geçici tutarsızlık, tam erişim kesilmesinden çok daha az zararlıdır.
Bu karar mimari tasarım aşamasında, ekiple birlikte, iş gereksinimleri ortada açıkken verilmelidir. Üretim ortamında ağ bölündükten sonra değil.
İlgili Yazılar
- Veri Tabanı Teknolojileri: NoSQL ve SQL
- Databricks Apache Spark 3 Sertifikasına Nasıl Hazırlandım
- Yapay Zeka Çağında Yazılım Mühendisleri İçin En İyi 10 Kitap






