گزارش مشکل پیش آمده در ۱۳ به در

سرویس باهمتا در روز های ۱۲ و ۱۳ فروردین ۹۷ به مدت ۲۶ ساعت از کار افتاد. گزارشی از اتفاق رخ داده را در این نوشته آورده‌ایم تا هم کاربران از آن باخبر باشند و هم درسی باشد برای جلوگیری از تکرار این اتفاق.

ظهر ۱۲ فروردین متوجه شدیم که هیچ کدام از سرویس های باهمتا کار نمی‌کنند. چیزی که عجیب بود این بود که به سرورها دسترسی داشتیم ولی سرویس‌ها کار نمی‌کردند. با ورود به بخش کنترل پنل سرویس میزبانی، پیامی دیدیم که بخشی از دیتاسنتر با مشکل روبرو شده است. مشکل از سیستم ذخیره سازی بود. یعنی دیسک‌های سخت که برای ذخیره سازی به کار می‌روند کلا با مشکل روبرو شده بودند و امکان ذخیره‌ی هیچ چیزی وجود نداشت.

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

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

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

سرویس میزبانی هم هر چند ساعت یکبار اعلام می‌کرد که در حال کار روی مشکل هستند. ما هم گمان می‌کردیم که بزودی مشکل حل می‌شود. مشکلی که کل یک دیتاسنتر را از کار انداخته، احتمالا باید خیلی سریع حل شود چون سرویس‌های بسیار زیادی روی آن هستند. از سوی دیگر، راه اندازی همه‌ی سرویس‌های باهمتا روی یک دیتاسنترِ دیگر، کار بسیار طولانی و زمان‌بری هست و حدس میزدیم که پیش از راه اندازی در دیتاسنتر دیگر، مشکل دیتاسنتر فعلی حل می‌شود. از اینرو تصمیم گرفتیم تا صبر کنیم. این تصمیم خطایی بود که گرفتیم.

روی کانال باهمتا در تلگرام هم پیامی گذاشتیم و اطلاع دادیم که سرویس باهمتا به دلیل خرابی دیتاسنتر با مشکل روبرو شده است. جالب اینکه روز ۱۲ فروردین امسال برابر با ۱ آوریل بود، و از آنجا که معمولاً یک خبر دروغ در این روز منتشر می‌شود، یکی از کاربران پیام زیر را برایمان فرستاده بود:

«اینو دیدم تقریبا مطمئن بودم دروغ ۱ آوریله، ولی نبود 😲 آخه ۱ آوریل وقت خرابی دیتاسنتره؟؟»

ساعت ۲۱:۰۰ شده بود و همچنان سرویس میزبانی نتوانسته بود کاری بکند. کمی بعد اعلام کرد که کار راه اندازی دیسک‌ها آغاز شده ولی به کندی پیش می‌رود. خوشحال بودیم از این که فرآیند راه‌اندازی آغاز شده ولی این که به کندی پیش ‌میرفت، مشخص نمی‌کرد که چه زمانی راه اندازی کامل می‌شود. باز هم صبر کردیم.

نیمه شب دیگر صبر نکردیم و فرایند انتقال به یک دیتاسنتر دیگر را آغاز کردیم. حدس می‌زدیم که شاید ۴ ساعت زمان ببرد. به سراغ سرور پشتیبان دیتابیس رفتیم و تازه متوجه عمق فاجعه شدیم. حدود ۶ ساعت از داده‌ها در سرور پشتیبانی نیامده بودند. این بدترین اتفاق ممکن بود. از آنجا که نمی‌توانیم هیچ داده‌ای را از دست بدهیم، مجبور شدیم راهکار دیگری را انجام بدهیم که وارد کردن دستی داده‌ها از لاگ‌ها به سرور دیتابیس بود. لاگ‌ها در جای دیگری ذخیره می‌شدند بنابراین به آن‌ها دسترسی داشتیم. این فرایند دستی بسیار زمان بر بود و خود به تنهایی نزدیک به ۵ ساعت زمان برد.

ساعت ۹:۰۰ سرانجام به یک وضعیت مناسب در دیتابیس رسیدیم و به سراغ راه اندازی دیگر سرورها رفتیم. این فرایند هم هر چند زمان‌بر بود اما سرانجام در ساعت ۱۴:۰۵به پایان رسید و سرویس دهی آغاز شد.

در تمام این مدت ما همچنان منتظر بودیم تا مشکل دیتاسنتر اصلی برطرف شود، اما این اتفاق ۱۲ ساعت پس از راه‌اندازی دیتاسنتر جایگزین صورت گرفت. خوشبختانه بااین جایگزینی توانستیم زمان پایین بودن سرویس را ۱۲ ساعت کاهش دهیم.

از وضعیت پیش آمده بسیار ناراحت بودیم ولی درسی شد برای ادامه‌ی راه باهمتا. امیدواریم این درس‌ها برای دیگران هم سودمند باشند:

  • دیتاسنتر‌ها هم علاوه بر سرورها به مشکل می‌خورند. همه‌ی تخم مرغ‌ها را در یک سبد و همه‌ی سرورها را در یک دیتاسنتر نگذارید.
  • کمی کندی بهتر از ۲۶ ساعت پایین بودن سرویس است.
  • از همان آغاز، فرض را به بدترین حالت بگذارید و فرآیند جایگزین را آغاز کنید. ما اگر این کار را کرده بودیم، می‌توانستیم ۱۲ ساعت دیگر را صرفه جویی کنیم.
  • نسخه‌های پشتیبان را به صورت پیوسته کنترل کنید.

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

کاربران ما اگر نتوانند به سرویس ما اعتماد کنند، ما را ترک خواهند کرد. تصمیم گرفتیم تا بهتر از پیش باشیم و بزودی تغییراتی خواهیم داد تا چنین مشکلاتی دیگر پیش نیایند و هدف ما این است که سرویس باهمتا همیشه در دسترس باشد.

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

Photo by NordWood Themes on Unsplash