kamer.dev

CAP Teorisi ve Blokzincir

- #blockchain

Dağıtık sistemler hakkında bazı tezler öne süren CAP teorisi, 2000 yılında Eric Brewer tarafından ortaya atılmış ve 2002 yılında Seth Gilbert ve Nancy Lynch tarafından ispatı yayınlanmıştır. O zamandan bu yana da birçok dağıtık sistemin tasarımını etkilemiştir. Peki CAP teorisi blockzincir teknolojisine dair düşüncelerimizi ne yönde etkileyebilir? Bu sorunun cevabını verebilmek için öncelikle CAP teorisini inceleyelim.

CAP Teorisi

Teori, veri paylaşımının yapıldığı dağıtık sistemlerin tasarımında bazı “trade-off”lara dikkat çeker. Bu sistemlerde aşağıda bahsedeceğim üç özellikten en fazla iki tanesinin garanti edilebileceğini öne sürer. Baş harfleriyle teoriye adını veren özellikler şunlardır:

Consistency(Tutarlılık): Ağda bulunan her düğümün(node) verilerin en güncel halini barındırmasıdır. Yani her düğümün aynı veriye sahip olmasıdır. Gilbert ve Lynch’in consistency yerine “atomic” kelimesini kullandıkları bu özellik hakkında belirlediği önemli bir ayrıntıyı gözden kaçırmamak lazım. Bir sistem ya “consistent”tır, ya da değildir. Yani yarım tutarlı ve büyük oranda tutarlı gibi ifadeler bu tanımın kapsamına girmez.

Availability(Ulaşılabilirlik): Tüm aktif düğümler kendilerine gelen bütün isteklere belli bir zaman içinde cevap vermek zorundadır. Burada tek gereklilik bütün isteklere cevap verilmesi. Verinin tutarlı olup olmaması bu özelliğin dışındadır. Diğer yandan ulaşılabilir bir sistemde mevcut düğüm cevap veremiyorsa da ağdaki işlemler devam eder.

Partition tolerance(Bölünme toleransı): Ağ problemlerinde sistemin devamlılığını sürdürmesidir. Ağ hatalarından dolayı sistemdeki düğümler bölünebilir. Bu gibi bölünmelerde A’nın veya C’nin sürdürülmesidir. Yani sistemin hata toleransı sağlamasıdır.

Yukarıdaki üç kavramın üçü de aynı anda sağlanamayacağından teori üç alt kategoriye ayrılıyor. Yani ikişer olarak bu kavramların başarıldığı kombinasyonlara.

1. CA

Teoriyi blokzincir ışığında değerlendirdiğimiz için bu ihtimal üzerine kafa yormaya gerek yok. Partition tolerance zaten blokzincirlerin karakteristik bir özelliği. Tek bir düğümü olan merkezi veritabanları bu kategoriye girer.

2. CP

Bu tip bir ağda partition durumunda tolerans sağlanır fakat verilerin tüm düğümler arasında güncel olup olmadığı sorusu bir zafiyete sebep olur. Çünkü bölünen düğümlerle iletişim kuramayız. Bu durumunda bir trade-off yapmamız gerekiyor. C’yi seçtiğimizde,verilerin güncel olmaması ihtimalinden dolayı hata mesajı göndererek cevap veririz.

3. AP

CP sistemlerdeki P için bir değişme yoktur. Fakat C ve A arasındaki seçimimizde tercih hakkımızı A’dan yana kullanırsak AP sisteme sahip oluruz. AP sistemde istemcilerden gelen tüm isteklere cevap verilir. Fakat partition durumunda bu verilerin en güncel olup olmadığı doğrulanmaz.

Blokzincir Ağları Hangi Özellikten Feragat Ediyor Olabilir?

Bu konuyu düşünürken hepimizin aşina olduğu Bitcoin örneği üzerinden ilerleyeceğim. Teoriye göre dağıtık bir sistemde bir özellikten feragat etmek zorundayız. Peki bitcoin hangisinden feragat ediyor? İhtimallerle beraber değerlendirelim.

Partition Tolerance: Önce bunu aradan çıkaralım. Herhangi bir blokzincirde partition tolerance’tan feragat edemeyiz. Zaten blokzincir teknolojisinin sağladığı en önemli şeylerden biri bu toleranstır.

Availability: Eğer bitcoinde availability’den feragat edilirse bir düğümde bağlantı problemi yaşandığında bitcoin transferleri duracaktır. Çünkü ulaşılabilir bir ağda mevcut düğümde problem yaşandığında da ağ işlevine devam eder.

Consistency: Tutarlılıktan feragat edersek de yine ciddi bir zafiyetimiz olur. Tutarlı olmayan hayali bir bitcoin ağında işlemlerin gerçekleştiği garanti edilemez. İşlemi başlatabiliriz fakat bu işlemin, yeterli sayıda düğüme ulaşmadığı için, gerçekleşmeme şansı olur.

Birer birer incelediğimizde üç özelliğin de eksikliği ciddi zafiyetler yaratacak gibi duruyor. Öyleyse Bitcoin, CAP teorisini çürütüyor mu?

Kısa cevap, hayır çürütmüyor. Uzun cevap için konudan sapmadan CAP teorisini biraz daha irdelememiz gerekiyor. Öncelikle şunu düşünelim, bir sistemin tutarlı olması için ne gerekir? Daha önce de bahsettiğimiz gibi tüm düğümler verilerin en güncel halini barındırmalı. Bunu sağlamak için de bölünme durumunda ağ bunu tespit edebilmeli. Her dağıtık sistem bunu sağlamak için farklı stratejiler kullanır. Bu stratejilerden biri de consensus(fikir birliği) algoritmalarıdır. Yani çoğunluğun fikir birliğine varması. Bitcoinde bölünme tespiti ve tutarlılık için fikir birliği algoritmaları ne kadar uygulanabilir? Daha açık bir ifadeyle şu an, şu saniye bitcoinde fikir birliğine varılması için kaç düğümün aynı fikirde olması gerekiyor? Bu sorunun cevabı çok değişken. Çünkü public bir ağ ve ağa katılmak, ağdan ayrılmak gibi işlemler çok kolay. Yani çoğunluk hesaplamak çok zor bir işlem. Hadi bunu örneklendirelim. Bir felaket sonucu Amerika kıtası ve dünyanın geri kalanı arasında internet erişiminin koptuğunu düşünün. Bu durumda bitcoin, tutarlılığını nasıl sağlayacak? Bitcoinin çalışma prensibini düşündüğümüzde böyle bir durumda iki zincir olacağını ve bitcoinin eskisi gibi çalışmaya devam edeceğini tahmin edebiliriz. Çünkü bölünme toleransı sayesinde sistem işlevselliğini devam ettiriyor. Ama tutarsız olarak. Çünkü iki farklı zincirde gerekli işlem gücü sağlandığında farklı işlemler devam edecek.

Bu durumda bitcoinin consistency’den, yani tutarlılıktan feragat ettiğini söyleyebiliriz. Yazının başından bu yana tutarlılık hakkında söylediklerim bitcoin için de geçerlidir. Bitcoinde bir işlem başlattığımızda bunun gerçekleşmeme olasılığı mevcuttur. Fakat elbette bu olasılık yukarıda bahsettiğim gibi ihtimali düşük senaryolar dahilinde gerçekleşir. Bitcoin tarihindeki forklara bakarsanız consistency problemlerinin zaman zaman yaşandığını ama yaşanan geçici problemlerin düzeltildiğini görebilirsiniz.

Yararlandığım Kaynaklar