در این مقاله میخواهیم با مفهوم تئوری CAP حول سیستمهای توزیعشده بیشتر آشنا شویم. در ادامه به بررسی تاثیر این تئوری در نحوهی طراحی، پیادهسازی و استفاده از سیستمهای توزیع شده در این زمینه میپردازیم.
آیا تاکنون تبلیغات اجاره یا فروش منزلی به این صورت دیدهاید؟
«ارزان، سریع و خوب؛ دو مورد را انتخاب کنید.»
این تبلیغ بدین معنیست که یا باید خانهای ارزان را انتخاب کنید که سریع به شما تحویل داده شود
یا خانهای ارزان و خوب انتخاب کنید که طی زمانی طولانی به شما تحویل داده میشود
و یا خانه ای خوب و با مدت زمان تحویل کوتاه انتخاب کنید اما هزینهی زیادی بابت آن بپردازید
به هرحال تجمیع تمامی موارد خوب، گاه امکانپذیر نیست.
منطق اصلی تئوری CAP بیان همین مساله در سیستمهای پردازشی میباشد. اینکه نمیتوان سیستمی داشت که همزمان سه ویژگی پایداری، دسترسپذیری و تحمل پذیری در برابر جداسازی Nodeها را داشته باشد.
انواع سیستمهای پردازشی
قبل از شروع بگذارید نگاهی به انواع سیستمهای پردازشی بیاندازیم.
سیستمهای Commodity:
اگر بخواهیم اشارهای به مفهوم سیستمهای Commodity یا معمولی نماییم باید گفت که این نوع از سیستمها برای انجام کارهای ساده و معمولی طراحی شدهاند و از نظر مشخصات سختافزاری مثل یک سیستم خانگی هستند.
سیستمهای Distributed:
با افزایش روز افزون حجم داده در مجموعهها و عدم توانایی پاسخ سیستمهای پردازشی معمولی بدلیل کمبود منابع سختافزاری نیاز به پیدایش راهکارهای جدیدی جهت پاسخگویی به این نیاز پدید آمد.
لازم به ذکر است که استفاده از سیستمهای پردازشی با مشخصات سختافزاری قویتر نیز جایگزین مناسبی نبوند، زیرا هزینههای سختافزاری زیادی برای نگهداری و تامین منابع به دنبال داشتند، از طرفی با محدودیت مشخصههای سختافزاری نیز روبرو بودیم.
در راستای حل موارد فوق، مجموعهای از سیستمهای معمولی در کنار هم قرار گرفتند و به هم متصل شدند. هرکدام از سیستمها را به عنوان یک Node در نظر میگیریم. این ارتباط میتوانست در بستر هر نوعی از شبکههای متفاوت اتفاق بیفتد. علاوه بر این، ارتباط بین Nodeها از دید کاربر پنهان بود و برای کاربر یک سیستم واحد بشمار میآمد. این مفهوم با نام سیستمهای توزیع شده شناخته شد. این مفهوم راهکار مناسبی در راستای کاهش هزینه و استفاده از حداقل سختافزار بسیار موثر واقع شد.
مفهوم تئوری CAP
با استفاده روزافزون از سیستمهای توزیعشده چالشهای جدیدی برای نگهداری، ذخیرهسازی و پردازش دادهها پیش آمد که نهایتا تحت عنوان یک تئوری به نام CAP مطرح شد.
در اینجا به تفصیل به توضیح در مورد آن خواهیم پرداخت:
CAP یا Consistency Availability Partition tolerance سه پارامتر اصلی در مدیریت دادهها و استفاده از سیستمهای توزیعشده است. مطابق این تئوری نمیتوان سیستم توزیعشدهای طراحی کرد که همزمان این سه پارامتر در آن پیادهسازی شده باشد. پس بسته به نوع داده و نحوهی مدیریت آن میبایست بهترین انتخاب را برای مدیریت دادهها انجام داد.
در ادامه با این سه ویژگی بیشتر آشنا خواهیم شد.
Consistency
در یک مجموعه بیانگر پایداری و استقامت آن مجموعه میباشد. یعنی اگر هر تغییری در دادهی یک Node صورت گرفت دیگر Nodeهای حاضر درسیستم این تغییر را ببینند. معمولا این اتفاق همزمان با یکسری تراکنش (Read/Write) روی کل Nodeها انجام میگیرد و در نهایت اگر به هر کدام از Nodeها درخواستی در رابطه با آن داده ارسال شود، تغییرات صورت پذیرفته باشد.
Availability
در یک مجموعه بیانگر در دسترس بودن همهی Nodeهای سیستم میباشد. یعنی اگر درخواستی به یکی از Nodeهای سالم سیستم ارسال شود در مدت زمان معقولی جواب از سمت آن دریافت شود.
Partition tolerance
این ویژگی در یک مجموعه باعث میشود تا اگر به هر دلیلی چند Node از مجموعه از کار افتاد، در عملکرد کلی مجموعه اختلالی ایجاد نشود و به سیستم درستی به کار خود ادامه دهد. همچنین این آسیب از دید کاربر پنهان میماند.
ارتباط بین ویژگیها
حال که با مفهوم کلی این تئوری آشنا شدیم، لازم است بدانیم که یک سیستم توزیع شده به صورت پیش فرض باید Partition Tolerance باشد. از طرفی میدانیم که نمیتوان به طور هم زمان هر دو ویژگی در دسترس بودن و پایداری را در اختیار داشته باشیم.
برای درک بهتر، در قالب یک مثال شرایط را در نظر میگیریم:
اگر مقدار یک Node در چنین مجموعهای در حال به روزرسانی باشد، در لحظهی Read/Write، آن Node از دسترس خارج میشود. پس عملا سیستم دیگر Availability ندارد و اختلالی در عملکرد کلی مجموعه ایجاد نمیشود. پس انتخاب بین پایداری (C) و در دسترس پذیر بودن (A) میباشد که این عمل باید با توجه به نیاز تعیین گردد.

