Photo by Christina @ wocintechchat.com on Unsplash

CAP Teoremi nedir?

Halil İbrahim Kocaöz
3 min readOct 14, 2023

--

CAP teoremi, dağıtık sistemlerde tutarlılık(consistency), kullanılabilirlik(availability) ve bölünme toleransı(partition tolerance) arasındaki denge için ortaya atılmış bir teoremdir.

Consistency, sistemin tüm düğümlerinin(node) tutarlı bir veri görünümüne sahip olması gerektiği özelliğini ifade eder. Bu ise hangi düğüme(node) bağlanılırsa bağlansın tüm istemcilerin aynı anda aynı verileri gördüğü, görmesi gerektiği anlamına gelir.

Availability, bir sistemin istemcilerden gelen isteklere her zaman yanıt verme yeteneğini ifade eder.

Partition tolerance, ağda iletişim kesintileri yaşandığında dahi sistemlerin çalışmaya devam edebilme yeteneğini ifade eder. Bu gibi durumlaraysa network partition deriz.

Network partition nedir?

Dağıtılmış bir sistemdeki düğümler(node) ağ arızaları nedeniyle birbirleriyle iletişim kuramadığında meydana gelir. Böyle bir sorun meydana gelirse, dağıtık sistemler consistency ve availability arasından birini seçmelidir.

Geçici hata durumunda eğer sistem consistency seçerse, sistemdeki sorun çözülene kadar sistemin bazı noktalarına veya tümüne ulaşılamaz olabilir, bu da availability’den ödün verilmesi demektir.

Eğer sistem availability seçerse, verilerin güncellenebilmesine, yenisinin yazılabilmesine izin verir fakat bu sorun çözülene kadar veri tutarsızlıklarına neden olur, bu da consistency’den ödün verilmesi demektir.

Somut ve biraz uçuk örneklendirme

ATM’lere sahip bir bankanın ATM’leri bir network üzerinden birbirleri ile iletişim kuruyor ve bakiye verilerini merkezi bir veri kaynağında tutmuyor, ATM’ler kendilerine veya bölgelere ait bir veri kaynağına sahip.

ATM’ler üç temel işlemi gerçekleştirme özelliğine sahip

  • Para yatırma
  • Para çekme
  • Bakiye görüntüleme

Bu bankanın müşterisi herhangi bir ATM’den para yatırma işlemi yaptığı zaman network üzerinden bütün ATM’lere bu bilgi gidiyor ve bütün ATM’lerdeki bu kullanıcıya ait bakiye güncelleniyor. Para çekme işlemi yapıldığında da aynı senaryo gerçekleşiyor. Veri tutarlılığını bu şekilde sağlıyorlar.

Ortaya bir network partition sorunu çıkarsa, ATM’ler birbirleri ile iletişim kuramayacak hale gelirse consistency ve availability arasında bir seçim yapılmış olmalı.

Eğer consistency seçilirse, banka müşterileri ATM’lerin hiç birinden para yatırma ve para çekme işlemlerini yapamayacak sadece bakiyesini görüntüleyebilecek, yani sistem availability’den ödün verilmiş olacak.

Availability seçilirse, banka müşterileri para yatırma ve para çekme işlemlerini yapabilecek. Burada şöyle büyük bir sorun ortaya çıkacak, merkezi bir noktada veriler tutulmadığı için müşterinin bankada 1000 doları varsa, A noktasındaki ATM’den 750 dolarlık bir para çekme işlemi yaptıktan sonra. B noktasındaki ATM’den de 1000 dolarlık bir para çekme işlemi yapabilecek ve bakiyesi toplamda -750 olacak. Çünkü A noktasında yapılan para çekme işlemi sistemin dağıtık olmasından dolayı B noktasındaki ATM’ye bildirilemedi ve orada bakiyesi hala 1000 dolar görünmeye devam etti.

Hybrid yaklaşım

Buna alternatif olarak gerçek hayatta yüzde yüz availability veya yüzde yüz consistency seçimi yapılamayabilir. Network partition ortaya çıktıktan sonra ATM’ler şu şekilde de bir davranış ile çalışmaya devam edebilirdi:

  • Bakiye görüntüleme
  • Düşük miktarlarda para çekme
  • Büyük miktarlarda para çekme ve yatırmayı engelleme

Sistemde meydana gelen sorun ortadan kalktıktan sonra veriler bir mutabakattan geçirilerek gerçekte olması gerektiği noktalara getirilebilir.

Sonuç

Dağıtık sistem tasarlarken, partition tolerance ile consistency ve availability arasında bir denge kurulmalıdır. Yüksek tutarlılık sağlamak istediğinizde, kullanılabilirlik veya bölünme toleransından, yüksek kullanılabilirlik sağlamak istediğimizde de tutarlılık veya bölünme toleransından ödün vermek zorunda kalabiliriz.

Nelerden ödün vereceğimiz yapılan işin gereksinimlerine göre değişecektir. Bir sosyal medya uygulamasının sistem tasarımında kullanılabilirlik ön planda olması gerekirken, finansal bir iş için yapılan sistemin tasarımında veri tutarlılığının ön planda olması gerekir.

--

--