8 Ocak 2017 Pazar

NoSQL Dünyası - 3 (CAP Teoremi)

Veri büyüklüğü, veri akış hızı, çeşitliliği, istemci sayısı vs. arttıkça veritabanı performansı bizi tatmin etmemeye başlar. Bu durumda veritabanı uygulamasının ayarlarında ve veritabanı tasarımında bazı değişiklikler yapılır. Yeni bakış açıları ve uygulanan ayarlar sonucunda ortaya çıkan performans çoğunlukla tatmin edici olur. Fakat bazen ihtiyaçlar öyle bir noktaya varır ki altyapıda da bir takım değişiklikler yapmak gerekir.

Tatmin edici performans değerlerine ulaşabilmek için sisteminizde iki tür ölçeklendirme yapabilirsiniz; Dikey ölçeklendirme (Vertical Scale Out) ve yatay ölçeklendirme (Horizontal Scale Out). Mesela; cihazınızın donanımlarını güçlendirdiğinizde (örneğin; bellek, işlemci vs. eklediğinizde) dikey ölçeklendirme yapmış olursunuz. Birden fazla cihazı aynı amaç uğruna kullanabilmek için birbirine bağladığınızda ise yatay ölçeklendirme yapmış olursunuz.

Ölçeklendirme kısmının detayı için bir önceki yazımızı inceleyebilirsiniz;
http://www.abdullahkise.com/2016/02/nosql-dunyas-2-veri-tutarllk-modelleri.html

Yatay Ölçeklendirme ile Gelen Yeni Oyun Kuralı : CAP Teoremi


Eğer tek bir bilgisayarın performansı size yetmiyorsa. Özellikle geleneksel veritabanları ile çalışma konusunda bir engeliniz de yoksa tercihinizi birden fazla bilgisayarın görev aldığı yatay ölçeklendirmeden yana kullanabilirsiniz. Hatta bazen yatay ölçeklendirme bir zorunluluk haline gelir.

Yatay ölçeklendirme yapıldığında ortaya dağıtık sistemler çıkar. Dağıtık sistemler birden fazla birbirine bağlı düğümden (basitçe bilgisayar olarak kabul edebiliriz. Sanal makine, bir uygulama kurulumu vs. olabilir.) oluşan ve aralarında çeşitli kurallara göre verileri paylaşabilen bir ekosistem oluşturur. Bu ekosistemdeki temel kural da CAP teoremi ile ifade edilmektedir. CAP teoremi birden fazla düğümün iş birliği yaptığı sistemlerde ortaya çıkan durumları açıklar.

CAP teoremi aşağıda bahsedeceğimiz özelliklerin ilk harfleriyle isimlendirilmiştir.

CAP teoremi der ki; Dağıtık sistemlerde aynı anda aşağıdaki üç özelliğin sağlanması mümkün değildir. 

Özellikler şunlar;
  • Consistency (Tutarlılık): Tüm düğümlerde aynı anda aynı veri görünür. Yani en son değişikliklerin tüm düğümlerde yerini alması garantidir.
  • Availability (Erişebilirlik - Müsait Olmak):  Her istek sistem tarafından cevaplanır. Yani sistem hatalı veya başarılı tüm taleplere beklendiği gibi cevap verir.
  • Partition Tolerance (Parça Toleransı - Parçanın Eksilmesine Tolerans): Bir kısmı zarar görse de sistem çalışmaya devam eder. Yani bazı düğümler çalışmasa da veya düğümler arası ağda bir hasar olsa da işler aksamaz. Tabi ki makul seviyede bir bozukluktan bahsediyoruz. Tüm sistemi çalışmaz hale getirecek hasarlar her zaman olasıdır.
Teorem gereği dağıtık sistemlerde bu özelliklerden aynı anda en fazla iki tanesi sağlanabilir. Bir tanesinden feragat edilir. Ortaya çıkan alternatif hallerden iş modelinize uygun olanını belirlemeniz 500'den fazla NoSQL veritabanı teknolojileri arasından size en uygun olanını bulmanızda büyük kolaylık sağlar. Mevcut sisteminizin iş modelinizle uyumlu olup olmadığını bir dereceye kadar bu teorem üzerinden sorgulayabilirsiniz.

