قضیه CAP

قضیه CAP: در شبکه پارتیشن‌شده باید بین سازگاری و دسترس‌پذیری یکی را انتخاب کنیم + توسعه PACELC

قضیه بنیادین سیستم‌های توزیع‌شده

CAP Theorem (بروئر، ۲۰۰۰): یک سیستم توزیع‌شده نمی‌تواند هم‌زمان هر سه را داشته باشد:

چرا P قابل حذف نیست؟

شبکه همیشه ممکن است قطع شود (کابل، دیتاسنتر، اینترنت) — P اجباری است! پس انتخاب واقعی:

CP: سازگاری را نگه دار، بعضی درخواست‌ها را رد کن
AP: پاسخ بده، حتی اگر داده قدیمی باشد

مثال ملموس: دو دیتابیس، شبکه قطع!

کاربر A → DB1: موجودی را ۹۰ تومان کرد
شبکه بین DB1 و DB2 قطع!
کاربر B → DB2: موجودی را می‌خواند

CP: DB2 پاسخ نمی‌دهد («مطمئن نیستم») ← سازگار اما غیرقابل دسترس
AP: DB2 پاسخ می‌دهد: ۱۰۰ (قدیمی!) ← در دسترس اما ناسازگار

هیچ جادویی نیست — یکی را قربانی کن!

مثال‌های واقعی

سیستمانتخابچرا
پرداخت بانکیCPدو برداشت از یک موجودی = فاجعه!
تایم‌لاین شبکه اجتماعیAPپست چند ثانیه دیر = OK؛ سرویس پایین = فاجعه
سبد خریدAPسبد گم نشود؛ قیمت لحظه‌ای نه
موجودی انبارCPفروش کالای ناموجود = مشکل

PACELC — توسعه واقع‌بینانه

CAP فقط حالت «پارتیشن» را می‌بیند؛ PACELC اضافه می‌کند:

اگر Partition (P): انتخاب A یا C (مثل CAP)
وگرنه (Else): انتخاب Latency یا Consistency!

حتی بدون پارتیشن: همگام‌سازی سریع (C بالا، تأخیر نوشتن) یا async (سریع، کهنگی ممکن)!

سازگاری نهایی (Eventual Consistency)

انتخاب AP یعنی: داده‌ها «بالاخره» هم‌رنگ می‌شوند — نه فوراً! تایم‌لاین، DNS، سبد خرید — اکثر سیستم‌های بزرگ این‌طورند.

نکته مصاحبه: CAP را با مثال «پرداخت در برابر تایم‌لاین» توضیح دهید — نشان می‌دهد نه فقط قضیه را می‌دانید، بلکه در تصمیم واقعی به‌کار می‌گیرید.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط