تئوری CAP نیز بیان همین مسئله در سیستم‌های پردازشی است؛ یعنی نمی‌توان سیستمی داشت که هم‌زمان سه ویژگی :

  1. Consistency یا پایداری
  2. Availability یا دسترس‌پذیری
  3. Partition tolerance یا تحمل‌پذیری در برابر جداسازی

که به‌اختصار CAP نامیده می‌شوند – را داشته باشد.
در این مقاله می‌خواهیم شما را با مفهوم تئوری CAP در سیستم‌های توزیع‌شده آشنا کرده و تأثیر این تئوری را در نحوهٔ طراحی، پیاده‌سازی و استفاده از سیستم‌های توزیع شده در این زمینه بررسی کنیم.

انواع سیستم‌های پردازشی

قبل از توضیح تئوری CAP، ابتدا بیایید انواع سیستم‌های پردازشی را بررسی کنیم. سیستم‌های پردازشی را می‌توان به دو نوع Commodity و Distributed تقسیم کرد:

سیستم‌های Commodity

سیستم‌های Commodity یا معمولی برای انجام کارهای ساده و معمولی طراحی شده‌اند که از نظر مشخصات سخت‌افزاری مانند سیستم کامپیوتر خانگی هستند.

سیستم‌های Distributed

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

تئوری CAP چیست؟

همان‌طور که در مقدمه بیان شد، سه ویژگی سیستم توزیع شده که قضیه CAP به آن‌ها اشاره دارد شامل Consistency، Availability و Partition tolerance می‌شود. طبق این تئوری نمی‌توان سیستم توزیع‌شده‌ای طراحی کرد که هم‌زمان این سه پارامتر در آن پیاده‌سازی شده باشد. پس بسته به نوع داده و نحوهٔ مدیریت آن می‌بایست بهترین انتخاب را برای مدیریت داده‌ها انجام داد.

تئوری CAP

تئوری CAP

Consistency سازگاری

به این معنی است که همه کلاینت‌ها، علی‌رغم اینکه به کدام گره یا Node (منور همان سرور است) متصل شده‌اند، بتوانند داده‌های یکسانی را در یک‌زمان مشاهده کنند. برای این‌که این اتفاق بیفتد، باید داده‌هایی را که روی یک گره قرار می‌گیرند، به‌سرعت روی تمام گره‌های دیگر سیستم ارسال شوند.

Availability دردسترس‌بودن

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

Partition tolerance

در سیستم توزیع شده، پارتیشن یک قطع ارتباط است؛ یعنی یک اتصال قطع شده بین دو گره را “پارتیشن” می‌گویند. تحمل پارتیشن (Partition tolerance) به این معنی است که علی‌رغم هر تعداد خرابی ارتباطی بین گره‌ها، سیستم به کار خود ادامه دهد و این آسیب از دید کاربر پنهان بماند.

ارتباط بین ویژگی‌های CAP

نکته مهمی که لازم است بدانید این است که سیستم توزیع شده به‌صورت پیش‌فرض باید Partition Tolerance باشد. بنابراین، نمی‌توان به طور هم‌زمان هر دو ویژگی “دردسترس‌بودن” و “پایداری” را در طراحی سیستم‌های توزیع‌شده منظور کرد.
برای مثال شرایط زیر را در نظر بگیرید:
اگر مقدار یک Node در چنین مجموعه‌ای در حال به‌روزرسانی باشد، در لحظهٔ Read/Write، آن Node از دسترس خارج می‌شود. سیستم توزیع شده در این حالت دیگر خاصیت Availability ندارد؛ اما اختلالی در عملکرد کلی مجموعه ایجاد نمی‌شود. پس انتخاب بین پایداری (C) و دسترس‌پذیر بودن (Availability) است که باید باتوجه‌به نیاز تعیین گردد.

تئوری CAP در انواع دیتابیس NoSQL

دیتابیس‌های NoSQL (No-Relational) در پردازش‌های ابری که زیر مجموعه‌ای از سیستم‌های توزیع شده هستند، نقش بسزایی دارند. پس جالب است تا نگاهی به نحوهٔ پیاده‌سازی تئوری CAP در این نوع از دیتابیس‌ها بیندازیم:

امروزه طراحی پیش‌فرض دیتابیس‌های NoSQL بر اساس ویژگی تئوری CAP (محدودیت در دارابودن هم‌زمان ویژگی‌ها) به انواع زیر تقسیم‌بندی می‌شوند:

تئوری CAP

تئوری CAP

طراحی دیتابیس CP

این دسته از دیتابیس‌ها دو ویژگی پایداری (C) و تحمل‌پذیری (P) را ارائه می‌دهند و ویژگی دسترس‌پذیری را حذف می‌کنند. به این معنا که اگر دادهٔ یک Node به‌روزرسانی نشده باشد، آنگاه آن Node از دسترس خارج می‌شود تا نتوان درخواستی را به آن Node ارسال کرد. دیتابیس Mongo مثالی برای این نوع عملکرد است.

طراحی دیتابیس AP

ویژگی دسترس‌پذیری (A) و تحمل‌پذیری (P) در برابر جداسازی Nodeها بدون امکان پایداری ارائه می‌شود. اگر به هر دلیلی بخشی از مجموعه از کار افتاد، هیچ Node یا گره‌ای از دسترس خارج نمی‌شود. اما، دیگر از نظر مقداری نمی‌تواند حاوی مقدار به‌روزرسانی شده باشد و تنها پس از رفع مشکل، Node ‌های آسیب‌دیده خود را با مقادیر جدید سینک می‌کنند. به‌عنوان‌مثال Cassandra یکی از این نوع دیتابیس‌ها محسوب می‌شود.

طراحی دیتابیس CA

ازآنجایی‌که این نوع از طراحی دیتابیس‌ها دارای ویژگی پیش‌فرض سیستم‌های توزیع شده یعنی Partition Tolerance نیستند، نقشی در پیاده‌سازی طراحی دیتابیس برای این نوع از سیستم‌های پردازشی ندارند.
در انتها لازم به ذکر است که در طراحی هرکدام از گروه‌های فوق، می‌توان چارچوب‌ها را بسته به نیاز تغییر داد.

کار با میکروسرویس‌ها

میکروسرویس‌ها اجزای برنامه‌ای هستند که به طور مستقل با هم جفت می‌شوند و از طریق یک شبکه با یکدیگر ارتباط برقرار می‌کنند. ازآنجایی‌که می‌توان میکروسرویس‌ها را هم در سرورهای ابری و هم در مراکز داده داخلی اجرا کرد، از آن‌ها برای ایجاد برنامه‌های ترکیبی و چند ابری استفاده می‌کنند.
درک قضیه CAP می‌تواند در طراحی برنامه‌های کاربردی مبتنی بر میکروسرویس و انتخاب بهترین دیتابیس برای آن کمک کند. برای مثال، اگر برنامه شما نیاز به تکرار سریع مدل داده دارد، اما می‌تواند سازگاری نهایی را تحمل کند، پایگاه داده‌ای از نوع AP مانند Cassandra یا Apache CouchDB می‌تواند مناسب باشد. ولی اگر برنامه شما به‌شدت به سازگاری داده‌ها بستگی داشته باشد، مانند یک برنامه تجارت الکترونیک یا یک سرویس پرداخت، بهتر است از دیتابیس رابطه‌ای مانند PostgreSQL استفاده کنید.

نتیجه گیری

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