📚 تئوری CAP به زبان ساده
یه تئوری معروف تو دنیای مهندسی نرمافزار هست به اسم CAP یا «تئوری بروئر». این تئوری میگه سیستمهای توزیعشده (مثل دیتابیسهایی که روی چند تا سرور کار میکنن) نمیتونن همزمان این سه ویژگی رو با هم داشته باشن:
1. اConsistency (یکپارچگی): یعنی همه سرورها همیشه یه دادهی یکسان نشون بدن.
2. اAvailability (دسترسپذیری): یعنی همیشه سیستم آماده پاسخگویی باشه، حتی اگه یه بخشیش خراب بشه.
3. اPartition Tolerance (تحمل پارتیشن): یعنی وقتی شبکه قطع میشه یا یه بخشی از سیستم به بقیه دسترسی نداره، باز هم کار کنه.
حالا مشکل کجاست؟
تئوری CAP میگه شما توی یه سیستم توزیعشده نمیتونین هر سه اینا رو با هم داشته باشین. باید بینشون یکی رو قربونی کنین. مثلا:
اگه یکپارچگی و تحمل پارتیشن رو انتخاب کنین، ممکنه دسترسپذیری قربانی بشه.
اگه دسترسپذیری و تحمل پارتیشن رو بخواین، ممکنه دادهها یکپارچه نباشن.
اگه یکپارچگی و دسترسپذیری براتون مهمه، سیستم نمیتونه پارتیشن شبکه رو تحمل کنه.
مثال عملی:
فرض کن تو یه پیامرسان هستی. میخوای پیامهایی که میفرستی سریع برسه (دسترسپذیری)، اما همزمان مطمئن باشی همه گیرندهها پیام یکسانی میگیرن (یکپارچگی). اگه اینترنت یکی از سرورها قطع بشه، دیگه باید انتخاب کنی: یا پیام سریع برسه(ولی شاید یکی درست دریافت نکنه)، یا صبر کنی تا اتصال سرور درست بشه تا همه پیام درست دریافت کنن.
خلاصه، CAP میگه توی سیستمهای توزیعشده همیشه باید یهجایی کوتاه بیای مثل اینکه 😅
یه تئوری معروف تو دنیای مهندسی نرمافزار هست به اسم CAP یا «تئوری بروئر». این تئوری میگه سیستمهای توزیعشده (مثل دیتابیسهایی که روی چند تا سرور کار میکنن) نمیتونن همزمان این سه ویژگی رو با هم داشته باشن:
1. اConsistency (یکپارچگی): یعنی همه سرورها همیشه یه دادهی یکسان نشون بدن.
2. اAvailability (دسترسپذیری): یعنی همیشه سیستم آماده پاسخگویی باشه، حتی اگه یه بخشیش خراب بشه.
3. اPartition Tolerance (تحمل پارتیشن): یعنی وقتی شبکه قطع میشه یا یه بخشی از سیستم به بقیه دسترسی نداره، باز هم کار کنه.
حالا مشکل کجاست؟
تئوری CAP میگه شما توی یه سیستم توزیعشده نمیتونین هر سه اینا رو با هم داشته باشین. باید بینشون یکی رو قربونی کنین. مثلا:
اگه یکپارچگی و تحمل پارتیشن رو انتخاب کنین، ممکنه دسترسپذیری قربانی بشه.
اگه دسترسپذیری و تحمل پارتیشن رو بخواین، ممکنه دادهها یکپارچه نباشن.
اگه یکپارچگی و دسترسپذیری براتون مهمه، سیستم نمیتونه پارتیشن شبکه رو تحمل کنه.
مثال عملی:
فرض کن تو یه پیامرسان هستی. میخوای پیامهایی که میفرستی سریع برسه (دسترسپذیری)، اما همزمان مطمئن باشی همه گیرندهها پیام یکسانی میگیرن (یکپارچگی). اگه اینترنت یکی از سرورها قطع بشه، دیگه باید انتخاب کنی: یا پیام سریع برسه(ولی شاید یکی درست دریافت نکنه)، یا صبر کنی تا اتصال سرور درست بشه تا همه پیام درست دریافت کنن.
خلاصه، CAP میگه توی سیستمهای توزیعشده همیشه باید یهجایی کوتاه بیای مثل اینکه 😅