CAP teoremi, dağıtık bir sistemin en çok istenen üç özellikten sadece ikisini sağlayabileceğini söyler. Bu özellikler Tutarlılık (Consistency), Erişilebilirlik (Availability) ve Bölünme Toleransı (Partition Tolerance)‘dır. Bu özelliklerden sadece ikisinin üst düzeyde sağlanabileceğini bilmek, bize ihtiyaçlarımıza uygun dağıtık sistemi seçmekte yardımcı olacaktır.
Consistency (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.
Sisteme iletilen herhangi bir okuma isteği her koşulda ilgili kayıt için yapılmış olan son güncel değeri getirebiliyor olmalıdır.Eğer getirilemiyorsa hata verilmeli ve asla güncelliğinden şüphe edilen veriler talep eden taraflarla paylaşılmamalıdır.
Availability (Kullanılabilirlik):Tüm serverlar tüm requestlere doğru ya da hatalı sonuç dönebiliyor mu? Eğer dönebiliyorsa available diyebiliriz. Burada hatalı sonuç dönmekten kasıt aslında tutarlı yani güncel olmayan bir sonuç dönmektir. Yani serverlarınız ya günceldir (consistent) doğru sonuç döner ya da güncel değildir ve güncel olmayan sonuç döner. İki durumda da server avaliable’dır diyebiliriz.
Partition Tolerance (Hata Toleransı) :
Burada partition ile kastedilen aslında network bölünmesidir. Yani sisteminizin parçalarının farklı networklerde bulunma durumudur.
Partition Tolerance ise nodelar arasında yaşanabilecek herhangi bir iletişim sorunu durumunda sistemin hayatına devam edebilmesidir.
Bir node başka nodelarla iletişim sorunu yaşarken, bir istemci tarafından direkt olarak erişilebilir durumda olabilir. Bu da ilgili node üzerinde yapılabilecek olan herhangi bir işlemden diğer nodeların haberdar olamaması ya da haberdar etmenin zorunlu olduğu koşullarda ise erişilebilir olamaması anlamına gelir.
(CA) İse Neden (P) olamıyor
Sunucularınızın arasındaki ağ bağlantısı gitmiş. Siz gittiniz birinci sunucuya yazdınız, yukarıdaki resimde görüldüğü gibi diğer sunuculara verinin güncel halini gönderemedi. 2nci, 3ncü sunucuya veriyi sorduğunuzda verinin olmadığını veya 1nci sunucu ile aynı olamadığını göreceksiniz. Yani sistem CA olduğu zaman P(Partition Tolerance) olamıyor.
Veriniz parçalanmaya toleranslı değil.Verinin doğruluğunun kesin olmasını istediğimiz Müşteri işlemleri, finansal işlemler vb. bu çok önemlidir. İlişkisel veritabanları ve transactional işlemler buna uygun veriler tutar.
(AP) İse Neden (C) olamıyor
2 sunucunuz(server) olduğunu düşünelim X değeri 2 sunucuda da bulunuyor. Sunucular arası ağınız çöktü. Sunuculardan birinde X değerini güncellediniz. Sorguladığınızda iki sunucu ayrı değer vereceği için bu durumda C(Consistent) olamıyor. Bir sunucu X değeri için 5 , bir diğeri 4 değerini dönebilir.
Sosyal medyadan twitter veya facebook akan verilerde bunlar kullanılabilir. Like sayısını düşünün o anda her kişinin doğru şekilde görmesi/görmemesi önemli değildir. Burada bu veriler parçalanarak tutulabilir. NoSQL veritabanlarından Cassandra, Dynamo gibi sistemler buna uygundur. Eventual Consistency yöntemi ile arkaplanda Node’lardaki veriler eşleştirilir. Bu eşleştirmeden önce yapılan sorgularda veri değerlerinde tutarsızlıklar olabilir.
(CP) İse Neden (A) olamıyor
Eğer amacınız hem tutarlılık, hemde verinin parçalara bölünerek kaydedilebilmesi ise. 3 sunucu arasında bağlantı koptuğu andan itibaren A(Availibility) yazma özelliğiniz ortadan kalkacaktır. Eğer ki yazarsanız tutarlılığı bozarsınız. Bu yüzden sadece okuma yapabilirsiniz bu durumda.
MongoDB veritabanı gibi sistemler CP uygundur. Default’ta strongly consistent’ dır.
Sisteminizde nodelar arasında eğer bir iletişim sorunu yaşanıyorsa aşağıdaki şu iki duruma karar vermeniz gerekiyor.Mevcut operasyonu iptal et, sistemin tutarlılığını sağlamış ol ancak erişilebilir olmaktan vazgeç.
1 - Mevcut operasyonu iptal et, sistemin tutarlılığını sağlamış ol ancak erişilebilir olmaktan vazgeç.
2 - Mevcut operasyonu ve sistemdeki tüm nodeların o anda aynı veriye sahip olamayacağını kabul et ve yüksek erişilebilirlik sağlamaya çalış.
Hiç yorum yok:
Yorum Gönder