پایگاههای داده
پایگاه دادههای NoSQL (No-Relational) در پردازشهای ابری که زیر مجموعهای از سیستمهای توزیع شده هستند، نقش بسزایی دارند. پس جالب است تا نگاهی به نحوهی پیادهسازی تئوری CAP در این نوع از پایگاه دادهها بیاندازیم:
امروزه طراحی پیش فرض پایگاه دادههای NoSQL بر اساس ویژگی تئوری CAP (محدودیت در دارا بودن همزمان ویژگیها) به انواع زیر تقسیم بندی میشوند:
طراحی پایگاه داده CP
این دسته از پایگاه دادهها ویژگی پایداری و تحمل پذیری را با هزینه در دسترس نبودن ارائه میدهند. به این معنا که اگر دادهی یک Node بهروزرسانی نشده باشد، آنگاه آن Node از دسترس خارج میشود تا نتوان درخواستی را به آن Node ارسال کرد. پایگاه دادهی Mongo مثالی برای این نوع عملکرد میباشد.
طراحی پایگاه داده AP
ویژگی دسترس پذیری و تحملپذیری در برابر جداسازی Nodeها را با هزینهی عدم پایداری ارائه میشود. اگر به هر دلیلی بخشی از مجموعه از کار افتاد، هیچ Nodeای از دسترس خارج نمی شود. اما دیگر از نظر مقداری نمی تواند حاوی مقدار بهروزرسانی شده باشد و پس از حل شدن از کار افتادگی، Nodeهای آسیب دیده خود را با مقادیر جدید سینک می کنند. به عنوان مثالCassandra یکی از این نوع پایگاه دادهها میباشد.
طراحی پایگاه داده CA
از آنجایی که این نوع از طراحی پایگاه دادهها دارای ویژگی پیش فرض سیستم های توزیع شده یعنی Partition Tolerance نمیباشند، نقشی در پیادهسازی طراحی پایگاه داده برای این نوع از سیستمهای پردازشی ندارند.
در انتها لازم به ذکر است که در طراحی هر کدام از گروههای فوق، در زمان لازم رفتارهای پیشفرض قابل تغییر میباشند. بهعبارتی چارچوبها بسته به نیاز قابل تغییر میباشند.
منابع
Cap-Theorem. 14 Nov. 2019, https://www.ibm.com/cloud/learn/cap-theorem.