CAP teoremi, dağıtık sistemlerdeki alternatif hallerin şunlar olduğunu bize ifade eder:
  • Consistency & Availability (CA): Tüm değişiklikler aynı anda tüm düğümlerde görünür ve sistem tüm isteklere cevap verir. Ancak bir şekilde düğümler zarar görürse sistem kitlenir. İstemciler bloklanır. Bütün RDBMS'ler bu gruba dahildir. Tabi ki bu tarz durumlar için bazı RDBMS teknolojilerinde sadece okumaya yönelik de olsa hizmet devam edebilmektedir. Çoğunlukla veri tutarlılığının her şeyden daha fazla ön planda olduğu sistemler için ideal durumdur. Mesela para transfer işlemleri böyledir.
  • Consistency & Partition Tolerance (CP): Bir kısmı zarar görse de sistem çalışmaya devam eder ve tüm düğümlerde aynı veri görünür. Tutarlı olmayan verinin gösterilmemesi için bazı verilere erişim sağlanamayabilir. Yani ‘Availability’den feragat edilir. Fakat erişilen veride tutarlılık korunur. Çoğunlukla veri yazılan iş modelleri için ideal durumdur. Örneğin bir cihaz veya uygulama hareketlerinin loglanması böyledir.
  • Availability & Partition Tolerance (AP): Bir kısmı zarar görse de sistem hizmet vermeye devam eder ve iş yüküne bağlı olarak değişen cevaplar istemciye iletilir. Güncel olmak veya tutarlılık garanti edilmez. Çoğunlukla veri okuma yapılan, tutarlılığın değil de erişilebilirliğin ön planda olduğu iş modelleri için ideal durumdur. Örneğin sosyal medya mesajlaşmaları böyledir.

CA ve CP modellerinde genellikle tüm talep ve takipten sorumlu bir master olur. AP modelinde ise genellikle master olmaz. Genellikle ifadesini kullanıyorum çünkü farklı mimari tasarımlar yapılabilmektedir.

Düğümler arası iletişim kesildiğinde ortaya çıkacak sonuçları şu çizimle ifade edebiliriz:


Gecikme (Latency) de devreye girdiğinde bu teorem geçerliliğini yitiriyor gibi görünüyor. Yani geç cevaplar almak sizin için problem değilse üç özellik de sağlanabilir. Tabi ki tatmin edici sonuçlar alabilmek için teknolojinin insan algısının altında bir gecikme sunması gerekir. Şimdilik bu konu tartışmaya açık. Burada üzerinde durmayacağım.

CAP Teoremine Göre NoSQL Teknolojileri


Dağıtık sistemler üzerinde konumlanan NoSQL teknolojileri CAP teoremine uygun şekilde hizmet verir. En yaygın NoSQL teknolojilerini varsayılan ayarları göz önünde tutularak CAP teoremine göre şu şekilde guruplayabiliriz:


Bir önceki yazımızda bahsettiğimiz ACID ve BASE isimli veri tutma yaklaşımları da CAP teoremi ile ilişkilidir. Ancak birlikte anlatıldığında kafa karışıklığına yol açabilmektedir. CAP teoremi dağıtık sistemlerin hangi alternatif durumlarda olabileceğini ifade eder. ACID ve BASE ise veritabanı sistemlerinin tutarlılığı sağlama konusundaki yaklaşım tarzını ifade eder. Tabiri caizse ACID tutarsızlık olmaması için çok pimpirikli davranıldığını anlatırken, BASE bu konuda oldukça rahat davranıldığını ifade eder. Dağıtık sistemlerin doğasında BASE yaklaşımı vardır.

Eric Brewer'in 1999 yılında yayınladığı CAP teoreminin etkilerini birlikte çalışan parçaların olduğu her sistemde görmek mümkün. Bir ekip çalışmasında bile bu teoremin işlediğini görebilirsiniz. Fakat bizim bu seride odaklandığımız konu dağıtık sistemler üzerinde çalışan NoSQL veritabanlarının karakteriydi. 500'den fazla NoSQL veritabanı teknolojisi var. Neredeyse her biri kendi nevi şahsına munhasır. Sonuç olarak iş modelinize uygun bir NoSQL teknolojisi seçebilmek için CAP teoreminin sesine kulak vermeniz gerekir.

Tüm bu teknolojileri Microsoft Azure üzerinde kolayca test etmeniz mümkün. Şu linki takip edebilirsiniz: https://azure.microsoft.com/