تئوری CAP که بهعنوان قضیه بروئر (Brewer) نیز شناخته میشود، توسط اریک بروئر (Eric Brewer) در سال 1998 بهعنوان یک نظریه در سیسمهای توزیع شده مطرح شد و در سال 2002، توسط سث گیلبرت (Seth Gilbert) و نانسی لینچ (Nancy Lynch) بهعنوان یک قضیه اثبات شد.
این تئوری شامل سه ویژگی زیر است:
- سازگاری (consistency): سازگاری یک ویژگی است که اطمینان میدهد همه گرهها در یک سیستم توزیعشده یک کپی واحد و یکسان از دادهها دارند.
- در دسترس بودن (Availability) : به این معنی است که گرههای موجود در سیستم، برای استفاده در دسترس هستند و درخواستهای دریافتی را میپذیرند و در صورت لزوم بدون هیچگونه خطایی پاسخ میدهند. بهعبارتدیگر، دادهها در هر گره در دسترس هستند و گرهها به درخواستها پاسخ میدهند.
- تحمل پارتیشن (Partition tolerance): تحمل پارتیشن اطمینان میدهد که اگر گروهی از گرهها به دلیل خرابی شبکه قادر به برقراری ارتباط با گرههای دیگر نباشند، سیستم توزیعشده به درستی به کار خود ادامه میدهد.
تئوری CAP بیان میکند که یک سیستم توزیعشده نمیتواند بهطور همزمان از سه ویژگی سازگاری، در دسترس بودن و تحمل پارتیشن برخوردار باشد و فقط امکان فراهم کردن دو گزینه وجود دارد.
انتخاب Availability و Partition
انتخاب A,P نشاندهنده این موضوع است که در دسترس بودن سیستم و سرعت بیشتر آن، اولویت بالاتری نسبت به ثبات اطلاعات در لحظه دارد.
انتخاب consistency و Partition
C,P در تئوری cap به معنی این است که سازگاری داده برای شما ارزش بیشتری دارد. انتخاب A,P یا C,P کاملا به ماهیت برنامه و سیستم بستگی دارد. بهعنوان مثال تصور کنید که یک سیستم توزیعشده با دو گره وجود دارد. حال اجازه دهید سه ویژگی این قضیه را در این سیستم توزیعشدهی کوچک متشکل از دو گره اعمال کنیم.
- Consistency: اگر دو گره وضعیت مشترک و یکسانی داشته باشند، سازگاری حاصل میشود. یعنی آنها کپی بهروز از دادهها را دارند.
- Availability: درصورتی که هر دو گره فعال باشند و با آخرین نسخه از دادهها بهروز باشند، در دسترس بودن حاصل میشود.
- Partition tolerance: در صورتی حاصل میشود که ارتباط بین دو گره قطع نشود (یا به دلیل مشکلات شبکه، خطاهای بیزانس و غیره) و گرهها قادر به برقراری ارتباط با یکدیگر باشند.
یکی از راههای در دسترس بودن داده در سیستمهای توزیعشده استفاده از تکنیک replication است. یعنی یک کپی از داده در همه نودها باشد.
به این ترتیب اگر یکی از نودها خراب شد، دادهها از سایر نودها قابل دسترس باشد. اما این موضوع با سازگاری مغایرت دارد. چون اگر نود خراب به سیستم برگردد دادهی بهروز شده ندارد.
تئوری CAP و بلاکچین
در بلاکچین سازگاری با استفاده از الگوریتمهای اجماع حاصل میشود تا اطمینان حاصل شود که همه گرهها نسخه یکسانی از دادهها دارند. به این کار تکثیر ماشین صورت وضعیت (state machine replication) نیز گفته میشود.
بلاکچین ابزاری برای دستیابی به state machine replication است. به نظر میرسد که تئوری CAP در بلاکچین نقض شده است، بهویژه در بیت کوین. اما اینچنین نیست.
در بلاک چین، سازگاری (Consistency) فدای دسترسپذیری و تحمل پارتیشن میشود. در این سناریو، سازگاری (C) در بلاکچین همزمان با تحمل پارتیشن (P) و دردسترس بودن (A) حاصل نمیشود.
اما با گذشت زمان سازگاری حاصل میشود که به آن سازگاری نهایی (eventual consistency) گفته میشود. در «سازگاری نهایی» سازگاری درنتیجه اعتبار سنجی توسط گرههای متعدد در طول زمان حاصل میشود. مفهوم استخراج در بیت کوین برای این منظور مطرح شد. استخراج فرآیندی است که دستیابی به اجماع را با استفاده از الگوریتم اجماع اثبات کار (POW) تسهیل میکند.
تئوری CAP بیان میکند که یک سیستم توزیعشده نمیتواند بهطور همزمان از سه ویژگی سازگاری، در دسترس بودن و تحمل پارتیشن برخوردار باشد و فقط امکان فراهم کردن دو گزینه وجود دارد.
سازگاری (consistency) یک ویژگی است که اطمینان میدهد همه گرهها در یک سیستم توزیعشده یک کپی واحد و یکسان از دادهها دارند.