في هذه الصفحة
نظرية الـ CAP تُعد من النظريات الرائدة والرئيسية في دراسة النظم الموزعة، فهي توضح بكل بساطة الـ Trade-Offs التي ستفاضل بينها أثناء تصميمك للنظم الموزعة. لذا من الضروري جدًا معرفتها وفهمها جيدًا.
تقول نظرية الـ CAP Theorem الآتي:
أنه يستحيل على النظام أن يحقق أكثر من خاصيتين أثنتين من الثلاث الخصائص الآتية: Consistency, Availability, Partition Tolerance في آنٍ واحد. ولذلك يمكننا القول أن النظام الذي ستقوم بتصميمه إما أن يكون CP, AP.
ولكن لماذا لم نذكر الـ CA ؟
سنعرف هذا فيما بعد
ما هي الـ Consistency ؟
عرفنا سابقًا أن الـ Consistency تعني اتساق البيانات بينها وبين بعض، ولكن يُقصد بالـ Consistency هنا نجاح عملية القراة أو الـ Read Operation في قراءتها لآخر وأحدث التغييرات أي Write Operation وعدم قراءتها لـ Stale Data كما ذكرنا سابقًا.
ما هي الـ Availability ؟
عرفنا سابقًا أن الـ Availability تعني توفر النظام وقدرته على استكمال عمله بنجاح وبدون مشاكل حتى مع حدوث عطل أو مشاكل في أحد العقد أو مكوناته. ولكن يٌقصد به هنا نجاح عملية القراءة أو الـ Read Operation في قراءتها للبيانات بغض النظر عن إن كانت آخر التغييرات الحديثة أم لا. وهذا يعني أنه من الوارد قراءة Stale Data.
ما هي الـ Partition Tolerance ؟
يُقصد بالـ Partition Tolerance هنا استمرار النظام في أداء عمله بشكل جيد حتى مع وجود عطل أو Network Partition أي فقد الاتصال بين العقد أو المكونات وبعضها.
وهذه الخاصية على وجه التحديد لا يمكن اهمالها وهذا لإنه في عالم النظم الموزعة دائمًا ما يتواجد خطر حدوث عطل في التواصل بين العقد والمكونات وبعضها البعض لأي سبب من الأسباب.
وهذا هو السبب في عدم ذكرنا للـ CA:
وهذا لإنه إذا فكرنا مليًا سنجد أنه يستحيل على النظام أيًا كان ألا يحتوي على Partition Tolerance فهذا يعني أن ذلك النظام لن يتعطل ولن يكون عرضة لأي Failures وسيواظب عمله مدى الحياة، وهذا بالطبع مستحيل. فلذلك نحن نعتمد على النوعين الآخرين في تصميم النظم الموزعة
اعادة صياغة للـ CAP Theorem
لذلك دعونا نعيد صياغة تعريف الـ CAP Theorem كالآتي:
أنه في وجود Partition Tolerance أي عند حدوث عطل أو مشكلة في النظام إما سنحافظ على الـ Consistency وبالتالي سنتخلى على الـ Availability وإما سنحافظ على الـ Availability ونتخلى عن الـ Consistency. وهذه هي الـ Trade-Offs التي يجب علينا تحديدها عند تصميم النظم الموزعة.
لذا يمكننا أن نرى أنه في حالة الـ CP بما أننا نريد الحفاظ على الـ Consistency عند وجود Partition Tolerance فذلك سيعني بطبيعة الحال وجود Downtime من خلال جعل النظام غير قادر على استقبال الـ
أما في حالة الـ AP فنحن هنا نريد الحفاظ على الـ Availability وتوفر النظام وعدم وجود Downtime للمستخدمين ولكن في هذه الحالة نحن نتخلى عن الـ Consistency وهذا سيؤدي بطبيعة الحال لقراءة Stale Data ولكن في معظم الأنظمة يتم تجاهل ذلك وذلك لإن البيانات ستكون Consistent مع بعضها بمرور الوقت. أي أن هذا النوع يعتمد على الـ Eventual Consistency والذي ذكرناه سابقًا.