CAP Teoremi

menu icon

CAP Teoremi

Bu kılavuzda, CAP teoremini ve bu teoremin dağıtılmış uygulamalar tasarlanmasıyla ve bir NoSQL ya da ilişkisel veri deposu seçimiyle olan ilgisini ele alıyoruz.

CAP teoremi nedir?

Siz hiç bir bahçe düzenlemeciyle, boyacıyla ya da başka bir tüccarla ilgili şöyle bir reklam başlığı gördünüz mü? "Ucuz, Hızlı ve İyi: Bunlardan İkisini Seçin."

CAP teoremi, dağıtılmış sistemlere benzer bir mantık uygular; yani, dağıtılmış bir sistem istenen üç özelliğin yalnızca ikisini sağlayabilir: tutarlılık, erişilebilirlik ve bölünme toleransı (yani CAP kısaltmasındaki "C" (consistency), "A" (availability) ve "P" (partition tolerance) harfleri).

Dağıtılmış bir sistem, verileri aynı anda birden çok düğümde (fiziksel ya da sanal makineler) depolayan bir ağdır. Bütün bulut uygulamaları dağıtılmış sistemler olduğundan, bir bulut uygulaması tasarlarken CAP teoremini iyi anlamak gerekir. Çünkü uygulamanızın en çok ihtiyaç duyduğu özellikleri sunan veri yönetimi sistemini bu şekilde seçebilirsiniz.

CAP teoremi ilk olarak Profesör Eric A. Brewer tarafından 2000 yılında gerçekleştirdiği bilişimle ilgili bir konuşmada ortaya atıldığı için Brewer Teoremi olarak da anılır. MIT öğretim üyeleri Seth Gilbert ve Nancy Lynch iki yıl sonra "Brewer Varsayımının" kanıtını yayımladı.

CAP teoremindeki 3 özelliğin ayrıntıları

CAP teoreminin atıfta bulunduğu üç dağıtılmış sistem özelliğine ayrıntılı bir şekilde göz atalım.

Tutarlılık

Tutarlılık, bütün istemcilerin bağlandıkları düğümden bağımsız olarak aynı anda aynı verileri göreceği anlamına gelir. Bunun gerçekleşmesi için, bir düğüme her veri yazılışında, yazma 'başarılı' olarak kabul edilmeden önce verilerin sistemdeki diğer bütün düğümlere anında iletilmesi ya da eşlenmesi gerekir.

Erişilebilirlik

Erişilebilirlik, bir ya da daha fazla düğüm kapalı olsa bile, veriler için istekte bulunan bütün istemcilerin yanıt alacağı anlamına gelir. Bu durum şu şekilde de açıklanabilir: Dağıtılmış sistemdeki çalışan bütün düğümler istisnasız her türlü isteğe geçerli bir yanıt verir.

Bölünme toleransı

Bölünme, dağıtılmış sistemdeki bir iletişim kopukluğu, iki düğüm arasındaki bağlantının kaybolması ya da gecikmesidir. Bölümleme toleransı, kümenin, sistemdeki düğümler arasında ortaya çıkan çok sayıda iletişim kopukluğuna rağmen çalışmaya devam etmesi gerektiği anlamına gelir.

CAP teoremi NoSQL veritabanı türleri

NoSQL (ilişkisel olmayan) veritabanları, dağıtılmış ağ uygulamaları için idealdir. NoSQL veritabanları, dikey ölçeklenebilir SQL (ilişkisel) benzerlerinin aksine, yatay olarak ölçeklenebilir ve tasarımı gereği dağıtılmıştır; birbirine bağlı birden çok düğümden oluşan büyüyen bir ağ çapında hızla ölçeklenebilirler. (Daha fazla bilgi için bkz. "SQL vs. NoSQL Databases: What's the Difference?")

Günümüzde NoSQL veritabanları destekledikleri iki CAP özelliğine göre sınıflandırılır:

  • CP veritabanı: CP veritabanı, erişilebilirlik pahasına tutarlılık ve bölünme toleransı sağlar. Herhangi iki düğüm arasında bir bölünme gerçekleştiğinde, sistemin bölünme çözülünceye kadar tutarlı olmayan düğümü kapatması (yani, erişilmez hale getirmesi) gerekir.
  • AP veritabanı: AP veritabanı, tutarlılık pahasına erişilebilirlik ve bölünme toleransı sağlar. Bir bölünme gerçekleştiğinde, bütün düğümler erişilebilir durumda kalır, ancak, bölünmenin hatalı ucunda olan düğümler, diğerlerine göre daha eski bir veri sürümü sağlayabilir. (Bölünme çözüldüğünde, AP veritabanları genellikle sistemdeki bütün tutarsızlıkları onarmak için düğümleri yeniden eşitler.)
  • CA veritabanı: CA veritabanı bütün düğümlerde tutarlılık ve erişilebilirlik sağlar. Ancak, sistemdeki herhangi iki düğüm arasında bir bölünme varsa bunu gerçekleştiremez ve bu nedenle hata toleransı sağlayamaz.

Bu veritabanı türünü sona bırakmamızın bir nedeni var: dağıtılmış bir sistemde bölünmelerden kaçınmak mümkün değildir. Dolayısıyla, teoride, dağıtılmış bir CA veritabanından söz edebilsek de pratikte dağıtılmış bir CA veritabanı var olamaz. Ancak, bu, ihtiyaç duysanız da dağıtılmış uygulamanız için bir CA veritabanınız olamayacağı anlamına gelmez. PostgreSQL gibi birçok ilişkisel veritabanı, tutarlılık ve erişilebilirlik sağlar ve eşleme kullanılarak birden çok düğümde devreye alınabilir.

