ایده‌‌ای جسورانه برای بالا نگهداشتن سرویس! - قسمت اول


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

در این مطلب به بیان قسمت دوم می‌پردازم، چطور اطمینان حاصل کنیم که سرویس‌های نرم‌افزاری [با اعمال تغییرات] بالا می‌مانند.

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

اگر می‌ترسید کاری که انجام می‌دهید؛ باعث خرابی می‌شود و به همین دلیل دست روی دست گذاشته‌اید؛ پس حتما به سراغش بروید و انجامش دهید.

یک ایده به نسبت رادیکال و جسورانه!

شاید این پرسش به ذهنتان خطور کند که "چرا باید اینکار را انجام دهیم؟" جواب را با یک مثال نسبتاً ساده بیان می‌کنم.

فرض کنید یک سرور پایگاه داده دارید که زمان زیادی است که ری‌استارت نشده است و شما از ری‌استارت کردن آن می‌ترسید چون ممکن است بعد از ری‌استارت کردن؛ بالا نیاید یا باعث خرابی در سرویس‌های دیگر شود.

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

حالا فرض کنید، با استفاده از روش‌هایی (که در مطالب آتی به آن اشاره خواهم کرد) می‌توان از این معضل رهایی جست.

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

  • مشخص کردن دقیق نسخه پایتون مثلاً ۳.۸.۰
  • ماژول‌های پایتون مثلاً انسیبل ۲.۷.۱۲
  • سیستم‌عاملی که پایتون بر روی آن نصب می‌شود مثلا اوبونتو ۱۶.۰۴.۶
  • تعیین دقیق پکیج‌های مورد استفاده در سیستم های سیستم‌عامل
  • قطع ارتباط با اینترنت یا شبکه‌های دیگر

برای هر کدام از موارد فوق می‌توان مکانیزم‌های مختلفی ارائه داد که در قسمت دوم این مقاله، به تعدادی از آن‌ها اشاره کرده‌ام.


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

برگردم به این سوال که "چگونه اطمینان حاصل کنیم که یک سرویس نرم افزاری با انجام تغییرات، بالا می‌ماند و ناخواسته از کار نمی‌افتد؟"

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