پایداری و بازیابی از خطا

یکی از مهمترین نیازهایی که کاربران ما مطرح می‌کردند، برخورداری از یک مکانیزم سریع و کامل برای بازیابی از خطا(Disaster Recovery) بود. ما راهکاری در اختیارشون گذاشته بودیم، ولی در نهایت کیفیت مطلوب کاربران رو ارائه نمی‌کرد. مسئله این بود که داده‌هایی که recommender.ir دریافت می‌کنه به صورت سری‌های‌زمانی(Time Series) به سامانه وارد شده و پردازش می‌شن. روشی که برای بازیابی از خطا استفاده ‌می‌کردیم، ارسال مجدد داده‌ها به منظور شبیه‌سازی شرایط بود. این روش ضعف‌هایی عمده داشت:

  1. در هنگام بازیابی، داده‌ها به صورت دسته‌ای(Batch) با سرعت بسیار زیاد به recommender.ir ارسال می‌شد. این منجر به بی اثر شدن فاکتور فراموشی(Forgetfulness) و مسطح شدن بعد زمان می‌شد. گذر زمان فاکتور بسیار مهمی در دقت این سامانه‌هاست. حذف شدن بعد زمان، دقت محاسبات رو کاهش می‌ده.
  2. در بعضی از سایت‌ها نرخ داده‌ورودی به سامانه به اندازه نرخ لود در هنگام بازیابی بود! پس هرگز نمی تونستیم داده‌ها رو حتی از نظر عددی به وضعیت قبل برسونیم.
  3. در یادگیری ماشین (Machine Learning) دقت الگوریتم‌ها رفته رفته بالا میره. بازخوردی(‌Feedback) که از واکنش کاربر‌ها دریافت می‌شه، به صورت جزئیاتی اثر گذار در متغیر‌های زمان اجرا(Run-time) نگهداری‌میشه. پس گرم‌شدن ماشین در دقت نتایج بسیار مهم و اثرگذاره. خاموشی سرویس آخرین وضعیت الگوریتم‌ها و دانش سرویس از داده‌ها رو از بین می‌برد.

مشتری‌هایی که به صورت سازمانی و ابعاد بزرگ از recommender.ir استفاده می‌کردند، بیش از سایت‌های کوچکتر از این مشکلات،‌ آسیب می‌دیدند. با کمال تعجب سرور‌هایی که در دیتاسنتر‌هایی خوب هاست شده بودند، ریست می‌شدند و همه چیز از دست می‌رفت. ما درنهایت قادر بودیم داده‌های آخرین روز‌ها رو از نو به recommender.ir ارسال کنیم که نتیجه چندان مطلوب نبود.

هفته گذشته توسعه مکانیزم جدید پشتیبان‌گیری و بازیابی از خطا به نتیجه رسید. روش جدیدی که برای ذخیره و بازیابی داده‌ها استفاده‌ میکنیم عبارت از ذخیره سازی تصویر(Snapshot) وضعیت(State) اشیا، و پارامتر‌های درونی الگوریتم‌هاست. انگار که نمایش فیلمی رو متوقف(Pause) کنیم، و پس از چند لحظه پخش(Play) فیلم رو ادامه بدیم.

disaster_recovery copy

مزایایی که این فیچر جدید برای کاربران recommender.ir به همراه داره، فراتر از یک مکانیزم بازیابی از خطاست. در روش جدید علاوه بر رفع کردن اشکالات یاد شده، به قابلیت‌های جذاب زیر نیز دست یافتیم:

  1. سرعت تولید اسنپ‌شات، ذخیره سازی و بازیابی اون بسیار بالاست( تقریبا به اندازه پهنای باند ذخیره و بازیابی).
  2. فاکتور فراموشی به خوبی کار می‌‌کنه. گویی سرویس اصلا خاموش نشده.
  3. در بازیابی افزونگی داده نداریم فقط نتایج محاسبات و آخرین نسل‌های سری‌های زمانی رو نگهداری می‌کنیم.
  4. کاربرای recommender.ir می‌توانند در ابتدا با سرور‌های کوچکتر شروع کنند، و در صورت نیاز ماشین را خاموش، و رم آن را ارتقا داده و به کار ادامه بدن.
  5. میشه نتایج محاسبات رو از ماشینی به ماشین دیگه منتقل کرد و کار رو ادامه داد.
  6. میشه در صورت نیاز به منظور تنظیم بار (Load Balancing) و نهایت دستریی (High Availability) نسخه‌های متعدد از یک سرویس تهیه کرد و به کار ادامه داد.
  7. افزایش نسخه‌های سرویس، بدون از دست دادن داده‌ها و آخرین وضعیت سرویس زنده قبلی خواهد بود. ممکنه بخواهید وضعیتی رو در اختیار تیم های مارکتینگ قرار بدین…

 

در آزمایشی که در محیط توسعه (Production) انجام دادیم، بازیابی اطلاعات حاصل از رفتار ۱۰۰۰ کاربر روی ۱۰۰ آیتم، طی ۳ روز، که منجر به تولید یک میلیون ارسال داده بود، تنها طی ۴ ثانیه انجام پذیرفت. ماشین آزمایش از دیسک مکانیکی و پردازشگر ۴ هسته‌ای برخوردار بود. این شامل به خاطر آوردن همه چیز تا لحظه تولید اسنپ‌شات بود. نتایج رضایت بخش است.

از این که recommender.ir را بدون ترس از خرابی سرور‌ها و فراتر از استاندارد‌ها، به کار می‌گیرید بسیار خوشحالیم و به خود می‌بالیم.

0 پاسخ

برای ما بنویسید

دوست داریم نظر شما رو بدونیم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *