Saeid Noormohammadi
Saeid Noormohammadi
خواندن ۴ دقیقه·۲ ماه پیش

بازیابی تراکنش ها در سیستم های توزیع شده - Transaction Recovery in Distributed System

در سیستم های توزیع شده تراکنش ها به دلیل پخش بودن بین سرویس ها با چالش هایی مانند Fault Tolerance, Consistency و هماهنگی مواجه هستند که می تواند باعث نیمه کار ماندن تراکنش ها و از بین رفتن دیتا شوند. Transaction Recovery یکی از مهم ترین بخش ها برای اطمیناان از Consistency و Fault Tolerance می باشد که نقش مهمی در مدیریت و بازیابی تراکنش ها در هنگام مشکلات دارد.

چالش ها

مشکلات شبکه (Network Failures): با توجه به ارتباط سرویس ها از طریق شبکه مشکلاتی مانند قطعی و تاخیر وجود دارد که می تواند باعث نیمه تمام ماندن تراکنش ها شود. معمولا برای حل این مشکل از روش هایی مانند retry, timeout و مانیتورینگ استفاده می شود.

شکست های جزئی (Partial Failures): با توجه به مستقل بودن نودها گاهی اوقات شکست های جزئی در برخی از آن ها رخ می دهد که می تواند باعث ناهماهنگی سرویس ها شود. برای مثال یک تراکنش که بین چندین سرویس درحال اجراست ممکن است در برخی موفق و در برخی ناموفق باشد. معمولا از روش هایی مانند Retry, Rollback, Roll-forward, 2PC و... استفاده می شود.

پروتکل های کامیت (Commit Protocols): استفاده از پروتکل های کامیت برای هماهنگی تراکنش ها بسیار مهم می باشد. زمانی که تراکنش بین چندین نود اجرا می شود باید با استفاده از کامیت ها از اتمیک بودن آن مطمئن شویم. از روش هایی مانند Two-Phase Commit و Three-Phase Commit (3PC) استفاده می شود.

مدل های سازگاری (Consistency Models): مدل های سازگاری نحوه برخورد سیستم با درخواست های خواندن و نوشتن را مشخص می کنند تا از data consistency اطمینان پیدا کنیم. انواع مدل ها:

  • Eventual Consistency: به این معنا می باشد که داده ها در نهایت به یک وضعیت هماهنگ خواهند رسید، اما این هماهنگی ممکن است که بلافاصله اتفاق نیفتد و کمی زمان ببرد تا در تمام نودها هماهنگ شوند. اطلاعات بیشتر: https ://lnkd.in/dEJ2tu-7
  • Strong Consistency: در یک سیستم توزیع شده تمام نودها در هر لحظه داده ها را به صورت یکسان مشاهده می کنند. وقتی داده ای در یک سیستم تغییر می کند، هرکاربر بلافاصله نسخه جدید و به روز شده آن را مشاهده می کند. زمانی که داده ای تغییر می کند تا تمام نسخه ها بروزرسانی نشوند عملیات موفقیت آمیز نخواهد بود. اطلاعات بیشتر: https ://lnkd.in/d2EnNUqu
  • Sequential Consistency: عملیات ها از دید همه ی برنامه ها به همان ترتیبی اجرا می شوند که نوشته شده اند. به زبان دیگر ترتیب دسترسی به داده ها به شکلی است که برنامه ها به یک ترتیب واحد به آن دسترسی دارند. اطلاعات بیشتر: https ://lnkd.in/dn-nK8Uu
  • Causal Consistency:اگر دو یا چند عملیات با یک دیگر مرتبط باشند ترتیب آنها برای تمام نودها حفظ می شود. اما اگر مرتبط نباشند ممکن است ترتیب آنها متفاوت دیده شود. اطلاعات بیشتر https ://lnkd.in/di7Hun55

تکنیک ها

Checkpointing

به فرآیندی گفته می شود که در آن نرم افزار در زمان های معین وضعیت خود را(داده ها, پردازش ها و...) ذخیره می کند تا در مواقع بروز مشکل و خرابی سیستم از آن برای بازگشت به نقطه مشخص و ادامه از آن استفاده کند. https ://lnkd.in/dniwCfnb

Two-Phase Commit (2PC):

یک پروتکل هماهنگ کننده برای تضمین اتمیک بودن تراکنش ها توزیع شده می باشد که از دو فاز و یک هماهنگ کننده تشکیل شده می باشد. https ://lnkd.in/dktKzf_B

Three-Phase Commit (3PC):

نسخه بهبود پیدا کرده 2PC می باشد که با اضافه کردن یک فاز جدید مشکلات مربوط به مشکلات شبکه و... را تا حدی حل کرده است. https ://lnkd.in/dszJJhnm

Logging:

به معنی ثبت همه تغییرات و عملیات های انجام شده بر روی داده ها می باشد که از آن ها(لاگ ها) به عنوان تاریخچه ی تراکنش ها می توانیم برای رفع مشکلات و بازگرداندن سیستم به حالت اولیه استفاده کنیم. دو نوع لاگ داریم:

  • Undo Log: برای Rollback کردن سیستم به حالت قبلی در صورت بروز مشکل استفاده می شود. تمام عملیات های انجام شده ثبت و در صورت نیاز برای بازگشت به عقب از آن ها استفاده می کنیم.
  • Redo Log: برای اجرای مجدد عملیات هایی که کامل/درست انجام نشده اند استفاده می کنیم.

Distributed Consensus Algorithms:

برای هماهنگی و توافق بین چندین نود استفاده می شوند. معروف ترین الگوریتم ها عبارت هستند از Raft که الگوریتم اجماع ساده بر پایه انتخاب Leader و Paxos که یکی از پیچیده ترین و معروف ترین الگوریتم های اجماع برای تضمین وضعیت نهایی می باشد.

در پایان, باید بدانیم که بازیابی سیستم از شکست ها به اندازه پیشگیری از شکست ها مهم می باشد و نباید با این فکر که سیستم بدون مشکل کار می کند و خطاها کم رخ می دهند از این موضوع غافل شویم. باید شکست ها را یک جزء طبیعی از سیستم در نظر بگیریم و مکانیزم هایی برای مدیریت و بازیابی آن ها داشته باشیم.

نرم افزارDistributed Systems
شاید از این پست‌ها خوشتان بیاید