فرآیند توسعه نرم افزار همواره دستخوش تغییرات بوده است، چرا که برنامه نویسان خوش ذوق و خلاق همیشه به دنبال پیدا کردن راهی برای بهتر کردن شرایط موجود هستند. پیدایش زبانها، کتابخانهها و فریمورکهای جدید نشان میدهد که دنیای کامپیوتر در حال رشد و پیشرفت است و توسعه دهندگان نرم افزار باید برای مشکلات جدید، راه حلهای جدید و مبتکرانه ارائه دهند.
DevOps یا دواپس چیست؟
DevOps از دو کلمهی Development (توسعه) و Operation (عملیات) تشکیل شده و به نوعی این دو مفهوم را با هم ترکیب کرده است. دواپس بین تیم توسعهی محصول و تیم عملیاتی شرکت، همکاری و تعامل ایجاد میکند. یک زبان یا یک تکنولوژی خاص نیست بلکه ترکیبی از فلسفه، فرهنگ، شیوهها و ابزارهایی است که کمک میکنند محصولات یا خدمات ما سریعتر به دست مشتریان برسد.
منظور از Development، تیم توسعه است، یعنی تمام کسانی که در ساخت محصول، خطایابی، تست و در نهایت تکمیل محصول نقش دارند. منظور از Operation هم IT Operation یا تیم عملیاتی است. افرادی که در حالت کلی، نگهداری تجهیزات سخت افزاری، نرم افزاری، و محیطهای عملیاتی شرکت را به عهده دارند. DevOps به سازمانها کمک میکند تا سرعت انتقال محصولات یا خدمات خود به مشتریان را افزایش دهند، کیفیت کار را بالا نگه دارند و حضور قدرتمندی در بازار داشته باشند.
تا قبل از DevOps، تیمهای توسعه و عملیاتی در دو محیط ایزوله و جدا از هم فعالیت داشتند. جدا بودن برنامهی کاری این دو تیم باعث ایجاد تاخیر در تحویل و تکمیل پروژه میشد. آن زمان بدون DevOps، بیشتر وقت اعضای تیم به طراحی، تست و استقرار میگذشت به جای این که وقت برای ساخت پروژه واقعی صرف شود.
رابطهی Agile با DevOps
قبل از صحبت دربارهی DevOps بهتر است کمی دربارهی مدل Agile (اجایل) و متدهای آن صحبت کنیم. Agile یا چابک برازندهی نامی است که یدک میکشد و در پروژه باعث افزایش سرعت و بهرهوری میشود. بعضی از متدهای معروف Agile که در شرکتهای نرم افزاری به کار گرفته میشوند، عبارتند از اسکرام، XP ،AUP و… . با این که هر کدام از این متدها ساختار جداگانه و مستقل خود را دارند، اما در پایان به رشد مجموعه و بالا بردن کیفیت ختم میشوند. در این متدها مرتب با تکرار و گرفتن بازخورد (Feedback) سروکار داریم. Agile به افراد تیم کمک میکند تا در کنار هم، با سرعت بالا و حفظ کیفیت، تصمیم گرفته و پروژه را پیش ببرند.
نقطهی اشتراک اصلی دواپس و متد اجایل، سرعت است. هر دو تکنولوژی میخواهند چرخهی رسیدن نرم افزار به مشتری نهایی را تا حد ممکن کوتاه کنند. قرار نیست این مقاله تنها راجع به مهندسی نرم افزار و متدلوژیهای آن باشد، به همین خاطر، بیشتر از این دربارهی Aglie صحبت نمیکنیم.
DevOps چه تفاوتی با روشهای سنتی توسعه نرم افزار دارد؟
DevOps تغییرات قابل توجهی در ساخت و توسعهی محصول ایجاد کرده است. بهتر است برای درک مفهوم دواپس از یک مثال استفاده کنیم و در این مثال، تفاوت بین روشهای سنتی و DevOps را بررسی کنیم.
سناریوی ما به این شکل است که فرض میکنیم پروژهی ما ساخت یک اپلیکیشن است و قرار است تا دو هفتهی دیگر این اپلیکیشن را بررسی کنیم. تا اینجای کار ۸۰% برنامه نویسی پروژه انجام شده است و در حال خرید سرور برای آنلاین کردن پروژه و انتقال کدها به سرور هستیم. این سناریو را با استفاده از هر دو روش سنتی و دواپس، بررسی میکنیم:
تیم توسعه در روش کلاسیک، سرورهای جدید را فعال میکنند و کار آزمایش و تست روی پروژه آغاز میشود. از سوی دیگر، تیم عملیاتی مستندات پروژه را مینویسند و زیرساختهای موردنیاز را بررسی میکنند. در روش DevOps بعد از اینکه نیاز به سرورهای جدید احساس شد، قبل از اینکه تیم سفارشی ثبت کند، هر دو واحد توسعه و عملیات در کنار هم روی مستندسازی و کاغذبازی کار میکنند تا به خوبی نیازهای پروژه را پیدا کنند. سپس سرورهای جدید را تهیه میکنند.
در روش سنتی، برنامه نویسانی که در حال کار بر روی پروژه هستند، بهتر از هر کسی میتوانند در مورد مواردی مثل کانفیگ سرورها، موقعیت مکانی آنها، ترافیکی که برنامه احتمالا خواهد داشت و… تصمیم گیری کنند. اما معمولا به دلیل جدا بودن دو بخش توسعه و عملیات، توسعه دهندگان در این موارد دخالتی نمیکنند. در روش DevOps، توسعهدهندگان اطلاعات خود را در اختیار تیم عملیاتی قرار میدهند و آنها نیز از این ورودیها در انتخاب سرور استفاده میکنند.
در روش سنتی، تیم عملیاتی اطلاعی از مراحل ساخت نرم افزار ندارند و کارهای نظارتی و بررسی را با توجه به درک خود از پروژه انجام میدهند. در روش DevOps، تیم عملیاتی کاملا در جریان پیشرفت پروژه و مراحلی طی شده هستند. از آنجا که تیمهای توسعه و عملیاتی با هم در تعامل هستند، میتوانند با توجه به نیازهای IT و تجارت، یک برنامهی نظارتی مشترک طراحی کنند. همچنین ابزارهای مانیتورینگ یا APM) Application Performance Monitoring) هم استفاده میشود.
در روش سنتی، قبل از آنلاین کردن برنامه، تستهایی روی آن انجام میشود تا عملکرد برنامه برای آخرین بار تست شود. در این حالت ممکن است برنامه به مشکل خورده یا به کل از کار بیفتد. در این شرایط انتشار برنامه به تاخیر میافتد. در روش DevOps قبل از انتشار نهایی، یک تست روی برنامه اجرا شده و کمی سرعت آن افت میکند. تیم توسعه به سرعت گلوگاهها را تشخیص داده و مشکلات اصلی را برطرف میکنند. هیچ مشکلی در نظم کاری به وجود نیامده و برنامه طبق زمانبندی قبلی منتشر میشود.
چرخه حیات (Life cycle) دواپس
چرخه حیات DevOps به ۵ بخش کلی تقسیم میشود:
- توسعه
- تست
- ادغام
- گسترش
- نظارت
در مرحلهی اول، کل فرآیند توسعه به چرخههای کوچکتر تقسیم شده و سرعت ساخت و تحویل نرم افزار بالا میرود. در مرحلهی تست، تیم تضمین کیفیت یا QA از ابزارهای مختلفی مثل Selenium برای رفع اشکلات کدهای جدید استفاده میکنند. در مرحلهی ادغام، کدهای جدید با کدهای قبلی ادغام میشوند. در مرحلهی گسترش باید شرایط به گونهای باشد که هر زمان کد جدیدی به برنامه اضافه شد، در عملکرد محصول (مخصوصا اگر ترافیک زیادی داشته باشد) تاثیر منفی و نامطلوب نگذارد. در مرحلهی آخر و مرحلهی نظارت، تیم رفتار سیستم را زیر نظر داشته و باگهای پیش آمده را برطرف میکند.
مزایای استفاده از DevOps
DevOps به توسعهدهندگان اجازه میدهد که cl) Continuous Integration) و ci) Continuous Delivery) را با هم ادغام کنند. این تکنیک کمک میکند تا محصولات شما سریعتر در بازار منتشر شوند. برخی از مزایایی که با استفاده از دواپس بدست میآوریم عبارتند از:
- پیشبینی شکست یا موفقیت محصول: DevOps تا حد زیادی احتمال شکست نرمافزارهای جدید را کاهش میدهد.
- قابل تکرار بودن: به دلیل داشتن نسخههای گوناگون، بازگردانی نسخههای قدیمی را در هر زمانی ممکن میکند.
- نگهداری: در صورت خراب شدن نسخهی جدید، بازیابی نسخههای قبلی بسیار راحت است.
- کیفیت بالاتر: DevOps کمک میکند که تیم در کنار افزایش سرعت، کیفیت را هم بالا نگه دارد.
- کاهش ریسک: دواپس مسائل امنیتی را در چرخهی تحویل نرم افزار رعایت میکند.
- انعطاف پذیری: استفاده از این تکنیک به پایداری، امنیت و قابل تغییر بودن نرم افزار کمک میکند.
در چه مواقعی استفاده از DevOps ضروری است و چه زمانهایی استفاده از آن چندان ضرورتی ندارد؟
از DevOps بیشتر در پروژههای بزرگ استفاده میشود. مثلا در ساخت سایتهای تجاری پیچیده یا سرویسهایی که مبتنی بر فضای ابری هستند. همچنین در جاهایی که اطلاعات حساس و مهمی ردوبدل میشوند مثل بانکها، نیروگاههای هستهای، سازمانهای مرتبط با انرژی، نیرو و… استفاده از DevOps توصیه نمیشود.
به چه کسی مهندس DevOps میگویند؟
مهندس DevOps یک متخصص IT است که با مهندسان نرم افزار، برنامه نویسان، اپراتورهای سیستم و دیگر افراد شاغل در حوزهی IT همکاری میکند. این شخص باید مهارتهای سخت و فنی بالایی داشته باشد. داشتن مهارتهای نرم به پیشرفت شغلی مهندس دواپس کمک زیادی میکند. چون باید با تیمهای مختلف توسعه، عملیات و تست در ارتباط بوده و با آنها همکاری داشته باشد.
برخی از مسئولیتها، نقشها و مهارتهایی که یک مهندس دواپس باید از عهدهی آنها برآید عبارتند از:
- توانایی رفع ایرادات رایج در سیستمهای مختلف
- طراحی، تحلیل و ارزیابی مسائل مربوط به خودکارسازی سیستمها
- داشتن تجربهی زیاد در برنامه نویسی زبانهای اسکریپتی مثل پایتون، روبی، پرل و…
- تسلط به مباحث CI و CD و توانایی کار با ابزارهایی مثل Maven، Jenkins و…
- تسلط بر استفاده از نرم افزارهای مدیریت پیکربندی مثل Puppet، SaltStack و…
- آشنایی با مهارتهای نرم و توانایی یادگیری سریع مباحث جدید
- و…
جمع بندی:
دواپس به دنبال نزدیک کردن تیم توسعه و تیم عملیاتی است. اگر این امر محقق شود، سرعت ارائهی محصول یا خدمات به کاربران نهایی تا حد قابل توجهی افزایش پیدا میکند. DevOps یک تکنولوژی یا یک نوع خاص از برنامه نویسی نیست. بلکه مجموعهای از تکنیکها برای افزایش بهره وری و بالا بردن راندمان کار در تیمها است. از جمله مزایای دواپس نسبت به روشهای سنتی توسعه نرم افزار میتوان به انعطاف پذیری، کاهش ریسک، کیفیت بالاتر، نگهداری، قابل تکرار بودن، پیشبینی شکست یا موفقیت محصول و… اشاره کرد.