سازگاری نهایی و مدلهای سازگاری
طیف مدلهای سازگاری: Strong، Eventual و Causal — با مثالهای واقعی و انتخاب مدل مناسب هر داده
طیف سازگاری
سازگاری «صفر و یکی» نیست — یک طیف است:
۱. Strong (قوی)
بعد از نوشتن، همه بلافاصله همان را میبینند. مثل تکسرور!
- پیادهسازی: همگامسازی همه نودها قبل از تأیید نوشتن
- هزینه: نوشتن کند (منتظر همه!)، دسترسپذیری کمتر
- کاربرد: پرداخت، موجودی حساس، رمزنگاری
۲. Eventual (نهایی) — رایجترین
اگر نوشتن جدیدی نباشد، بالاخره همه نودها همرنگ میشوند:
- بین راه: داده قدیمی ممکن است خوانده شود!
- هزینه: نوشتن سریع ✓، دسترسپذیری بالا ✓
- کاربرد: تایملاین، پروفایل، کامنت، DNS
مثال آشنا: کامنت میگذاری؛ دوستت «همین الان» نمیبیند — چند ثانیه بعد میبیند. دنیا تمام نشد!
۳. Causal (علّی)
بین Strong و Eventual: روابط علّی حفظ میشوند:
علی: «سالی، سلام!» (پیام ۱)
سارا: «علی، وعدهوات!» (پاسخ به ۱)
قاعده Causal: هیچکس پاسخ را «قبل از» پیام نبیند!
(اما پیامهای بیربط ممکن است جابهجا دیده شوند)
پیادهسازی: نسخههای برداری (Vector Clocks) — پیچیده اما منطق گفتگو را حفظ میکند.
مقایسه
| مدل | تضمین | سرعت نوشتن | کاربرد |
|---|---|---|---|
| Strong | همیشه آخرین | کند | پول، رزرو |
| Causal | ترتیب علّی | متوسط | چت، کامنت |
| Eventual | بالاخره همرنگ | سریع ✓ | تایملاین، لایک |
سازگاری به ازای هر داده!
سیستم هوشمند، مدل متفاوت برای داده متفاوت:
فروشگاه آنلاین:
- پرداخت: Strong (پول!)
- موجودی کالا: Strong (فروش دوباره = فاجعه)
- تعداد لایک: Eventual (چند ثانیه دیر؟ مهم نیست)
- نظرات: Causal (پاسخ قبل از سؤال؟ گیجکننده!)
نکته: «Read-Your-Own-Writes» یک تضمین عملی بینابین است: کاربر نوشته خودش را همیشه فوری ببیند (حتی اگر بقیه داده eventual باشد) — تجربه کاربری نجات مییابد!
جمعبندی
- طیف: Strong ← Causal ← Eventual
- Strong: درست اما کند؛ Eventual: سریع اما کهنهپذیر
- Causal: منطق گفتگو حفظ میشود
- هر داده، مدل خودش را میخواهد!
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.