MongoDB ve CAP teoremi (CP)

MongoDB, verileri BSON (ikili JSON) belgeleri olarak saklayan, sık kullanılan bir NoSQL veritabanı yönetim sistemidir. Birden çok yerde çalışan büyük veri içeren ve gerçek zamanlı uygulamalar için sıkça kullanılır. CAP teoremi bağlamında düşünüldüğünde MongoDB bir CP veri deposudur ve ağ bölünmelerini erişilebilirlikten ödün verip tutarlılığı koruyarak çözer.

MongoDB, tek ana düğümlü bir sistemdir, yani, her bir eşleme kümesinin (bağlantı IBM dışındadır) bütün yazma işlemlerini alan tek bir birincil düğümü olabilir. Aynı eşleme kümesindeki diğer bütün düğümler, birincil düğümün işlem günlüğünü eşleyen ve bunu kendi veri kümelerine uygulayan ikincil düğümlerdir. İstemciler varsayılan olarak birincil düğümden okuma gerçekleştirir, ancak, ikincil düğümlerden okuyabilmelerini sağlayan bir okuma tercihi (bağlantı IBM dışındadır) de belirleyebilirler.

Birincil düğüm erişilemez duruma geldiğinde, en güncel işlem günlüğüne sahip ikincil düğüm, yeni birincil düğüm olarak seçilecektir. Diğer bütün ikincil düğümler yeni ana düğümle aralarındaki farkı kapattığında, küme yeniden erişilebilir duruma gelir. İstemciler bu aralık süresince herhangi bir yazma isteğinde bulunamayacağı için veriler ağ genelinde tutarlılığını korur.

Cassandra ve CAP teoremi (AP)

Apache Cassandra, Apache Software Foundation tarafından sağlanan açık kaynaklı bir NoSQL veritabanıdır. Dağıtılmış bir ağ üzerinde veri depolamanızı sağlayan geniş sütunlu bir veritabanıdır. Ancak, MongoDB'den farklı olarak, Cassandra'nın mimarisinde bir ana düğüm bulunmaz ve sonuç olarak, bir değil birden çok hata noktası vardır.

CAP teoremi bağlamında düşünüldüğünde Cassandra bir AP veritabanıdır ve erişilebilirlik ve bölünme toleransı sağlar ama her zaman tutarlılık sağlayamaz. Cassandra'nın ana düğümü olmadığı için, bütün düğümlerin sürekli olarak erişilebilir olması gerekir. Ancak, Cassandra istemcilerin herhangi bir zamanda herhangi bir düğüme yazmasına izin vererek ve tutarsızlıkları mümkün olan en kısa sürede gidererek nihai tutarlılık sağlar.

Veriler yalnızca bir ağ bölünmesi durumunda tutarsız hale geldiği ve tutarsızlıklar hızla çözüldüğü için, Cassandra, düğümlerin, eşleriyle aralarındaki farkı kapatmalarına yardımcı olmak için "onarım" işlevi (bağlantı IBM dışındadır) sunar. Ancak, sürekli erişilebilirlik o kadar yüksek performanslı bir sistem sağlar ki birçok durumda tutarlılıktan feragat etmeye değer.

Mikro hizmetlerle çalışma

Mikro hizmetler kendi veritabanları ve veritabanı modelleri dahil olmak üzere kendi yazılım demetlerini içeren ve birbirleriyle bir ağ üzerinden iletişim kuran, gevşek bağlanmış ve bağımsız olarak devreye alınabilen uygulama bileşenleridir. Mikro hizmetler hem bulut sunucularında hem de şirket içi veri merkezlerinde çalıştırılabildikleri için, hibrit ve çoklu bulut uygulamaları için son derece popüler hale gelmiştir.

CAP teoreminin anlaşılması, birden çok konumdan çalışan, mikro hizmet tabanlı bir uygulama tasarlarken en iyi veritabanını seçmenize yardımcı olabilir. Örneğin, uygulamanız için veri modelini hızla yineleme ve yatay ölçekleme yeteneği gerekliyse ama nihai tutarlılıkla (mutlak tutarlılığın aksine) yetinmeniz mümkünse Cassandra ya da Apache CouchDB gibi bir AP veritabanı gereksinimlerinizi karşılayabilir ve devreye alımınızı basitleştirebilir. Diğer yandan, uygulamanız bir e-Ticaret uygulaması ya da ödeme hizmetinde olduğu gibi büyük ölçüde veri tutarlılığına dayanıyorsa, PostgreSQL gibi ilişkisel bir veritabanını tercih edebilirsiniz.

CAP teoremi ve IBM Cloud

IBM, zengin çeşitlilikte tam olarak yönetilen veritabanı hizmetleri sağlar. IBM Cloud üzerinde ilişkisel veritabanı yönetim sistemlerinin yanı sıra MongoDB, Cloudant (başka bir dağıtılmış AP veri deposu), Elasticsearch, etcd ve diğer veritabanı çözümlerini de çalıştırabilirsiniz.

Veritabanı seçeneklerimizin hepsini görmek için (herhangi bir taahhütte bulunmadan) bir IBMid kimliği almak üzere kaydolun ve IBM Cloud hesabınızı yaratın.