دواپس (DevOps) چیست ؟ و مهندس دواپس کیست ؟

معرفی مفاهیم دواپس (DevOps)
قبل از اینکه به این سوال پاسخ دهم باید بگویم که دواپس | DevOps چارچوب و استاندارد خاصی ندارد و تنها یک مفهوم پراکنده است، شغل هایی در عنوان مهندس دواپس | DevOps که میبینید ممکن است با یکدیگر بسیار متفاوت باشند و نیازمندی های بسیار متفاوتی داشته باشند، چرا که هر شرکت بر اساس نیاز خود وظایف مهندس دواپس | DevOps را تشریح می کند. در ادامه بیشتر به این مسئله خواهم پرداخت.
DevOps از دو کلمهی Development (توسعه) و Operation (عملیات) تشکیل شده و به نوعی این دو مفهوم را با هم ترکیب کرده است. دواپس بین تیم توسعهی محصول و تیم عملیاتی شرکت، همکاری و تعامل ایجاد میکند. DevOps یک زبان یا یک تکنولوژی خاص نیست بلکه ترکیبی از فلسفه، فرهنگ، شیوهها و ابزارهایی است که کمک میکنند محصولات یا خدمات ما سریعتر به دست مشتریان برسد.
منظور از Development، تیم توسعه است، یعنی تمام کسانی که در ساخت محصول، خطایابی، تست و در نهایت تکمیل محصول نقش دارند. منظور از Operation هم IT Operation یا تیم عملیاتی است. افرادی که در حالت کلی، نگهداری تجهیزات سخت افزاری، نرم افزاری، و محیطهای عملیاتی شرکت را به عهده دارند. DevOps به سازمانها کمک میکند تا سرعت انتقال محصولات یا خدمات خود به مشتریان را افزایش دهند، کیفیت کار را بالا نگه دارند و حضور قدرتمندی در بازار داشته باشند.
تا قبل از DevOps، تیمهای توسعه و عملیاتی در دو محیط ایزوله و جدا از هم فعالیت داشتند. جدا بودن برنامهی کاری این دو تیم باعث ایجاد تاخیر در تحویل و تکمیل پروژه میشد.آن زمان بدون DevOps، بیشتر وقت اعضای تیم به طراحی، تست و استقرار میگذشت به جای این که وقت برای ساخت پروژه واقعی صرف شود.
ساده ترین تعریفی که میتوانم برای دواپس | DevOps بگویم این است که مفهوم و مجموعه ای از روش هاست که سبب می شود پروسه های توسعه نرم افزار و عملیات های IT یکپارچه تر شوند. این یکپارچگی فاصله بین این دو پروسه را کم و تعامل بین اعضای این دو تیم را بسیار بهینه تر می کند، بطوری که سرعت چرخه تولید و نگهداری نرم افزار بسیار بالاتر می رود. این نکته را هم بگویم که این روش در تیم های نسبتا کوچک جوابگو است و در تیم های بزرگ ارتباط بین اعضای مجموعه با یکدیگر کمتر است.
یکی از مشکلاتی که باعث می شود دواپس | DevOps کار بودن کم معنی و بدون استاندارد باشد، تنوع بسیار زیاد تکنولوژی های مورد استفاده در هر مرحله و نیاز به تسلط بر تکنولوژی مورد استفاده است که باعث می شود چیزی بعنوان یک دواپس | DevOps کار کامل وجود نداشته باشد. به همین دلیل دقیقا مشخص نیست یک متخصص دواپس | DevOps باید چه چیزهایی بلد باشد. بعضی اوقات خطایابی را نیز یک DevOps کار انجام میدهد و حتی رفع آن خطا را نیز انجام میدهد.
عکس زیر پروسه های توسعه و نگهداری نرم افزار را نشان میدهد که در ادامه نقش یک مهندس DevOps در هر کدام از مراحل توضیح خواهم داد:

