قضیه CAP و مدلهای سازگاری
قضیه CAP بیان میکند که یک ذخیرهگاه داده توزیعشده که با تقسیمبندی شبکه مواجه است، باید یا سازگاری یا دسترسیپذیری را قربانی کند، و مدلهای سازگاری دقیقاً مشخص میکنند که یک سیستم چه تضمینهایی در مورد قابلیت مشاهده و ترتیب بهروزرسانیها ارائه میدهد.
Definition
قضیه CAP ادعا میکند که یک سیستم داده مشترک شبکهای میتواند حداکثر دو مورد از سازگاری، دسترسیپذیری و تحمل تقسیمبندی را به طور همزمان تضمین کند؛ یک مدل سازگاری قراردادی است که مشخص میکند یک برنامه ممکن است چه چیزی را در مورد ترتیب و قابلیت مشاهده خواندنها و نوشتنها در میان نسخههای تکراری مشاهده کند.
Scope
این موضوع قضیه CAP و فرمولبندی رسمی آن، برداشت عملی مبنی بر اینکه مبادله واقعی تنها در طول تقسیمبندیهای شبکه رخ میدهد، و پالایش PACELC حاصل از آن را پوشش میدهد. این موضوع طیف مدلهای سازگاری — از سازگاری قوی (خطیپذیر) از طریق سازگاری علّی تا سازگاری نهایی — و سبک BASE را که در تضاد با ACID است، در بر میگیرد. این موضوع به چگونگی هدایت طراحی ذخیرهگاههای داده تکراری توسط این مدلها میپردازد. پروتکلهای اجماع و تعهد مورد استفاده برای پیادهسازی سازگاری قوی، که تحت عنوان پایگاههای داده توزیعشده پوشش داده میشوند، از این بحث مستثنی هستند.
Core questions
- سازگاری، دسترسیپذیری و تحمل تقسیمبندی در CAP دقیقاً به چه معنا هستند؟
- چرا انتخاب واقعی بین سازگاری و دسترسیپذیری تنها در طول یک تقسیمبندی اجباری میشود؟
- سازگاری قوی، علّی و نهایی در تضمینهای خود چه تفاوتی دارند؟
- سازگاری نهایی چه چیزی را وعده میدهد و چه چیزی را وعده نمیدهد؟
- فلسفه BASE چگونه با ACID در تضاد است؟
Key concepts
- سازگاری، دسترسیپذیری، تحمل تقسیمبندی
- تقسیمبندی شبکه
- خطیپذیری / سازگاری قوی
- سازگاری علّی
- سازگاری نهایی
- PACELC
- BASE در مقابل ACID
- حل تعارض
Key theories
- قضیه CAP
- CAP که توسط گیلبرت و لینچ رسمی شد، نشان میدهد که وقتی شبکه تقسیم میشود، یک ذخیرهگاه تکراری باید بین بازگرداندن دادههای احتمالاً قدیمی (دسترسیپذیری) و رد سرویس برای حفظ یک مقدار سازگار واحد (سازگاری) یکی را انتخاب کند؛ تحمل تقسیمبندی در شبکههای واقعی اختیاری نیست.
- طیف سازگاری
- مدلهای سازگاری از سازگاری قوی (خطیپذیر)، که در آن خواندنها همیشه جدیدترین نوشتن را میبینند، از طریق سازگاری علّی، که ترتیب علت و معلول را حفظ میکند، تا سازگاری نهایی، که در آن نسخههای تکراری در طول زمان در غیاب نوشتنهای جدید همگرا میشوند، متغیر هستند.
- BASE در مقابل ACID
- سیستمهای با دسترسیپذیری بالا اغلب سبک BASE را اتخاذ میکنند — اساساً در دسترس، حالت نرم، در نهایت سازگار — که عمداً تضمینهای قوی ACID را برای پاسخگویی در شرایط تقسیمبندی و در مقیاس بزرگ، کاهش میدهند.
Clinical relevance
CAP و مدلهای سازگاری، انتخاب اصلی طراحی در سیستمهای داده توزیعشده را شکل میدهند: اینکه آیا یک ذخیرهگاه در صورت خرابی شبکه، پاسخگویی همیشگی (دسترسیپذیری) یا پاسخگویی صحیح همیشگی (سازگاری) را اولویتبندی میکند، تصمیمی که رفتار و تضمینهای هر برنامه توزیعشده جهانی را شکل میدهد.
History
اریک بروئر مبادله CAP را در حدود سال 2000 مطرح کرد؛ گیلبرت و لینچ آن را به طور رسمی در سال 2002 اثبات کردند. Dynamo آمازون (2007) و مقاله ووگلز در سال 2009، سازگاری نهایی را در عمل رایج کردند. بازنگری بروئر در سال 2012 روشن کرد که CAP تنها در طول تقسیمبندیها، سازگاری و دسترسیپذیری کامل را ممنوع میکند، و فرمولبندی PACELC بعدها مبادله تأخیر-سازگاری را در حالت بدون تقسیمبندی اضافه کرد.
Debates
- مبادله سازگاری-دسترسیپذیری چقدر اساسی است
- برداشتهای اولیه CAP را به عنوان اجبار به انتخابی دائمی بین سازگاری و دسترسیپذیری تلقی میکردند؛ تحلیلهای بعدی، از جمله بازنگری بروئر، استدلال میکنند که این مبادله تنها در طول تقسیمبندیها تأثیرگذار است و سیستمها میتوانند در غیر این صورت تا حد زیادی سازگار و در دسترس باشند، که نحوه محدود کردن طراحی توسط CAP را بازتعریف میکند.
Key figures
- Eric Brewer
- Seth Gilbert
- Nancy Lynch
- Werner Vogels
Related topics
Seminal works
- gilbert2002
- brewer2012
- vogels2009
Frequently asked questions
- آیا CAP به این معنی است که من فقط میتوانم دو مورد از سه ویژگی را داشته باشم؟
- عبارت رایج «دو مورد را انتخاب کن» گمراهکننده است. تحمل تقسیمبندی در یک سیستم توزیعشده واقعاً اختیاری نیست، بنابراین انتخاب واقعی بین سازگاری و دسترسیپذیری است، و این انتخاب تنها زمانی باید انجام شود که یک تقسیمبندی در حال وقوع است. هنگامی که شبکه سالم است، یک سیستم میتواند هم سازگاری و هم دسترسیپذیری را فراهم کند.
- سازگاری نهایی واقعاً چه چیزی را تضمین میکند؟
- این تضمین میکند که اگر هیچ بهروزرسانی جدیدی برای یک آیتم داده انجام نشود، همه نسخههای تکراری در نهایت به یک مقدار همگرا خواهند شد. این تضمین نمیکند که چه زمانی، و نه اینکه یک خواندن جدیدترین نوشتن را منعکس خواهد کرد، بنابراین برنامههایی که از سازگاری نهایی استفاده میکنند باید خواندنهای موقتاً قدیمی یا متناقض را تحمل کنند و اغلب خودشان حل تعارض را مدیریت کنند.