Merhaba arkadaşlar bugün 1998’de Eric Brewer tarafından ortaya atılan distributed(dağıtık) sistemleri konu alan CAP Teoreminden bahsetmeye çalışacağız.
Cap Teoremi, dağıtık sistemlerde veri üzerinden sunulan hizmetlerin Consistency(Tutarlılık), Availability(Erişilebilirlik), Partition Tolarance (Bölünebilme Toleransı) özelliklerinden yalnızca 2 sine aynı anda sahip olabileceğini belirtir.
Gelin bu kavramları basitçe açıklayamaya ve oluşabilecek CA,CP,AP seçimlerini incelemeye çalışalım.
Öncelikle ufak bir tanımlama ile aşağıda geçireceğimiz node kavramını tanımlayalım.
Node : Dağıtık bir sistemde network aracılığıyla başka nodelar ile iletişime geçebilen makine ya da sunucuya verilen isimlendirmedir.
Consistency(Tutarlılık): Dağıtık sisteme atılan okuma sorgularında istenilen kayıtın son güncel değerinin getirilebiliyor olması gereklidir. Verinin güncelliğinin garanti edilemediği durumlarda veri talep eden tarafla paylaşılmamalıdır.
Availability(Erişilebilirlik): Dağıtık sisteme yapılan isteklere herhangi bir anda cevap verebilmesi o sistemin high availabilitye sahip olduğunu yani yüksek erişilebilirlik sağladığını gösterir. Sistemde ki nodelardan biri çalışmasa bile diğer nodelar üzerinden taleplere cevap verilebilir.
Partition Tolarance(Bölünebilme Toleransı): Nodelar arasında yaşanacak herhangi bir iletişim sorununda sistemin hayatına devam edebilmesi gereklidir.
CA(Consistency — Availability)
Partition Tolarance feragat ederek sisteminizin tutarlı ve erişilebilir olması gereken durumlar için seçilir. Nodelar arası iletişim kaybolduğunda ise bunu tolere edemez.
Verilerin doğruluğunun garanti edilmesini istediğimiz durumlarda uygundur. (İlişkisel databaseler, transactional işlemler)
Örnek: Microsoft Sql Server
Ap(Availability — Partition Tolarance)
Nodelar arası bir iletişim sorunu varsa bunu diğer nodelara haberdar etmek için erişilebilirlikten ya da haberdar etmeyerek Consistency den feragat edilir.
Yani Partition Tolarance seçildiği durumda ya Availability ya Consistency arasında bir seçim yapılması gerekir. Bu senaryoda Availability seçildiği için nodelar arası iletişim koptuğunda sistem ayakta kalmaya ve erişilebilir olmaya devam edecektir. Fakat data tutarlı olmayacaktır. Yani bir değer nodelardan birinde farklı sonuç dönerken başka node üstünden farklı sonuç elde edilebilir.
Veri tutarlılığının garanti edilmesine ihtiyaç duymadığımız durumlarda uygundur. Sosyal medya uygulamalarında yer alan beğeni sayısı, paylaşım akışı düşünülebilir. Biraz daha farklı bir bakış açısı için Eventual Consistency kavramı araştırılabilir.
Örnek: Cassandra
CP(Consistency — Partition Tolarance)
Yukarıda belirttiğimiz gibi Partition Tolarance seçilirse Availability-Consistency kavramlarından birinden feragat edilir. Burada seçim veri tutarlılığı üzerinden yapılarak Erişilebilirlik kısmından feragat edilir.
Yani nodelar arası iletişimde bir problem olduğunda sistem çalışmaya ve veri tutarlılığını sağlamaya devam eder fakat tutarlı olmayan verilerin gösterilmemesi için erişilebilirlikten feragat edilir.
Veri yazmak üzerine kurulu iş modelleri için uygundur. (Uygulama logları)
Örnek : Redis
Cap Teoreminden bahsetmeye açıklamaya çalıştım, umarım faydalı olmuştur. Yararlandığım kaynaklarıda aşağıda paylaştım isteyenler göz atabilir.
Kaynak
https://www.analyticsvidhya.com/blog/2020/08/a-beginners-guide-to-cap-theorem-for-data-engineering/
https://barisvelioglu.net/cap-teorem-nedir-53557407bdef
https://dzone.com/articles/understanding-the-cap-theorem
https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e