مرحله برنامه ریزی (Plan)
در این مرحله آنالیز نیازمندی های برنامه و بعد برنامه ریزی برای توسعه و نگهداری برنامه صورت می گیرد. قطعا اگر کسی بر هر دو وجه یعنی وجه توسعه و وجه نگهداری تسلط داشته باشد، دید گسترده و تخصصی ای دارد که میتواند تصمیمات بسیار بهینه تری برای برنامه ریزی، نحوه پیاده سازی بخصوص Technology Stack داشته باشد. بعنوان مثال شاید دو مدل دیتابیس دو نیازمندی مختلف برنامه را بهتر جوابگو باشند اما نگهداری را سخت تر کند، و حتی در توسعه نیاز باشد که جدا جدا پیاده سازی شوند، در حالی که یک DevOps کار دید گسترده ای بر تکنولوژی های مختلف دارد و میتواند برای این دو نیاز مختلف گزینه های بهتری ارائه کند، بعنوان مثال دیتابیسی انتخاب کند که جوابگوی هر دو نیاز باشد و توسعه و نگهداری موارد مربوط به دیتابیس را راحت تر کند.
مرحله پیاده سازی (Create)
در این مرحله توسعه کد بر اساس مستندات تهیه شده در مرحله 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 و غیره این کار بسیار راحتتر شده است.
مرحله بسته بندی (Package)
در این مرحله عملیات های بسته بندی یک نرم افزار انجام میشود. بسته بندی یک نرم افزار یعنی محیا کردن یک پکیج که خود برنامه و نصب کننده و آماده کننده environment در آن قرار میگیرند. در بعضی موارد Document های نحوه استفاده نیز در همان پکیج قرار میگیرند. وظیفه یک مهندس دواپس | DevOps آماده سازی اسکریپت های لازم برای این پکیج بندی و بعضی اوقات حتی ساخت برنامه ی نصب هم هست.
یکی از ابزارهای پر طرفدار پکیج بندی docker می باشد که یک محیط ساخته و به راحتی Deploy میشود و همینطور ویژگی هایی مانند ایزوله سازی، قابلیت جا به جایی سریع و راحت، قابلیت آپدیت راحت و غیره را به ارمغان می آورد.
مرحله توزیع / تحویل (Release)
در این مرحله برنامه ساخته برای بهره برداری میرود، اگر یک برنامه standalone برای کاربر باشد، مخازن دانلود آپدیت میشوند مانند وبسایت اصلی برنامه، اگر برنامه یک سرویس ابری باشد بر روی سرورها بارگذاری و فعال میشود.
نقش یک مهندس دواپس | DevOps کار در این مرحله نیز اتومات سازی این عمل است، یعنی بعنوان مثال اگر برنامه قرار است Deploy شود، برنامه قبلی باید آفلاین شود و برنامه جدید جایگزین شده و اجرا شود و این کار باید برای تمامی node های یک ابر انجام شود. اگر یک برنامه برای مشتری است اطلاعات لازمه برای مخازن فرستاده شود.
مانند CI روش CD هم وجود دارد و ممکن است حتی در روز چندین Deploy داشته باشیم.
بسته بندی ای که با داکر انجام میشود کار deploy را بسیار راحتتر میکند. اما کنترل چندین node بسیار سخت میتواند باشد. برای این کار معمولا از kubernetes استفاده میشود، این ابزار همینطور کار را برای کنترل میکروسرویس ها نیز راحتتر میکند.
برای برقرای ارتباط با چندین node نیز از ابزارهایی مانند chef و puppet نیز استفاده میگردد.

