تئوری سی‌ای‌پی

## قضیه CAP

**قضیه CAP** (C.A.P. Theorem)، که به‌عنوان **قضیه سه‌گانه** نیز شناخته می‌شود، یک اصل بنیادین در طراحی سیستم‌های توزیع‌شده است. این قضیه بیان می‌کند که در سیستم‌های توزیع‌شده، تنها می‌توان دو ویژگی از سه ویژگی اصلی را به‌طور همزمان تضمین کرد: **قابلیت دسترسی** (Availability)، **سازگاری** (Consistency) و **تحمل تقسیم‌بندی** (Partition Tolerance). قضیه CAP توسط **انریکو کَسِر** (Eric Brewer) در سال ۲۰۰۰ مطرح شد و یکی از اصول کلیدی در طراحی سیستم‌های پایدار و مقیاس‌پذیر به‌شمار می‌آید.

### مقدمه

در سیستم‌های توزیع‌شده، گاهی اوقات نیاز است که داده‌ها در مکان‌های مختلف ذخیره شوند و از طریق شبکه به‌هم متصل شوند. اما این فرآیند ممکن است با چالش‌هایی نظیر تقسیم‌بندی شبکه یا تأخیر در به‌روزرسانی داده‌ها مواجه شود. در این راستا، قضیه CAP راهنمایی می‌کند که کدام یک از ویژگی‌های اصلی سیستم باید اولویت داشته باشد.

### ویژگی‌ها

# **قابلیت دسترسی (Availability)**: قابلیت دسترسی به این معنی است که هر درخواست به سیستم باید به‌طور معتبر پاسخ داده شود، حتی اگر برخی از گره‌ها یا داده‌ها در حال به‌روزرسانی باشند. در این حالت، سیستم همواره قادر به پاسخگویی است.

# **سازگاری (Consistency)**: در این حالت، تمامی گره‌ها پس از هر عملیات نوشتن، باید داده‌های به‌روز یکسانی را ذخیره کنند. یعنی وقتی یک داده در یک گره تغییر می‌کند، تمامی گره‌ها باید این تغییر را بلافاصله دریافت کنند.

# **تحمل تقسیم‌بندی (Partition Tolerance)**: این ویژگی بیان می‌کند که سیستم باید بتواند در صورت وقوع مشکلات شبکه‌ای (مانند قطع ارتباط میان گره‌ها)، به کار خود ادامه دهد. حتی اگر گره‌ها نتوانند با یکدیگر ارتباط برقرار کنند، سیستم باید همچنان عملکرد صحیحی داشته باشد.

### توضیحات تکمیلی

قضیه CAP به این نکته اشاره دارد که در صورت بروز تقسیم‌بندی شبکه، سیستم باید بین **قابلیت دسترسی** و **سازگاری** یکی را فدای دیگری کند. به عبارت دیگر، نمی‌توان در یک سیستم توزیع‌شده به‌طور همزمان تمامی این ویژگی‌ها را حفظ کرد.

* **سیستم‌هایی که قابلیت دسترسی را اولویت می‌دهند (AC)**: ممکن است داده‌ها را به‌طور همزمان به‌روز نکنند، اما همیشه به درخواست‌ها پاسخ داده می‌شود.
* **سیستم‌هایی که سازگاری را اولویت می‌دهند (CP)**: ممکن است قادر به پاسخگویی به درخواست‌ها در هنگام بروز تقسیم‌بندی نباشند، اما داده‌ها همیشه یکسان خواهند بود.
* **سیستم‌هایی که تحمل تقسیم‌بندی را اولویت می‌دهند (AP)**: ممکن است داده‌ها در برخی گره‌ها ناهماهنگ باشند، اما به‌طور پیوسته در دسترس خواهند بود.

### کاربردهای عملی

در دنیای عملی، بسیاری از سیستم‌های توزیع‌شده، به‌ویژه در زمینه‌های **پایگاه‌داده‌های NoSQL**, تصمیم می‌گیرند که کدام ویژگی‌ها را بر اساس نیازهای خاص خود اولویت دهند.

* **سیستم‌هایی مانند Cassandra**: بیشتر بر روی قابلیت دسترسی تمرکز دارند.
* **سیستم‌هایی مانند HBase**: بیشتر بر روی سازگاری تمرکز دارند.
* **سیستم‌هایی مانند CouchDB**: بیشتر بر روی تحمل تقسیم‌بندی تمرکز دارند.

### مثال‌ها

* **Cassandra** (AP): سیستم‌های NoSQL مانند Cassandra معمولاً به قابلیت دسترسی اولویت می‌دهند، حتی اگر این به معنای سازگاری فوری داده‌ها نباشد.
* **HBase** (CP): HBase یک سیستم توزیع‌شده است که به سازگاری داده‌ها اهمیت می‌دهد و از آنجایی که تقسیم‌بندی شبکه را تحمل می‌کند، قادر است به‌طور صحیح داده‌ها را همگام‌سازی کند.
* **CouchDB** (AP): CouchDB بر تحمل تقسیم‌بندی و قابلیت دسترسی تمرکز دارد و ممکن است داده‌ها به‌طور فوری همگام نشوند، اما سیستم قادر به ادامه کار خود است.

### نتیجه‌گیری

قضیه CAP به توسعه‌دهندگان سیستم‌های توزیع‌شده کمک می‌کند تا اولویت‌های طراحی خود را بر اساس نیازهای کاربردی و محدودیت‌های شبکه‌ای تعیین کنند. این قضیه تأکید دارد که برای ایجاد یک سیستم پایدار، لازم است تصمیمات آگاهانه‌ای در مورد اولویت‌بندی ویژگی‌های دسترسی، سازگاری و تحمل تقسیم‌بندی اتخاذ شود.

## منابع

* 
رده:رایانش توزیع‌شده
رده:سامانه‌های مدیریت پایگاه داده‌ها
* Eric Brewer. "CAP Twelve Years Later: How the "Rules" Have Changed". Computer, 2012.
* Cassandra
* HBase
* NoSQL