بازگشت به کتابخانهکتابخانه3.5CAP و طیف Consistency
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 3.5فصل ۳لایه داده

CAP و طیف Consistency

  • ~۱۱ دقیقه
  • ۴ پرسش
  • متن را انتخاب کن تا هایلایت شود

دو شعبه بانک، خط تلفن بینشان قطع می‌شود. مشتری در شعبه الف می‌خواهد پول بردارد. شعبه ب همان لحظه موجودی را نمی‌داند. دو راه داری: بگویی «الان نمی‌شود» تا موجودی دروغ نگویی، یا پول بدهی و بعداً حساب را جور کنی. قضیه CAP همین دوراهی است وقتی شبکه پاره می‌شود.

Partition انتخاب تو نیست؛ کابل قطع می‌شود، سوییچ می‌میرد. هنگام Partition باید یکی را قربانی کنی: Consistency یا Availability. P اجباری است؛ انتخاب واقعی C در برابر A است.

دو شعبه بانک و خط تلفن قطع
خط بین دو شعبه پاره است. یکی باجه را می‌بندد تا دروغ نگوید؛ یکی هنوز سرویس می‌دهد، شاید با عدد کهنه. همان شغل CP در برابر AP.

سه حرف، سه شغل

CAP را مثل لغت‌نامه نخوان. بپرس در لحظه قطعی، سیستم چه قولی را نگه می‌دارد.

Consistency
هر خواندن، آخرین نوشته را ببیند — انگار فقط یک نسخه داده وجود دارد. شغلش جلوگیری از جواب کهنه است.
Availability
هر درخواست جوابی بگیرد، حتی اگر تازه‌ترین نباشد. شغلش باز ماندن باجه است.
Partition Tolerance
ادامه کار با وجود قطعی شبکه بین Node ها. اجباری است؛ پس انتخاب واقعی C در برابر A است.

CP یا AP — با صحنه

برگرد به دو شعبه. اگر موجودی را دوبار بدهی، فاجعه است. اگر تعداد لایک دو ثانیه عقب باشد، کسی نمی‌میرد. همین فرق، انتخاب را عوض می‌کند.

انتخابرفتار هنگام قطعیمثال درست
CPبخشی از سیستم جواب نمی‌دهد، ولی هرگز جواب کهنه نمی‌دهدموجودی بانک، صندلی باقی‌مانده، قفل توزیع‌شده
APهمه جواب می‌گیرند، شاید چند ثانیه کهنهتعداد لایک، فید، شمارنده بازدید، پروفایل

طیف Consistency — فقط دو سر نیست

دنیا سیاه‌وسفید C یا A نیست. بین «همیشه تازه» و «بالاخره یکی می‌شوند» چند پله هست. برای UX معمولاً لازم نیست گران‌ترین پله را بخری.

Strong
خواندن بعد از نوشتن، همیشه تازه. گران‌ترین. موجودی و صندلی این‌جا زندگی می‌کنند.
Read-Your-Writes
حداقل خودِ نویسنده تغییرش را ببیند. برای پروفایل و تنظیمات معمولاً کافی است؛ بقیه می‌توانند یک لحظه کهنه ببینند.
Eventual
بالاخره همه نسخه‌ها هم‌گرا می‌شوند. ارزان و پرکاربرد. لایک و شمارنده بازدید همین‌جا آسوده‌اند.

در مدل‌های Quorum — مثل Cassandra — با سه عدد بازی می‌کنی: N نسخه، W تأیید نوشتن، R نسخه برای خواندن. اگر W + R > N، خواندن و نوشتن حتماً همپوشانی دارند → Strong. مثلاً N=3 و W=2 و R=2. با W=1 و R=1 سریع‌ترین و ضعیف‌ترین.

به زبان ساده

وقتی خط بین دو شعبه قطع است، یا جواب نمی‌دهی تا دروغ نگویی، یا جواب کهنه می‌دهی تا باز بمانی.

مثال واقعی

برای لایک، چند ثانیه کهنگی بی‌ضرر است؛ برای آخرین صندلی کنسرت بهتر است خطا بدهی تا دوبار نفروشی.

دانش‌سنجی

آزمون درس

۴ Q
01
چرا می‌گوییم P در CAP انتخابی نیست؟
02
سیستم رزرو صندلی هواپیما هنگام قطعی شبکه باید…
03
N=3, W=1, R=1 چه رفتاری دارد؟
04
برای «تعداد بازدید ویدیو» کدام سطح Consistency منطقی است؟