در سیستم های توزیع شده تراکنش ها به دلیل پخش بودن بین سرویس ها با چالش هایی مانند 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 اطمینان پیدا کنیم. انواع مدل ها:
Checkpointing
به فرآیندی گفته می شود که در آن نرم افزار در زمان های معین وضعیت خود را(داده ها, پردازش ها و...) ذخیره می کند تا در مواقع بروز مشکل و خرابی سیستم از آن برای بازگشت به نقطه مشخص و ادامه از آن استفاده کند. https ://lnkd.in/dniwCfnb
Two-Phase Commit (2PC):
یک پروتکل هماهنگ کننده برای تضمین اتمیک بودن تراکنش ها توزیع شده می باشد که از دو فاز و یک هماهنگ کننده تشکیل شده می باشد. https ://lnkd.in/dktKzf_B
Three-Phase Commit (3PC):
نسخه بهبود پیدا کرده 2PC می باشد که با اضافه کردن یک فاز جدید مشکلات مربوط به مشکلات شبکه و... را تا حدی حل کرده است. https ://lnkd.in/dszJJhnm
Logging:
به معنی ثبت همه تغییرات و عملیات های انجام شده بر روی داده ها می باشد که از آن ها(لاگ ها) به عنوان تاریخچه ی تراکنش ها می توانیم برای رفع مشکلات و بازگرداندن سیستم به حالت اولیه استفاده کنیم. دو نوع لاگ داریم:
Distributed Consensus Algorithms:
برای هماهنگی و توافق بین چندین نود استفاده می شوند. معروف ترین الگوریتم ها عبارت هستند از Raft که الگوریتم اجماع ساده بر پایه انتخاب Leader و Paxos که یکی از پیچیده ترین و معروف ترین الگوریتم های اجماع برای تضمین وضعیت نهایی می باشد.
در پایان, باید بدانیم که بازیابی سیستم از شکست ها به اندازه پیشگیری از شکست ها مهم می باشد و نباید با این فکر که سیستم بدون مشکل کار می کند و خطاها کم رخ می دهند از این موضوع غافل شویم. باید شکست ها را یک جزء طبیعی از سیستم در نظر بگیریم و مکانیزم هایی برای مدیریت و بازیابی آن ها داشته باشیم.