بازگشت به کتابخانهکتابخانه14.2تراکنش توزیع‌شده عمیق: 2PC ،TCC و Linearizability
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 14.2فصل ۱۴سیستم‌های توزیع‌شده پیشرفته

تراکنش توزیع‌شده عمیق: 2PC ،TCC و Linearizability

  • ~۱۵ دقیقه
  • ۴ پرسش
  • متن را انتخاب کن تا هایلایت شود

فصل ۵ با Saga آشنا شدی و فصل ۹ در یک سؤال گفتیم 2PC پیش‌فرض نیست. حالا دقیق: چرا تعهد اتمی بین چند نود مسئله سختی است، 2PC دقیقاً کجا می‌لنگد، TCC چیست و «linearizable» — قوی‌ترین وعده سازگاری — چه می‌گوید.

2PC: تعهد دو فازی

DIAGRAMدو فاز و نقطه مرگبار
Coordinator
فاز ۱: Prepare — قفل + رأی
فاز ۲: Commit یا Abort
Crash در میانه = انتظار قفل‌دار
  • فاز ۱: coordinator از همه participant ها می‌پرسد «می‌توانی commit کنی؟» — هرکدام لاگ می‌نویسند، قفل می‌گیرند و رأی می‌دهند.
  • فاز ۲: اگر همه بله گفتند commit، وگرنه abort برای همه.
  • مرگبار: اگر coordinator بعد از prepare و قبل از commit بمیرد، participant ها با قفل‌های گرفته‌شده بلاتکلیف می‌مانند — blocking واقعی تا برگشت او یا مداخله دستی. به همین دلیل در microservice های پرتراکنش ممنوع است؛ جایش: دیتابیس‌هایی که خودشان 2PC داخلی دارند (مثل بعضی NewSQL ها).
  • 3PC با فاز میانی و timeout تلاش می‌کند blocking را کم کند ولی تحت partition واقعی باز هم نادرست تصمیم می‌گیرد — در عمل کمتر استفاده می‌شود.

TCC: جبران در لایه کسب‌وکار

TCC (Try-Confirm-Cancel) همان روح Saga است ولی رسمی‌تر: فاز Try منابع را رزرو می‌کند (موجودی را freeze کن، نه کم کن)؛ Confirm رزرو را قطعی می‌کند؛ Cancel آزادش می‌کند. تفاوت با 2PC: قفل دیتابیس نمی‌گیرد، در لایه اپلیکیشن و با منطق دامنه کار می‌کند، و هر فاز idempotent و قابل retry است. مثال: رزرو سفر = Try روی پرواز + هتل + ماشین؛ همه موفق → Confirm؛ یکی شکست → Cancel بقیه.

Linearizability: قوی‌ترین وعده

Linearizability
هر عملیات انگار در یک لحظه اتمی رخ داده و ترتیبش با زمان واقعی سازگار است: اگر نوشتن X تمام شد، هر خواندنِ بعدی آن را می‌بیند. وعده تک-شیء است.
Serializability
تراکنش‌های چندشیئی انگار به یک ترتیب سریالی اجرا شده‌اند — لزوماً همان ترتیب زمانی واقعی نیست. این دو را قاطی نکن: یکی درباره زمان واقعی، دیگری درباره معادل‌سازی.
هزینه
linearizability یعنی هماهنگی (quorum/consensus) در مسیر داغ — در فصل ۱۳ CAP دیدیم: هنگام partition یا C یا A.

به زبان ساده

تراکنش بین چند سرویس سه راه دارد: 2PC (همه قفل و رأی)، TCC (رزرو، تأیید، لغو) و Saga (کارهای جبران‌پذیر)؛ و linearizability یعنی همه دنیا یک ترتیب واحد ببینند.

مثال واقعی

رزرو هتل+پرواز: TCC اول «ظرفیت را رزرو موقت» می‌کند؛ اگر پرواز نماند، رزرو هتل لغو می‌شود و اگر هر دو بود، تأیید نهایی — کسی با هتل بدون پرواز نمی‌ماند.

دانش‌سنجی

آزمون درس

۴ Q
01
نقطه شکست بحرانی 2PC؟
02
TCC با 2PC چه فرقی دارد؟
03
کدام جمله درباره linearizability درست است؟
04
برای «رزرو همزمان پرواز+هتل+ماشین» کدام الگو؟