CAP Theorem Nədir?
Sistemlərin böyüməsi, əldə etdiyimiz əhəmiyyətli məlumatların həcminin artması, saxlanılması və emalında tək bir maşınla işləmək artıq kifayət deyil. Bu çatışmazlığın müxtəlif səbəbləri olsa da,bunları bir maşın işinin qeyri-adekvatlığı, hər hansı bir qəza zamanı sistemin vahid uğursuzluğu və müəyyən gecikmələrə səbəb ola bilməsi kimi sıralamaq olar. Məlumatlarımızı müxtəlif maşınlara paylamalı, yəni, distributed system-lər qurmalıyıq. CAP theorem-i distributed system qurarkən yadda saxlamalı olduğumuz teoremlərdən biridir.
CAP theorem ilk dəfə 1998 -ci ildə Eric Brewer tərəfindən dilə gətirilmişdir.Theorem-də deyilir ki, CAP heç bir halda mümkün ola bilməz. Bunlardan ancaq ikisi eyni anda mümkün ola bilər.CA,CP,AP
C →Consistency
A →Availability
P →Partition Tolerance
Gəlin bir-bir baxaq :
Consistency
Sistemin movcud vəziyyətinin qorunması deməkdir. Sistemə göndərilən sorğu bütün hallarda son yenilənmiş dəyəri gətirə bilməlidir. Əgər onu əldə etmək mümkün deyilsə aktuallığı şübhəli olan məlumatlar heç vaxt sorğunu göndərən tərəflə paylaşılmamalıdır.
Availability
Sistemin istənilən zaman əlçatan olmasıdır. Server sorğulara düzgün və ya yanlış nəticə qaytara bilərsə o zaman əlçatan olduğunu deyə bilərik. Burada düzgün və ya yanlış olması önəmli deyil əsas serverin cavab verə bilməsidir. Ümumilikdə serverin “server not responding” alıb almamasıdır məsələ.
Partition Tolarance
Node-lar arasında hər hansı bir əlaqə problemi yaranarsa belə sistemin öz işini davam etdirə bilməsidir. Məsələn, 3 server var: A,B,C.
A serveri B və C ilə əlaqəsi kəsilsə belə biz işimizə digər serverlərlə davam etdirə bilməliyik.
Consistent və Partiton Tolerance sistemlər(CP)
Əgər sistem CP üzərinə qurulubsa availability-ni unutmalıyıq.Buna səbəb nədir? Gəlin baxaq:
ATM sistemi üstündən baxaq məsələyə:
3 ATM-miz var:ATM-1 ,ATM-2, ATM-3
Sistemdə consistency varsa, mən bankomata pul qoyanda bütün digər bankomatlarda pulum yenilənir, gedib başqa bankomatdan pul çıxaranda və ya balansı sorğulayanda mövcud rəqəmi görə bilirəm.
Sistemdə partiton tolerance varsa, bankomatlardan biri şəbəkədən ayrıldıqda qalan bütün bankomatlar düzgün xidmət göstərə bilər.
Bu halda sistem availability niyə ola bilmir?
Çünki ATM-1 şəbəkə əlaqəsi kəsilib. Mövcud pulu əgərki yeniləsək ATM-1 -in bundan xəbəri olmayacaq bu halda consistency olmayacaqdır.Məcbur ATM-1 sondurməliyik yəni atm ekranında “server not responding” yazdırmalıyıq.
Available ve Partition Tolerance sistemlər(AP)
Yuxarıdakı ATM mövzusundan davam edək.
Sistemdə partiton tolerance varsa, bankomatlardan biri şəbəkədən ayrıldıqda qalan bütün bankomatlar düzgün xidmət göstərə bilər.
Burada availability məsələyə daxil olursa nə etməliyik? ATM-1 -in şəbəkə əlaqəsi itsə belə işlətməyə davam edəcəyik.Bu halda consistency halı məsələdən kənarlaşır.
Consistent ve Available sistemlər (CA)
Sistemdə consistency varsa, mən bankomata pul qoyanda bütün digər bankomatlarda pulum yenilənir, gedib başqa bankomatdan pul çıxaranda və ya balansı sorğulayanda mövcud rəqəmi görə bilirəm.
Əgər həm availability həmdə consistency olmağını isdəyiriksə ATM-1 sıradan cıxan kimi bütün ATM-lərin işi dayandırılmalıdır.
CA uyğun bazalar:
SQL Server , PostgreSql, Oracle , MySql və s
CP uyğun bazalar :
Redis , MongoDB və s
AP uyğun bazalar :
Cassandra, Dynamo, CouchDB