مرحله پیکربندی (Configure)
در این مرحله پیکره بندی انجام میشود. یک برنامه بعد از نصب نیاز به پیکره بندی دارد. از جمله پیکره بندی اختصاصی خود برنامه تا پیکره بندی دیتابیس تا حتی پیکره بندی یک node. که البته پیکره بندی یک node بعد از نصب سیستم عامل صورت میگیرد، ممکن است نسبت به برنامه تغییرات دیگری نیز نیاز باشد که بعدها صورت میگیرد.
باز هم نقش یک مهندس دواپس | DevOps کار اتوماتیک کردن است، هر چند که همزمان کار پیکره بندی نیز انجام میدهد. در این مورد اتومات کردن اینکار با ساخت IaC یا همان Infrastructure as Code صورت میگیرد.
برای آسان سازی مدیریت پیکره بندی ابزارهایی مانند Chef، Puppet، Ansible و SaltStack وجود دارند که هرکدام DSL یا همان Domain-Specific Language خود را دارند.
با این ابزارها مدیریت پیکره بندی بخصوص زمانی که تعداد node ها زیاد هستند بسیار آسان میشود و دیگر نیاز نیست خیلی از این کارها را دستی بر روی هر node تکرار کنید.
مرحله نظارت (Monitoring)
این مرحله یکی از اساسی ترین مراحل در نگهداری است. در این مرحله تمام اطلاعات در جریان بصورت ممتد کنترل میشوند تا خطاها و کاستی های برنامه به موقع شناسایی شده و عکس العمل مناسب صورت گیرد.
در این مرحله یک مهندس دواپس | DevOps کار معمولا هم کار مانیتورینگ و هم کار اتومات سازی گزارش دهی موارد و اعمال استراتژی ها را انجام میدهد.
بعنوان مثال کار بکآپ گیری را اتومات میکند که در مواقعی مانند هر یک ساعت یک بکآپ از داده های خاصی گرفته و به یک سرور امن فرستاده شود. یا بعنوان مثال در صورت تشخیص یک حمله که منجر به گرفتن دسترسی توسط مهاجم شده و اطلاعات حساسی ممکن است دزدیده شوند، killswitch را فعال تا ارتباط مهاجم به کل قطع شود.
رابطه روش های چابک (Agile) با دواپس (DevOps)

قبل از صحبت دربارهی DevOps بهتر است کمی دربارهی رویکرد های Agile (اجایل) و متدهای آن صحبت کنیم. Agile یا چابک برازندهی نامی است که یدک میکشد و در پروژه باعث افزایش سرعت و بهرهوری میشود. بعضی از متدهای معروف Agile که در شرکتهای نرم افزاری به کار گرفته میشوند، عبارتند از اسکرام، XP ،AUP و… . با این که هر کدام از این متدها ساختار جداگانه و مستقل خود را دارند، اما در پایان به رشد مجموعه و بالا بردن کیفیت ختم میشوند. در این متدها مرتب با تکرار و گرفتن بازخورد (Feedback) سروکار داریم. Agile به افراد تیم کمک میکند تا در کنار هم، با سرعت بالا و حفظ کیفیت، تصمیم گرفته و پروژه را پیش ببرند.
نقطهی اشتراک اصلی دواپس و متد اجایل، سرعت است. هر دو رویکرد میخواهند چرخهی رسیدن نرم افزار به مشتری نهایی را تا حد ممکن کوتاه کنند.
دواپس (DevOps) چه تفاوتی با روشهای سنتی توسعه نرم افزار دارد؟
DevOps تغییرات قابل توجهی در ساخت و توسعهی محصول ایجاد کرده است. بهتر است برای درک مفهوم دواپس از یک مثال استفاده کنیم و در این مثال، تفاوت بین روشهای سنتی و DevOps را بررسی کنیم.
سناریوی ما به این شکل است که فرض میکنیم پروژهی ما ساخت یک اپلیکیشن است و قرار است تا دو هفتهی دیگر این اپلیکیشن را بررسی کنیم. تا اینجای کار 80% برنامه نویسی پروژه انجام شده است و در حال خرید سرور برای آنلاین کردن پروژه و انتقال کدها به سرور هستیم. این سناریو را با استفاده از هر دو روش سنتی و دواپس، بررسی میکنیم:
تیم توسعه در روش کلاسیک، سرورهای جدید را فعال میکنند و کار آزمایش و تست روی پروژه آغاز میشود. از سوی دیگر، تیم عملیاتی مستندات پروژه را مینویسند و زیرساختهای موردنیاز را بررسی میکنند. در روش DevOps بعد از اینکه نیاز به سرورهای جدید احساس شد، قبل از اینکه تیم سفارشی ثبت کند، هر دو واحد توسعه و عملیات در کنار هم روی مستندسازی و کاغذبازی کار میکنند تا به خوبی نیازهای پروژه را پیدا کنند. سپس سرورهای جدید را تهیه میکنند.
در روش سنتی، برنامه نویسانی که در حال کار بر روی پروژه هستند، بهتر از هر کسی میتوانند در مورد مواردی مثل کانفیگ سرورها، موقعیت مکانی آنها، ترافیکی که برنامه احتمالا خواهد داشت و… تصمیم گیری کنند. اما معمولا به دلیل جدا بودن دو بخش توسعه و عملیات، توسعه دهندگان در این موارد دخالتی نمیکنند. در روش DevOps، توسعهدهندگان اطلاعات خود را در اختیار تیم عملیاتی قرار میدهند و آنها نیز از این ورودیها در انتخاب سرور استفاده میکنند.
در روش سنتی، تیم عملیاتی اطلاعی از مراحل ساخت نرم افزار ندارند و کارهای نظارتی و بررسی را با توجه به درک خود از پروژه انجام میدهند. در روش DevOps، تیم عملیاتی کاملا در جریان پیشرفت پروژه و مراحلی طی شده هستند. از آنجا که تیمهای توسعه و عملیاتی با هم در تعامل هستند، میتوانند با توجه به نیازهای IT و تجارت، یک برنامهی نظارتی مشترک طراحی کنند. همچنین ابزارهای مانیتورینگ یا APM) Application Performance Monitoring) هم استفاده میشود.
در روش سنتی، قبل از آنلاین کردن برنامه، تستهایی روی آن انجام میشود تا عملکرد برنامه برای آخرین بار تست شود. در این حالت ممکن است برنامه به مشکل خورده یا به کل از کار بیفتد. در این شرایط انتشار برنامه به تاخیر میافتد. در روش DevOps قبل از انتشار نهایی، یک تست روی برنامه اجرا شده و کمی سرعت آن افت میکند. تیم توسعه به سرعت گلوگاهها را تشخیص داده و مشکلات اصلی را برطرف میکنند. هیچ مشکلی در نظم کاری به وجود نیامده و برنامه طبق زمانبندی قبلی منتشر میشود.
به چه کسی مهندس دواپس می گویند ؟
مهندس DevOps یک متخصص IT است که با مهندسان نرم افزار، برنامه نویسان، اپراتورهای سیستم و دیگر افراد شاغل در حوزهی IT همکاری میکند. این شخص باید مهارتهای سخت و فنی بالایی داشته باشد. داشتن مهارتهای نرم به پیشرفت شغلی مهندس دواپس کمک زیادی میکند. چون باید با تیمهای مختلف توسعه، عملیات و تست در ارتباط بوده و با آنها همکاری داشته باشد.
برخی از مسئولیتها، نقشها و مهارتهایی که یک مهندس دواپس باید از عهدهی آنها برآید عبارتند از:
- توانایی رفع ایرادات رایج در سیستمهای مختلف
- طراحی، تحلیل و ارزیابی مسائل مربوط به خودکارسازی سیستمها
- داشتن تجربهی زیاد در برنامه نویسی زبانهای اسکریپتی مثل پایتون، روبی، پرل و…
- تسلط به مباحث CI و CD و توانایی کار با ابزارهایی مثل Maven، Jenkins و…
- تسلط بر استفاده از نرم افزارهای مدیریت پیکربندی مثل Puppet، SaltStack و…
- آشنایی با مهارتهای نرم و توانایی یادگیری سریع مباحث جدید
- و…
ابزارهای رایج در دواپس
مجموعه ابزار قابل استفاده برای code base جاوا و سیستم عامل لینوکس:

سایر ابزارها :

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