آموزش

معرفی مفاهیم DevOps

معرفی مفاهیم DevOps

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

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

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

عکس زیر پروسه های توسعه و نگهداری نرم افزار را نشان میدهد که در ادامه نقش یک مهندس DevOps در هر کدام از مراحل توضیح خواهم داد:

مرحله Planning

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

مرحله Implementation

در این مرحله توسعه کد بر اساس مستندات تهیه شده در مرحله Planning صورت می گیرد. یک متخصص DevOps معمولا وظیفه نگهداری و پشتیبانی repository ها را دارد، شامل مانیتور کردن روند توسعه و پیشگیری از merge confict و یا رفع آن در صورت وقوع، همچنین توسعه کدهای اتومات کردن پروسه هایی مانند ساخت CHANGELOG معمولا بر عهده یک DevOps کار است. در بعضی موارد ساخت بعضی از ابزارها را نیز بر عهده DevOps کار میگذارند.

مرحله Verify

مرحله ای است که تست برنامه صورت میگیرد، یک DevOps کار معمولا وظیفه انجام تمام سطوح تست و Quality Assurance را داراست. بطور معمول این کارها بصورت اتومات صورت میگیرد و بعضی نیز توسط دیگر افراد تیم. بعنوان مثال Quality Assurance معمولا بصورت دستی انجام می شود. یکی از پر طرفدارترین تکنیک های verification در توسعه Continuous Integration می باشد. در CI تست برنامه ها بصورت متداول و برای هر تغییر نهایی، مانند commit، صورت میگیرد. نقش یک DevOps کار معمولا اتومات کردن این روند است. با استفاده از ابزارهایی مانند Jenkins، Travis CI، Gitlab Runner و غیره این کار بسیار راحتتر شده است.

مرحله Packaging

در این مرحله عملیات های بسته بندی یک نرم افزار انجام میشود. بسته بندی یک نرم افزار یعنی محیا کردن یک پکیج که خود برنامه و نصب کننده و آماده کننده environment در آن قرار میگیرند. در بعضی موارد Document های نحوه استفاده نیز در همان پکیج قرار میگیرند. وظیفه یک DevOps کار آماده سازی اسکریپت های لازم برای این پکیج بندی و بعضی اوقات حتی ساخت برنامه ی نصب هم هست.

یکی از ابزارهای پر طرفدار پکیج بندی docker می باشد که یک محیط ساخته و به راحتی Deploy میشود و همینطور ویژگی هایی مانند ایزوله سازی، قابلیت جا به جایی سریع و راحت، قابلیت آپدیت راحت و غیره را به ارمغان می آورد.

مرحله Delivery/Deployment

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

نقش یک DevOps کار در این مرحله نیز اتومات سازی این عمل است، یعنی بعنوان مثال اگر برنامه قرار است Deploy شود، برنامه قبلی باید آفلاین شود و برنامه جدید جایگزین شده و اجرا شود و این کار باید برای تمامی node های یک ابر انجام شود. اگر یک برنامه برای مشتری است اطلاعات لازمه برای مخازن فرستاده شود.

مانند CI روش CD هم وجود دارد و ممکن است حتی در روز چندین Deploy داشته باشیم.
بسته بندی ای که با داکر انجام میشود کار deploy را بسیار راحتتر میکند. اما کنترل چندین node بسیار سخت میتواند باشد. برای این کار معمولا از kubernetes استفاده میشود، این ابزار همینطور کار را برای کنترل میکروسرویس ها نیز راحتتر میکند.
برای برقرای ارتباط با چندین node نیز از ابزارهایی مانند chef و puppet نیز استفاده میگردد.

ci cd pipelines

مرحله Configure

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

باز هم نقش یک DevOps کار اتوماتیک کردن است، هر چند که همزمان کار پیکره بندی نیز انجام میدهد. در این مورد اتومات کردن اینکار با ساخت IaC یا همان Infrastructure as Code صورت میگیرد.
برای آسان سازی مدیریت پیکره بندی ابزارهایی مانند Chef، Puppet، Ansible و SaltStack وجود دارند که هرکدام DSL یا همان Domain-Specific Language خود را دارند.

با این ابزارها مدیریت پیکره بندی بخصوص زمانی که تعداد node ها زیاد هستند بسیار آسان میشود و دیگر نیاز نیست خیلی از این کارها را دستی بر روی هر node تکرار کنید.

مرحله Monitoring

این مرحله یکی از اساسی ترین مراحل در نگهداری است. در این مرحله تمام اطلاعات در جریان بصورت ممتد کنترل میشوند تا خطاها و کاستی های برنامه به موقع شناسایی شده و عکس العمل مناسب صورت گیرد.

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

ابزارهای معمول

مجموعه ابزار قابل استفاده برای code base جاوا و سیستم عامل لینوکس:

devops tools

مجموعه بیشتری از ابزارها:

devops tools table

جمع بندی

در آخر میتوان به این نتیجه رسید که یک DevOps کار در تمامی مراحل توسعه و نگهداری نرم افزار نقش دارد و معمولا کار اتومات سازی را بر عهده دارد که بعضی اوقات حتی بصورت مستقیم نیز در آن مرحله دخیل می شود.

بودن در هر یک از این مراحل نیر نیازمند داشتن تجربه در تکنولوژی های مورد استفاده در آن مرحله و آن پروژه را داراست و این ممکن است در پروژه ای با پروژه دیگر متفاوت باشد و این احتمال بالاست. بنا به این دلایل میتوان گفت شغل DevOps کاملا مشخص نیست و در هر پروژه و شرکت ممکن است متفاوت باشد.

امیدوارم که این پست، پست مفیدی بوده و در مورد DevOps و مفاهیم آن یاد گرفته و کلیات آن را متوجه شده باشید. موفق و پیروز باشید.

یک دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا