دواپس یک تخصص نیست!

این روزها در پی پیشرفت سریع تکنولوژی در سراسر دنیا؛ ارتباط بسیار نزدیک زندگی و اینترنت باعث شده هر روز نیاز به محصولات و خدمات مجازی بیشتر بشود. شرکت‌ها به دنبال توسعه سریع‌تر و بی‌نقص‌تر هستند و به رویکرد‌هایی نظیر چابک روی آورده ان. ظهور و پیشرفت محاسبات ابری (cloud computing) باعث به وجود آمدن روش‌های به صرفه‌تر و با ظرفیت بیشتر جهت ارائه محصولات شدن و همه‌ی اینها منجر به ایجاد تخصصی در حوزه نرم‌افزار با نام DevOps شده.دواپس در واقع یک فرهنگ و رویکرد جهت تسریع توسعه محصول و تضمین تحویل اون هست.این عبارت از اتصال دو کلمه توسعه و عملیات به وجود اومده. پیش از به‌جود اومدن این فرهنگ شرکت ها شامل دو تیم توسعه و عملیات بودند ولی برای بهینه‌تر کردن فرآیند نیاز به از بین بردن فاصله میان این دوتیم هست. درادامه سعی میکنم این چرخه رو خیلی کلی توی توسعه یک محصول توضیح بدم.چرخه دواپسهمونطور که در تصویر میبینیم چرخه از plan شروع میشه؛ توی این مرحله تیم برای توسعه محصول برنامه‌ریزی و زمان‌بندی میکنه و تسک‌ها به طور دقیق مشخص میشن. محصولاتی که توسط تیم توسعه داده میشن توسط ابزار های کنترل نسخه ذخیره و merge میشن. بعد از اون برای به وجود آوردن یک محیط ایزوله و متناسب با محصول (با استفاده از docker یا ابزار مشابه) یک image‌ تولید میشه؛ اگر کدها نیازمند Build شدن باشند توسط کانتینر انجام میشه و درنهایت روی محصول تست‌هایی(نظیرunit test) متناسب با نیاز انجام میشه و بعد از موفقیت در تست ها؛ درنهایت محصول release میشه. یکی از اصول دواپس؛ اتوماسیون هست و معمولا برای صرفه‌جویی در زمان و جلوگیری از بروز خطای انسانی نیاز هست تمامی مراحل توسط سیستم‌ها انجام بشه. برای همین نیازمند یک pipeline برای ادغام مستمر(Continuous Integration) و تحویل مستمر(continuous delivery or continuous deployment) هستیم. معمولا از لحظه پوش کردن کردن کد روی version control تا مرحله release رو ci درنظر میگیریم که توسط ابزار‌هایی مثل jenkins و gitlab-ci انجام میشه.پس از release؛ نیاز هست که محصول روی سرور مدنظر deploy بشه. معمولا تیم‌ها یک سرور برای Production و یک سرور برای develop؛ و یک سرور QA(Quality Assurance) که دقیقا مشابه سرور Production هست رو درنظر میگیرن. باتوجه به این که سرور‌ها بصورت جداگانه برای ارائه محصول تنظیم و کانفیگ میشن؛ ممکن هست تغییرات در زیرساخت هرسرور باعث به وجود اومدن مشکل بشه.(مثلا ورژن پایگاه‌داده روی یک سرور با دیگری متفاوت باشه و ایرادی که توی سرور production به وجود میاد روی سرور QA دیده نشه). برای همین برای کانفیگ کردن سرور‌ها از infrastructure as code یا توسعه زیرساخت توسط کد استفاده میشه که سرورها دقیقا مثل هم تنظیم بشن. از ابزار های مفید توی این زمینه میتوان ansible یا Terraform رو نام برد.خب گفتیم که سرورهایی که از قبل مثل هم کانفیگ شدن نیازمند دیپلوی هستند. این روزها ابزارهایی توسعه داده شدن که به محصول توانایی‌هایی نظیر اجرا روی زیرساخت ابری؛ یا توانایی scale up شدن میدن که از مهم‌ترین اونها میشه kubernetes رو نام برد. فرآیند دیپلوی؛ راه اندازی و مدیریت این سرویس ها؛ مراحل cd و operate رو توی چرخه دواپس تشکیل میده.درنهایت پس از اجرای محصول و تحویل اون به مشتری؛ جهت بررسی دقیق سرورها و جلوگیری از به‌وجود اومدن مشکل توی اونها نیازمند monitoring سرورها و سرویس‌های در حال اجرا(مثلا پایگاه داده) هستیم. برای این منظور از ابزارهایی مثل Zabbix یا Prometheus و Grafana استفاده میشه به این صورت که یک exporter روی سرورهای ارائه محصول درحال اجراست و دائم اطلاعات دقیق سرویس ها و منابع درحال مصرف رو به سرور monitoring میفرسته. به محض بروز اتفاقی خارج از استاندارد تعریف شده به تیم maintenance‌ گزارش داده میشه یا دستورات تعریف شده اجرا میشن.در چند سطر بالا سعی کردم یک توضیح بسیار کلی و ساده از فرآیند دواپس توی توسعه محصول بدم و مشخصه هربخش دارای جزئیات خیلی زیاد هست که درآینده به تفصیل ازشون مینویسم.