در یک سیستم توزیع شده، حداکثر دو تا از سه ویژگی Consistency، Availability یا Partition Tolerance می تواند وجود داشته باشد. این تعریف نظری، توسط Brewer ارائه شد و به صورت گسترده مورد قبول متخصصان سیستم های توزیع شده قرار گرفت. در این درس، نگاهی به تعریف و کاربرد این نظریه و هر کدام از سه ویژگی موجود در آن می اندازیم.
CAP مخفف Consistency، Availability و Partition Tolerance است، هر کدام هم تعریف خود را دارند:
Consistency: به این معنا که داده هایی که از سیستم درخواست میکنید، همواره آخرین داده های موجود در سیستم است. فرض کنید یک سیستم توزیع شده برای ثبت نمرات دانشجویان دارید. هر استاد، به صلاح خود در یک زمان ممکن است نمره یک دانشجو را تغییر دهد. حال اگر دانشجویی معدل خود را از سیستم درخواست کرد، این سیستم که دارای Consistency (ثباث) باشد، تضمین میدهد که نتیجه برگردانده شده، آخرین نتیجه ای است که بعد از تغییرات تمامی اساتید در سیستم، به دانشجو برگردانده می شود. ولی اگر سیستم توزیع شده ای Consistent نباشد، ممکن است در نتیجه برگردانده شده به این دانشجو، بعضی از آخرین تغییرات نمرات توسط اساتید در سیستم، اثر نداشته باشد.
Availability: به این معنا که یک Node سالم موجود در سیستم در یک زمان معقول، نتیجه درخواست را برگرداند (فکر کنم نیاز به توضیح دیگری نباشد!)
Partition Tolerance: هنگامی که یک (یا چند) Node (همان کامپیوتر) به دلیلی مثل خرابی شبکه، از دسترس خارج شد، سیستم بتواند به کار خود ادامه دهد.
تئوری CAP میگوید که شما حداکثر دو تا از سه مورد بالا را میتوانید در یک سیستم توزیع شده (مثلا یک پایگاه داده توزیع شده) با یکدیگر داشته باشید. مثلا اگر سیستم A و P را داشته باشد، دیگر نمیتواند C یا همان Consistency را نیز داشته باشد. برای مثال، در همان سیستم ثبت نمرات دانشجویان، اگر هر Node از سیستم بخواهد در زمان معقول پاسخ را برگرداند و همچنین با قطع یک یا چند Node، سیستم بتواند به کار خود ادامه دهد، دیگر نمیتوان گفت این سیستم آخرین نمرات ثبت شده را لزوما در محاسبات در نظر خواهد گرفت.
البته این تعریف پایه ای از نظریه CAP بود. در روزگار جدید اگر سیستم های توزیع شده Partition Tolerance را نداشته باشند، دیگر نمیتوان آن ها را سیستم توزیع شده نام گذاری کرد. بنابراین بعد از گذشت ۱۲سال از این نظریه، برخی بر این اعتقاد هستند که انتخاب شما یکی از Consistency یا Availability خواهد بود و همواره Partition Tolerance را خواهیم داشت.
در طراحی و معماری سیستم کاربردی توزیع شده باید نظریه CAP را در نظر گرفت و با توجه به نیازهای یک پروژه خاص، یکی از دو مورد Availability یا Consistency باید قربانی شود. همان طور که در تمام از پایگاه داده های توزیع شده، یکی از این دو مورد (یا بعضا یکی از سه مورد) قربانی می شود.
- ۱ » سیستم توزیع شده (Distributed System) چیست؟
- ۲ » مفهوم Coupling در سیستم های توزیع شده
- ۳ » شفافیت (Transparency) در یک سیستم توزیع شده به چه معناست؟
- ۴ » سیستم فایل توزیع شده (Distributed File System) چیست؟
- ۵ » مقیاس پذیری یا توسعه پذیری (Scalability) در یک سیستم توزیع شده چیست؟
- ۶ » تئوری CAP در سیستم توزیع شده
- ۷ » تعریف تک نقطه خرابی (Single Point Of Failure)