نگاهی به DevOps

در سیستم های سنتی تولید و نگه داری نرم افزار همواره چالش های فراوانی میان دو تیم توسعه به عنوان تولید کننده ی نرم افزار و تیم عملیات و پشتیبانی شبکه به عنوان ایجاد کننده و نگه دارنده ی محیط عملیاتی وجود داشته که از جمله ی این چالش ها میشه به موارد زیر اشاره کرد:چالش های نبود DevOps در سازمان ها : تیم توسعه بدون درک و دانش کامل از محیط عملیاتی ، نرم افزار رو توسعه میده و بعد از اتمام تمام فرآیندهای توسعه اونا رو در اختیار تیم عملیات قرار میده تا در محیط عملیاتی برای کاربران در دسترس قرار بگیره. این عدم وجود درک کافی از ساختار محیط عملیاتی می تونه شامل مواردی چون عدم شناخت ساختار شبکه اعم از Switching و Routing ، نوع Storage مورد استفاده و عملکرد اون ، نوع سیستم عامل ها ، معماری سرورها و Application Server های مورد استفاده ، تجهیزات امنیتی و … باشه که همگی تاثیر مستقیمی در نحوه ی عملکرد نرم افزار طراحی شده داشته و عدم شناخت کافی اونا میتونه منجر به شکست پروژه بشه.تیم عملیات نیز بدون درک کافی از ساختار نرم افزار توسعه داده شده و همچنین نبود دانش کافی در حوزه ی برنامه نویسی ، فرآیندهای تولید نرم افزار ، توابع و کلاس های مورد استفاده شروع به عملیاتی نمودن نرم افزار می کنه که این هم به صورت متقابل نهایتا می تونه پروژه رو منجر به شکست کنه. اوایل با تعریف های مختلفی در موردش مواجه شدم. یکی می گفت DevOps همون اسکرامه. یکی می گفت DevOps زیر مجموعه ITIL هست. یکی می گفت DevOps حذف تیم های Test و Deploy از تیم های بزرگ نرم افزاریه و فقط تیم های Develop و Operation باقی می مونه و خیلی خیلی تعریف های دیگه که خیلی هاش از اساس غلط بود و خیلی های دیگه شبیه همون داستان فیل و اتاق تاریک مولانا بود که هر کسی یه قسمت از فیل رو لمس کرده بود و فکر می کرد فیل فقط همونه.خب DevOps در لغت به معنی Develop + Operation هست.و این مفهوم رو می رسونه که تیم های Develop و Operation باید به هم نزدیک تر باشن و تیم هایی با ساز و کار جداگانه و غیر همسو نباشند.اما اگر بخواهیم دقیق تر در موردش صحبت کنیم DevOps یک مفهوم یا یک تفکره که تمام مراحل تولید نرم افزار از لحظه ای که ایده (Idea) در تیم و یا خارج از تیم نرم افزاری بوجود میاد و در جریان تولید قرار می گیره تا لحظه ای محصول به دست مشتری نهایی (EndUser) می رسه و حتی بعد تر یعنی استمرار و پایایی محصول در ارائه خدمت به مشتریان رو شامل می شه. هدف DevOps رو می تونیم سریع تر شدن چرخه تولید و ارائه محصول به مشتری نام ببریم اما واقعا این مفهوم جامع تر از این حرف هاست.بیایم باهم ببینیم فواید پیاده سازی دواپس چیه؟یکی ازون موارد سرعت هستش. DevOps با استفاده از هنر یکپارچه کردن دو تیم توسعه و عملیات ، این امکان رو به متخصصین میده تا تمام فرآیندهای چرخه ی بالا رو از جمله Test ، Release ، Deploy و Monitor رو به کمک پیاده سازی یک چرخه ی اتوماتیک با استفاده از ابزارهای مطرح مانند Jenkins که از جمله ابزارهای CI/CD هستن سرعت ببخشه.یکی از مشکلاتی که همیشه وجود داره فرایند آپدیت نرم افزاره که ممکنه بعد از اون بخشی از کارکرد سیستم رو مختل کنه. دواپس با استفاده از پیاده سازی Continuous Integration و Continuous Delivery و حصول اطمینان از صحت عملکرد سیستم با استفاده از اجرای تست های مختلف قبل از Release و مشاهده ی لاگ نرم افزار در سیستم مانیتورینگ پس از Release کمک میکنه تا نرم افزار به صورت پایدار همواره در حال سرویس دهی باشه. پس مزیت دیگه سرویس دهی پایدار سیستم هستش. علاوه بر اینها به دلیل همکاری نزدیک دوتیم توسعه و عملیات سیستم بهینه تر و منسجم تر کار میکنه. در کنار اینها چون متخصص های بخش امنیت هم حضور دارن پس میشه روی امنیت کار هم حساب کرد.بریم حالا وظایف تیم رو ببینیم.برای تیم DevOps عمدتا وظایف استاندارد و مشخصی وجود داره ، اما سازمان های بزرگ با توجه به ساختارهای سنتی قبلیشون ، اون رو کمی شخصی سازی میکنن تا قابل پیاده سازی و اجرا بشه. ( بعدا در مورد SRE یه مطلب جدا ارائه میکنم.)مهمترین بخش دواپس فرهنگ میان تیم نرم افزار و عملیات هستش. همکاری و ارائه ی راه حل در فرآیند های تولید کد با توجه به تجریبات محیط عملیاتی ، یکپارچه سازی در تحویل مداوم، تست و فرایند تولید،طراحی،تحلیل و… باعث تولید محیطی مناسب برای اشتراک گذاری دانش های تیم های مختلف باهم میشه که روند کار رو به شدت جذاب و پرسرعت میکنه. و اما چارچوب CALMSچارچوب CALMS یک راهنما برای رسیدن به فرآیند دواپسه که تشکیل شده از:لغت Culture یعنی فرهنگ که توضیح دادیم که نیاز داریم تا فرهنگ تعامل درست و خوب رو بین افراد و تیم ها بوجود بیاریم برای رسیدن به هدف مشترک.لغت Automation یعنی اتوماسیون سازی که در اینجا دقیقا مفاهیم Continuous Delivery – Continuous Integration – Continuous Deployment مطرح میشه، امکان نداره شما ادعا کنید ما فرآیندهای DevOps رو داریم ولی از ابزارهای مثلا CI استفاده نمی کنیم و همه کارها رو دستی انجام میدیم. فرآیندهای دستی کندن و امکان خطای انسانی هم زیاد.برای همین باید اتوماسیون تا اونجایی که ممکنه لحاظ بشهلغت Lean در لغت به معنی لاغره که بیشباهت به مفهومی که میخوایم نداره. توی مبحث ما یعنی اینکه باید فعالیت هایی که ارزش ندارن و تولید ارزش نمیکنن رو حذف کرد.مثلا دوباره کاری ها یا توسعه ویژگی هایی که نیاز اصلی مشتری نیستن ازین قبل مواردن.لغت Measurement یا اندازه گیری ، معیار سنجش یا ارزیابی در واقع میخواد به ما بگه که باید بدونیم " ازکجا امده ایم ، امدنمون بهر چه بود! " . ما باید بتونیم با ملاکهای خاصی که داریم روال کار رو ارزیابی کنیم. چندتا از این ملاک ها :● Infrastructure Monitoring ● Log Management● Application and Performance Managementباید درنظر گرفت که این موارد تنها کافی نیست و گاهی نیازه که میزان استفاده از هر ویژگی ، تعداد باگ های هر نسخه، سرعت میانگین تحویل هر نسخه و هر متر و معیاری که در حداکثری کردن ارزش به ما کمک می کنن رو بدونیم .لغت Sharing یا اشتراک گذاری تجربه ها باعث میشه که ما با تفاهم بهتر تیم ها از درسهای جدیدی که از اشتراک منابع علمی بوجود میاد استفاده کنیم تا شاهد اشتباهات دوباره و دوباره نباشیم. در واقع مفهوم این کلمه اینه که ما درس بگیریم از اشتباهاتمون.بحث اصلی ما یه آشنایی کلی با مفهوم دواپس بود.در آخر بد نیست که نگاهی به فرایند توسعه ی نرم افزار هم بکنیم:Planning (طرح‌ریزی)Development (توسعه)Testing (تست کردن)Deployment (استقرار)Maintenance (نگهداری)Planning (طرح‌ریزی)اهداف پروژه مشخص میشه و مهندس دواپس میگرده و روشهای خودکارسازی فرایندهای مختلف رو باتوجه به منابع موجود پیدا میکنه تا بار دوش اعضای تیم کمتر بشه.Development (توسعه)کار میره سمت کدنویسی و برنامه نویس ها و مهندس دواپس به دولوپرها می‌گه که از چه ابزاری استفاده کنن و ابزارهای جدید رو در اختیارشون قرار می‌ده تا راحت تر و سریعتر کار کنن. یکی دیگه از کارهایی که توی این بخش مهندس دواپس انجام میده اتصال قسمتهای مختلف کد هستش برای رسیدن به نسخه ی نهایی.Testing (تست کردن)در این مرحله، دولوپرها و مسئولین کنترل کیفیت (QC) کدها رو تست میکنن و اونا رو برای یکپارچه شدن با سورس‌کد اصلی آماده می‌کنن. مهندس دواپس در این مرحله وظیفه‌اش اینه برای تکرار خودکار تست‌ها راهی پیدا کنه مانند Jenkins ،Bamboo و یا Drone استفاده کند که این‌ها ابزارهای Continuous Integration یا به‌ اختصار CI هستند که تست مداوم کدها رو راحت می‌کنن. Deployment (استقرار)خب دیگه حالا باید بفرستی بره بالا نرم افزار رو که کاری شبیه تست کردن رو مهندس های دواپس روش انجام میدن.Maintenance (نگهداری)از الان به بعد باید تیم اماده باشه که از نرم افزار نگهداری کنه. یکی از بیشترین کارهای ممکن برای مهندس دواپس همین بخش میشه.نیاز به توضیح نیست که اصطلاح DevOps از دو واژهٔ Development به‌ معنی «توسعه» و Operations به‌ معنی «عملیات» ساخته شده است و تصویر فوق به‌ خوبی گویای وظایف هر کدام از این بخش‌ها است.