تکنیک Checkpointing یکی از معروف ترین تکنیک های شناخته شده برای مدیریت خطا و مقاومت/پایداری سیستم های نرم افزاری می باشد. Checkpointing به فرآیندی گفته می شود که در آن نرم افزار در زمان های معین وضعیت خود را(داده ها, پردازش ها و...) ذخیره می کند تا در مواقع بروز مشکل و خرابی سیستم از آن برای بازگشت به نقطه مشخص و ادامه از آن استفاده کند.
برای مثال یک سرویس پرداخت را در نظر بگیرید که مراحل مختلفی مانند KYC, موجودی, تبدیل, انتقال و ... دارد. هرکدام از این موارد زمان بر می باشد که در صورت قطع شدن پروسه در هرکدام از مراحل اگر بخواهیم مجدد از ابتدا شروع به کار کنیم کارایی سیستم کاهش پیدا کرده و منابع بیشتری مصرف می شود. اینجاست که Checkpointing وارد می عمل شود و کمک می کند که در هر مرحله وضعیت تراکنش را ذخیره کنیم و درصورت نیاز به آن بازگشته و از آن ادامه دهیم. برای مثال فرایند پیاده سازی آن به صورت کلی در سناریو بالا به شکل زیر می باشد:
1- تایید هویت مشتری (KYC) و ذخیره سازی یک Checkpoint.
2- بررسی موجودی حساب برای انجام تراکنش و ذخیره سازی یک Checkpoint.
3- انتقال به حساب مقصد و در صورت موفقیت ذخیره سازی آخرین Checkpoint.
حالا در هرکدام از مراحل بالا تراکنش دچار مشکل شود به Checkpoint مورد نیاز برگشته و تراکنش را از آنجا ادامه می دهیم.
Know Your Customer (KYC):
برای تایید هویت مشتریان جهت جلوگیری از فعالیت های غیرقانونی استفاده می شود.
انواع
Periodic Checkpointing: این روش یکی از ساده ترین و رایج ترین روش ها می باشد که در زمان های منظم و ثابت ذخیره سازی وضعیت انجام می شود. این روش گاهی اوقات باعث از بین رفتن اطلاعات بین دو نقطه می شود.
Incremental Checkpointing: فقط تغییرات انجام شده بعد از آخرین Checkpoint ذخیره می شود که این کار باعث کاهش حجم داده ها و بهبود ذخیره سازی داده ها می شود.
Coordinated Checkpointing: در سیستم های توزیع شده تمام نودها با هماهنگی هم Checkpoint می گیرند که این باعث هماهنگی آن ها برای جلوگیری از data inconsistency می شود.
Uncoordinated Checkpointing: در این روش در سیستم های توزیع شده هر نود به صورت مستقل Checkpoint می گیرد که می تواند با کاهش هماهنگی و inconsistency مواجه شود.
مزایا
کاهش زمان: با استفاده از آن سیستم ها می توانند در صورت بروز مشکل و خرابی یک نقطه مشخص به کار خود ادامه دهند و دیگر نیاز به انجام تمام محاسبات از اول نمی باشد.
افزایش مقاومت: با ذخیره سازی آن ها سیستم ها می توانند در برابر مشکلات مقاومت بیشتری داشته باشند.
چالش ها
ذخیره سازی: با توجه به ذخیره سازی وضعیت ها در زمان های مختلف فضای ذخیره سازی بیشتری نیاز می باشد.
هماهنگی در سیستم های توزیع شده: انجام هماهنگی بین تعداد زیادی نود در این سیستم ها پیچدگی های زیاد و خاص خود را دارد که نیاز به مدیریت دقیق و بهینه دارد.
در پایان, همانطور که دانستیم استفاده از Checkpointing می تواند سیستم را در برابر خرابی و مشکلات مقاوم کند اما باید بدانیم که پیاده سازی آن با چالش هایی مانند هماهنگی و ذخیره سازی مواجه است که نیاز به پیاده سازی دقیق و بهینه دارد تا به هدف مورد نظر دست پیدا کنیم.