CAP Teoremi
Tutarlılık, Erişilebilirlik, Bölünme Toleransı
- İngilizcesi
- CAP Theorem
- Okunuşu
- kep tiırım
Kısaca
CAP teoremi, ağ arızası dağıtık bir veritabanını böldüğünde sistemin tutarlılık ile erişilebilirlikten birini seçmesi gerektiğini söyler; ikisi birden olamaz.
CAP teoremi nedir?
CAP teoremi, dağıtık veri sistemlerinde, yani veriyi ağa bağlı birkaç makinede saklayan veritabanlarında temel bir ödünleşimi tanımlar. Üç özelliği adlandırır: tutarlılık (her okuma en son yazmayı ya da bir hata döndürür), erişilebilirlik (çalışan bir düğüme gelen her istek hata olmayan bir yanıt alır) ve bölünme toleransı (ağ arızaları bazı düğümleri diğerlerinden kopardığında bile sistemin çalışmaya devam etmesi). Eric Brewer tarafından 2000'de öne sürüldü ve Seth Gilbert ile Nancy Lynch tarafından 2002'de kanıtlandı.
Genellikle "üçünden ikisini seç" diye özetlenir, ancak bu yanıltıcıdır. Gerçek bir dağıtık sistemde ağ bölünmeleri engellenemez; dolayısıyla bölünme toleransı isteğe bağlı değildir ve asıl seçim, bir bölünme sürerken ne yapılacağıdır. CP sistem, bayat veri döndürmemek için bazı istekleri reddeder ya da geciktirir; AP sistem ise cevap vermeye devam eder ancak ağ düzelene kadar güncel olmayan veri döndürebilir.
Birbirleriyle telefon hattını kaybeden iki banka şubesini düşünün. Ya hat geri gelene kadar para çekmeye izin vermeyi bırakırlar, yani tutarlılığı seçerler; ya da müşterilere hizmet vermeye devam edip bakiyeleri sonra uzlaştırırlar, yani erişilebilirliği seçer ve hesabın eksiye düşme riskini göze alırlar. Ödemeleri ya da stoğu yöneten sistemler çoğunlukla CP'ye yaslanır; alışveriş sepetleri, sosyal akışlar ve DNS ise genellikle AP'ye yaslanır ve iletişim yeniden kurulduğunda tüm kopyaların yakınsadığı nihai tutarlılığa (eventual consistency) güvenir.
Bilinmesi gereken iki karışıklık vardır. CAP'teki C, her düğümün güncel veri döndürdüğü katı bir garanti olan doğrusallanabilirlik (linearizability) anlamına gelir; bu, tutarlılığın verinin veritabanının kurallarına ve kısıtlarına uyması anlamına geldiği ACID'deki C'den farklıdır. Ayrıca CAP yalnızca bölünmeler sırasındaki davranışı tanımlar; PACELC teoremi bunu genişleterek ağ sağlıklıyken bile sistemlerin gecikmeyi tutarlılıkla takas ettiğini belirtir.
Bir bakışta
Önemli noktalar
- CAP; tutarlılık, erişilebilirlik ve bölünme toleransının kısaltmasıdır.
- Ağ bölünmesi sırasında dağıtık bir sistem tutarlılık ya da erişilebilirliği seçmek zorundadır.
- Pratikte bölünme toleransı zorunludur; dolayısıyla gerçek seçim CP ya da AP'dir.
- CAP'teki C, ACID'deki C ile aynı değildir.
- PACELC, CAP'i normal işleyişteki gecikme-tutarlılık ödünleşimine genişletir.
Örnek
-- In cqlsh, the Cassandra shell, the trade-off can be tuned per request
-- Favors availability: any single replica may answer, possibly with stale data
CONSISTENCY ONE;
SELECT balance FROM accounts WHERE id = 42;
-- Favors consistency: a majority of replicas must respond, or the read fails
CONSISTENCY QUORUM;
SELECT balance FROM accounts WHERE id = 42;Sık sorulan sorular
Tutarlılık ve erişilebilirlikten hangisi daha önemlidir?
Veriye bağlıdır. Banka bakiyeleri ve stok sayıları genellikle tutarlılık gerektirir; sosyal akışlar, görüntülenme sayıları ve alışveriş sepetleri ise erişilebilir kalmak karşılığında kısa süreli bayatlığa katlanabilir.
CAP teoremi tek sunuculu bir veritabanı için geçerli midir?
Pek sayılmaz. CAP, birden fazla ağ düğümüne replike edilen veri için geçerlidir; tek bir sunucuda kopyalar arasında endişelenilecek bir bölünme yoktur, ancak yine de basitçe çökebilir.
Nihai tutarlılık (eventual consistency) nedir?
Nihai tutarlılık, yeni güncelleme yapılmazsa verinin tüm kopyalarının sonunda özdeş hale geleceği anlamına gelir. Bölünmeler sırasında erişilebilir kalan ve farkları sonradan uzlaştıran AP sistemlerin tipik garantisidir.
İlgili sayfalar
- Veritabanı ReplikasyonuVeritabanları, s. 41Veritabanı replikasyonu, verinin bir sunucudan diğerlerine sürekli kopyalanmasıdır; böylece birkaç sunucu güvenilirlik ve ölçek için aynı veriyi tutar.
- ShardingVeritabanları, s. 28Sharding, bir veritabanının verisini shard adı verilen birkaç sunucuya bölerek ölçeklendirme yöntemidir; her biri toplamın yalnızca bir kısmını saklar ve işler.
- NoSQLVeritabanları, s. 21NoSQL, veriyi ilişkisel tablolar yerine doküman, anahtar-değer çifti, geniş sütun ya da çizge gibi başka modellerde saklayan veritabanı ailesidir.
- TransactionVeritabanları, s. 36Transaction, tek bir bütün olarak başarılı ya da başarısız olan veritabanı işlemleri grubudur; böylece veri asla yarım kalmış, tutarsız bir durumda bırakılmaz.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- Dağıtık SistemYazılım Mimarisi, s. 8Dağıtık sistem, bir ağ üzerinden birlikte çalışan ve kullanıcılarına tek bir sistem gibi görünen bilgisayarlar kümesidir.
- Konsensüs AlgoritmasıYazılım Mimarisi, s. 23Konsensüs algoritması, bir grup makinenin, bazıları çökse ya da mesajlar kaybolsa bile tek bir değerde ya da sıralı bir karar kaydında anlaşmasını sağlar.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin