ابتدا باید بدونیم Blue - Green به چه معناست. استقرار سبز-آبی فرایند تهیه بیش از یک محیط Production است که به شما این قابلیت رو میده تا نسخه های متفاوت از برنامه ی خودتون رو منتشر کنید و در کسری از ثانیه بین اونها جابجا بشید. احتمالا الان مدل انتشار Canary به ذهنتون خطور میکنه ولی باید بگم که این فرق داره ( این پست رو بخونید ).
با داشتن هر دو محیط در کنار هم٬ میتوانید به سرعت و بدون Downtime به نسخه جدید بروید یا در صورت مشکل به نسخه قدیمی برگردید. در این روش بر خلاف مدل های سنتی که به صورت In-Place به روزرسانی انجام میشد٬ دیگر نیاز نیس تا محیط Production متوقف یا از دسترس خارج بشه٬ سیستم آپدیت بشه و دوباره همه چیز به مدار برگرده.
موضوع این پست چیز دیگه است. اگه نیاز به اطلاعات بیشتر دارید به این نوشته از محمد بابازاده مراجعه کنید.
حال بریم که روش خودمون رو بررسی کنیم.
مسلما قبل از هر چیز نیاز به یک اولیه برای پیاده سازی چنین روشی داریم. در ابتدا یک رکورد DNS تعریف میکنیم که به یک یا چند سرور اشاره کند. این رکورد به ما اجاره میده که بدون دونستن آدرس های IP مقصد٬ به طور مداوم دسترسی ثابتی به سرویس فراهم کنیم.
برای این مورد، باید از یک رکورد A استفاده کنیم، نوعی رکورد DNS است که Hostname را به آدرس های IP نگاشت میکنه. انواع مختلفی از رکوردهای DNS با اهداف مختلف وجود داره و رکوردهای A ابتدایی ترین اونها هستند. ما برای هر استقرار به یک رکورد A نیاز داریم.
بهترین راه برای انجام این کار استفاده از یک شماره نسخه در رکورد A و استقرار یک زیرساخت جدید برای هر نسخه جهت دستیابی به چرخش ساده تر محیط ها است. در نتیجه ما همیشه دو محیط انتشار ثابت با برچسب های آبی یا سبز داریم.
رکورد بعدی DNS که باید ایجاد کنیم یک CNAME است. رکورد CNAME نام مستعار از یک Hostname به Hostname دیگه است، به این معنی که میشه ازش برای تغییر مسیرها یا ارائه چندین نام برای یک سرویس استفاده کرد. ما باید یک CNAME ارائه کنیم که مشتریان ما برای دسترسی به خدماتمون ازش استفاده کنند تا در نهایت بشه راحت و سریع مسیریابی را کنترل کرد.
این رکورد نباید نسخه گذاری بشه چون در هر محیط فقط یک مورد وجود داره و ما ازش برای پیدا کردن مقصدی که ترافیک باید مسیریابی بشه استفاده میکنیم. در اینجا چند نمونه از رکورد های CNAME و A آورده شده:
CNAME Record -> A Record logging.company.com -> logging-01.company.com logging.company.com -> 01.logging.company.com logging.company.com -> logging-blue.company.com logging.company.com -> blue.logging.company.com
پس از اینکه سیستم اصلی ( اولیه ) اجرا شد و مشتریان از CNAME برای دسترسی به خدمات ما استفاده کردند، حالا باید نسخه جدیدی از نرمافزار را اجرا کنیم. میشه اون رو درست در کنار نسخه فعلی مستقر کرد که پس از استقرار باید بتونیم از طریق رکورد A جدید بهش دسترسی داشته باشیم.
در مرحله بعد، ما باید تمامی تستهای خودمون رو اجرا کنیم تا مطمئن باشیم که محیط جدید مطابق انتظار کار میکنه و میتونیم به مرحله سوییچ کردن بریم. این مورد خیلی مهمه که مطمئن بشیم این آزمایشها بر سایر استقرارها ( نسخه ی منتشر شده قبلی ) تأثیر نمیگذاره، چون ممکنه منابعی مثل پایگاههای داده به صورت اشتراکی استفاده بشه.
برای اینکه برنامه خودمون رو به نسخه جدید سوییچ کنیم٬ کافی است تا رکورد CNAME آپدیت بشه و به رکورد A جدید اشاره کنه. این مورد باید سریع اتفاق بیوفته ولی با توجه به مقدار TTL رکورد DNS ممکنه تغییر کمی طول بکشه چون با توجه به این مقدار٬ رکورد ما در جاهای مختلف Cache خواهد شد. به نظر من برای TTL میشه از ۶۰ ثانیه استفاده کرد.
در این بین اگه خطایی رخ داد یا از محیط ( نسخه ) جدید راضی نبودیم، میتونیم با هدایت مجدد CNAME به رکورد A قدیمی اون رو برگردونیم. به دلیل سادگی فرآیند، این کار باید سریع و آسان انجام بشه.
پس از سوییچ کردن، ممکنه لازم باشه محیط قبلی رو با حذف اون یا حذف هر نرم افزاری که در حال اجرا مانده، پاکسازی کنیم. این کار رو میشه بلافاصله پس از آپدیت کردن٬ یا بعد از چند ساعت/روز انجام بدید. در هر صورت کاملا بستگی به نیازمندی های شما داره.
روش استقرار آبی-سبز برای به حداقل رساندن ریسک ها و Downtime در انتشار نرم افزار یکی از بهترین راه ها است و DNS راه اصلی برای انجام این کار است. توجه کنید که تغییرات زیادی در این فرآیند وجود داره، اما ساده نگه داشتن امور بسیار مهم است.