مزایای دواپس چیست؟ چرا DevOps تا این اندازه اهمیت دارد؟

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

در مطالب قبلی راجع به مفهوم DevOps صحبت کردیم (اینجا و اینجا). همچنین راجع به چارچوب CALMS در دواپس نوشتیم و در جایی دیگر راجع به کج فهمی هایی که در باره DevOps وجود دارد صحبت شد. در ادامه ی این سری مطالب قصد داریم راجع به اهمیت دواپس و مزایای دواپس بنویسیم. لطفا با ما همراه باشید.

چرا دِوآپس تا این اندازه اهمیت دارد؟

1. همه ما با چالش هایی مواجه هستیم، با همکاری هم آن ها را رفع کنیم[عکس همکاری]

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

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

همکاری با یکدیگر در سایه ی ارتباط موثر به شما اجازه می دهد که راه کارهایی را ایجاد کنید که بتواند از حادثه های مشابه در آینده جلوگیری کند.

2. بهبود سرعت ارائه به بازار | Improve Speed to Market

Speed to Market

با بهبود سرعت رسیدن به بازار می توانید مزیت رقابتی در بازاری را بدست آورید که نرم افزارها در آن عمر کمی دارند و خیلی زود به زود کهنه می شوند.

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

3. یکپارچه سازی و تحویل مستمر | CI / CD

Continuous Integration and Delivery

یکپارچه سازی مستمر فرایندی است که در آن توسعه دهندگان می توانند به طور مستمر کارهای خود را با هم یکپارچه کنند. (اطلاعات بیشتر: Continuous Integration). استفاده از یک فرایند بیلد اتوماتیک به همراه اجرای تست های اتوماتیک، ما را قادر می سازد که با هر تغییر در کد، از تاثیرات منفی احتمالی آن تغییر بر کل نرم افزار مطلع شویم.

تحویل مستمر رویکردی در مهندسی نرم افزار است که تیم ها را قادر می سازد نرم افزار تولید شده را به روشی سریع و مطمئن برای انتشار و تحویل آماده کنند. این فرایند از لحظه اضافه شدن یا تغییر کد در source control شروع می شود و شامل بیلد، تست، پیکربندی و انتشار می شود. (اطلاعات بیشتر: Continuous Delivery).

فرایند های CI و CD توسعه دهندگان را قادر می سازد تا مشکلات را هر چه سریعتر شناسایی و رفع کنند. شناسایی سریع مشکلات به معنی پیچیدگی کمتر و نیاز به کار کمتر برای رفع آن و فرایند دیباگ است. از ابزارهای رایجی که برای انجام عملیات CI و CD وجود دارند می توان به Jenkins، Team City و TFS یا Team Foundation Server اشاره کرد.

بنا به گزارش سالانه Puppet Labs در سال 2014، سازمان های فناوری اطلاعات با کارایی بالا که از روش های DevOps استفاده می کنند، بسیار چابک تر و قابل اطمینان تر از رقیبان خود هستند. گزارش سال 2015 همین موسسه نشان می دهد که روش های دوآپس و فرهنگ دوآپس سازمان ها را قادر می کند که بتوانند اپلیکیشن های خود را 30 برابر بیشتر منتشر کنند، همچنین زمان اعمال یک تغییر یا رفع یک مشکل 200 برابر سریعتر از سایر سازمان ها باشد. در چنین سازمانی بهره وری و تولید محصولات بهتر نرم افزاری، بارها بیشتر از سایر سازمان ها است.

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

4. محیط های عملیاتی پایدار تر | More Stable Operating Environment

Stability

به طور سنتی، نگهداری از سرورها و سخت افزارها و محیط های عملیاتی، بر عهده ی تیم IT Operation (عملیات) و افرادی که آن ها را با نام System Administrators می شناسیم بوده است.

کار کردن به عنوان یک تیم واحد با اعضای چند-عملکردی (cross-functional) شامل مدیران پایگاه داده (DBAs)، تحلیلگران کسب و کار، توسعه دهندگان، تضمین کنندگان کیفیت، و مهندسان عملیاتی و مهندسان DevOps، مزایای بسیاری را به همراه می آورد.

یک تیم به وسیله DevOps، علاوه بر عملکردها (functionality) به پایداری (stability) هم اهمیت می دهد. هر یک از اعضای تیم خود را مالک و مسوول اهداف کسب و کار می داند. تناوب و تکرار انتشارها، تغییرات کوچک، و ابزارهای پایش مانند New-Relic و Boundary به پیشرفت و بهبود محیط های عملیاتی، زیرساخت ها و پایداری سورس-کد ها کمک می کنند.

یکی از سنجه های ویژه در اهمیت به پایداری، تناوب و تکرار انتشارها است. دِوآپس، به مهندسان این امکان را می دهد که بتوانند سریعتر عیب یابی کنند و خطاها را برطرف کنند. این دسته از تمرین ها باعث کاهش شاخص MTTR  می شوند. Mean-Time-To-Recover یک متریک بسیار مهم به این معنی است که نشان می دهد سرعت برگشت به وضعیت پایدار در زمان وقوع یک حادثه چقدر است. بنابراین بعد از یک failure در زیرساخت، بسیار سریعتر می توان پایدار را به سرویس بازگرداند.

نرم افزارهای مانیتورینگ اپلیکیشن ها و سرورها مانند New Relic و Boundary با فراهم کردن دسترسی مهندسان به اطلاعات حیاتی نرم افزار و محیط عملیاتی، به شناسایی خطاها کمک می کنند تا پایداری را حفظ کنند.

ترکیب همه ی این ابزارها و به-روش ها (Best Practices) همراه با خودکارسازی (automation) به تیم های DevOps اجازه می دهند تا پایداری کلی سرویس را بهبود ببخشند و خرابی های بحرانی زیرساختی را کاهش دهند. علاوه بر این، آن ها را قادر می سازد تا در آن هنگام سریعتر و چابک تر رفتار کنند.

5. تعمیرات سریعتر و آسان تر | Faster and Easier Fixes

Faster and Easier Fixes
ماهیت سریع و چابک تیم های DevOps تیم ها را قادر می سازد تا قابلیت های جدید را در قالب گسترش‌های کوچک تر و ماژولارتر معرفی کنند. از آنجا که این استقرارها بیشتر هدفمند و ایزوله هستند، شناسایی باگ ها آسانتر است، رفع آن ها سریع تر انجام می گیرد و پیاده سازی آن ها نیز آسان است. فقط لازم است که تیم ها آخرین تغییراتی کد را مجددا بررسی کنند تا بتوانند مشکلات را رفع کنند.

این رویکرد مزایای قابل توجهی هم برای کسب و کارها دارد. امکان رفع سریع تر خطاها باعث رضایت مشتریان شده و منابع ارزشمند را آزاد می کند و می توان این منابع را بر اعمال دیگری مثل طراحی، توسعه و استقرار عملکردهای و ویژگی های جدید متمرکز کرد. استفاده ترکیبی از سیستم های کنترل نسخه(Version-Control)، یکپارچه سازی مستمر (Continuous-Integration)، ابزارهای استقرار خودکار (Deployment-Automation-Tools) و توسعه مبتنی بر تست (TDD) به تیم های DevOps این امکان را داده است که تغییرات را در بخش های کوچکتر و به صورت افزایشی (incremental) اعمال کنند.
به دلیل این پیاده سازی های ماژولارتر، تیم های DevOps می توانند زودتر مشکلات مربوط به پیکربندی، کدهای اپلیکیشن و زیرساخت را کشف کنند؛ زیرا بعد از اتمام کدنویسی، مسئولیت به تیم دیگری محول نمی شود.
به دلیل اعمال تغییرات به صورت کوچکتر و تدریجی، مشکلات، پیچیدگی کمتری داشته و تصمیم گیری برای رعفع آن ها سریع تر انجام می شود زیرا مسئولیت خطایابی و رفع مشکلات فقط متوجه یک تیم خاص می شود.
گزارش State of DevOps که هر ساله توسط Puppet Labs منتشر می شود، در سال 2015 نشان می دهد که، شرکت های IT با عملکرد و بهره وری بالاتر نسبت به رقبای خود با عملکرد ضعیف تر، بعد از fail شدن، 168 بار سریع تر قادر به جبران آن و بهبود وضهیت هستند.

6. تجزیه سیلوهای کاری | Breaking Down Silos

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

7. صرفه جویی هزینه ها و منابع | Resource & Cost Reduction

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

8. افزایش کارایی | Increased Performance

[عکس افزایش کارایی]
در محیط های سنتی IT، زمان و منابع زیادی به هدر می روند. معمولاً برای انتظار جهت تکمیل کارها توسط دیگران یا حل چندین باره‌ی یک مشکل، زمان زیادی هدر می رود و این امر باعث سرخوردگی و ایجاد هزینه های مالی می شود.

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

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

در گزارش “2015 State of DevOps Report” به چند نکته کلیدی اشاره شده که نشان می دهد تیم هایی با رویکرد Devops نسبت به رقیبانشان، از کارایی بالایی برخوردار بودند.

  • 30 برابر استقرار کدهای نرم افزاری بیشتر است
  •  200 برابر استقرار نرم افزار سریعتر است
  • پایداری سیستم بیشتر شده است
  • 60 درصد شکست های (failure) کمتری دارند
  • 168 برابر سریعتر می توانند بعد از مشکلات، بهبود یابند (MTTR)

فکر میکنم شما هم موافق باشید که این افزایش قابل ملاحظه ای در عملکرد تیم ها است!

9. خلاقیت و نوآوری | Innovation & Creativity

[عکس خلاقیت و نوآوری]

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

10. رضایت شغلی | Job Satisfaction

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

اما دلیل اهمیت رضایت شغلی چیست؟
طبق گزارش سال 2014 Sate of DevOps “رضایت شغلی عامل شماره یک پیش بینی عملکرد (کارایی) سازمانی است.” یعنی رضایت اعضای تیم در انجام نقش شان عامل بسیار مهمی در افزایش کارایی شرکتی است.
شیوه ها و فرهنگ DevOps رضایت کارمندان را افزایش می دهد و این امر منجر به نتایج شغلی بهتر می شود.

11. شکست های کمتر | Fewer Failures

[عکس شکست های کمتر]
داده های گزارش سال 2014 State of DevOps نشان داد که سازمان هایی که عملکرد خوبی دارند تعداد شکست هایشان (خرابی هایشان) 50 درصد کمتر است. این روند ادامه پیدا کرد و گزارش سال 2015 نشان داد که سازمان هایی که طرزتفکر و فرهنگ DevOps را اتخاذ کرده اند نسبت به آن هایی که رویکرد DevOps را پیاده سازی نکرده اند 60 برابر کمتر دچار شکست (خرابی) می شوند. این اطلاعات بسیار واضح هستند و مزایای عظیم DevOps را به عنوان یک طرز تفکر و فرهنگ برای مشاغل و البته افراد، مشخص کردند. شکست کمتر به معنی زمان بیشتر عملکرد سرویس و نیاز به منابع کمتر برای حل مشکلات است؛ در نتیجه به شما امکان می دهد که تمرکز بیشتری بر بهبودهای بیشتر و ابتکارات خلاقانه داشته باشید.

منبع: متن فوق برگرفته از سایت purplegriffon می باشد.

نتیجه گیری

امیدوارم که توانسته باشم مزایای یک رویکرد DevOps را مشخص کرده باشم. فرهنگ فناوری اطلاعات مدام در حال تغییر است و روش های سنتی مدیریتِ انتشار محصولات، اغلب ناکارآمد، هزینه بر و زیانبخش هستند.
شاید کلمه DevOps، واژه‌ای باشد که تازه باب شده است ولی قرار است ماندگار شود و در حال متحول کردن صنعت فناوری اطلاعات است.
افزایش کارایی، کاهش هزینه ها و تولید نرم افزار بهتری که شکست های (failure) کمتری داشته باشد مواردی هستند که تمام فروشنده های حوزه فناوری اطلاعات باید سعی به دستیابی به آن‌ها داشته باشند. با استفاده از یک رویکرد DevOps این موارد قابل دستیابی تر هستند.
برای کسب اطلاعات بیشتر درباره DevOps و اینکه سازمان شما چطور می تواند تغییری فرهنگی به سمت پیاده سازی بهترین روش های DevOps داشته باشد با ما در ارتباط باشید.

Share Button

دوآپس و تصورات اشتباه درباره DevOps

دوآپس و تصورات اشتباه درباره آن | DevOps Misundrestandings

تصورات اشتباه و کج فهمی ها درباره دوآپس ( DevOps )

دنیای فناوری اطلاعات با سرعت و شتاب زیادی در حال تغییر است و هر روز واژه های جدیدی در حال شکل گرفتن است، با این وجود شاید عجیب نباشد که درک های نادرست و کج فهمی هایی از این واژه ها ایجاد شود. واژه DevOps / دوآپس  (که اولین بار در کنفرانس Agile 2008 مطرح شد) هم از این قاعده مستثنی نبوده. از این رو سوالات زیادی درباره اینکه واقعا دوآپس چیست مطرح می شود. در این مطلب سعی کردم به طور خلاصه به برخی از تصورات اشتباه درباره DevOps بپردازم. در پست های آینده، به طور مفصل تری به “انواع روش های اشتباه اجرا و استقرار دوآپس در سازمان ها” خواهم پرداخت.

DevOps چیست ؟

بیشتر از آنکه روی پاسخ سوال “DevOps چیست ؟” توافق وجود داشته باشد، روی سوال “DevOps چه نیست ؟” وجود دارد. در ادامه بیشتر به این مطلب خواهم پرداخت
در ادامه مطالب زیر را خواهید خواند:


دوآپس فقط Automation و Continuous Delivery نیست

اشتباه بزرگ و رایجی که وجود دارد این است که تصور شود جنبش دوآپس کلا درباره ی خودکارسازی همه چیز با یک سری ابزار و تکنولوژی است. (مثل Docker, Ansible, Kubernetes, Team Foundation ). بسیاری بیان می کنند که ما در سازمان خودمان، دوآپس داریم آن را اجرا کردیم. وقتی که می پرسیم چطور آن را اجرا کردید، متوجه می شویم که از واقعیت دور هستند و فقط بخش کوچکی از آن را اجرا کرده اند. (معمولا پاسخ ها به مسائلی بیش از Automation و Continuous Delivery ختم نمی شود).

DevOps CD CI Agile چیست

دوآپس به معنی حذف عملیات نیست

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

همانطور که متوجه شدیم قسمت هایی از عملیات نیاز به خودکارسازی دارند. این کار به چند روش قابل انجام است، یکی اینکه اعضای تیم عملیات، خودکارسازی را توسعه دهند، یا توسعه دهندگان برای “operation” کدنویسی کنند، یا هر دوی آن. پذیرش این موضوع برای برخی سخت است و در مقابل آن مقاومت می کنند، اما این بخشی از ارزشی است که با همکاری مشترک بین تیمی بوجود می آورد. تمامی تیم هایی که در این زمینه موفق شده اند شامل هر دو گروه از افراد بودند (متخصصان حرفه ای توسعه و متخصصان حرفه ای عملیات) و با یک همکاری مشترک در کنار هم، یک محصول بهتر ایجاد کردند.

دوآپس فقط ابزار نیست

دوآپس به سادگی اجرا و به کارگیری چند ابزار ساده نیست. یکی از مسائل نگران کننده که در تعاریف موجود وجود دارد، مفاهیم گیج کننده و با ساختاری ضعیف در آن ها است که باعث می شود افراد بعد از یادگیری این تئوری شروع کنند به اجرای فرایند ها و یا به کارگیری ابزارها بدون اینکه اصول دوآپس را در ذهن خود داشته باشند، که این قطعا یک ضد الگو است. همانقدر که خودکارسازی هوشمندانه می تواند سودمند باشد، خودکارسازی غیر هوشمندانه باعث آسیب هایی می شود. (در آینده مطالبی راجع به اصول و انواع ضد الگوهای دوآپس خواهم نوشت)

معمولا در چابک سازی تیم ها هم مشابه این اتفاق می افتد، اعضای گروه کار کردن در قالب iteration و اجرای سایر تمرین های چابک (Agile) را شروع می کنند بدون آنکه همکاری معناداری با هم داشته باشند. من تیم های زیادی را می شناسم که از برخی از روش ها و ابزارهای چابک استفاده می کنند بدون آنکه به اصول چابک توجه کافی داشته باشند. مشخص است که نتیجه ایده آل نمی شود. مطمئنا ابزارهای چابک (یا به طور مشابه ابزارهای دوآپس) می توانند مفید باشند، اما اگر ندانید که چطور از آن ها درست استفاه کنید، شبیه چاقوی جراحی ای است که با آن هندوانه قاچ کنید!

در آخر به این موضوع هم اشاره کنم این جمله هم اشتباه است که بگوییم “هیچ ابزاری نباید به نام ابزار دوآپس معرفی شود”. آیا poker planning در Agile به این معنی است که انجام آن باعث چابک شدن شما می شود ؟ خیر. اما این یک ابزار مشترک در بسیاری از روش های چابک است، پس می توانیم از آن به عنوان یک “ابزار چابک” نام ببریم. به طور مشابه به این دلیل که نمی توان دوآپس را فقط مجموعه ای از ابزار دانست، نمی توان گفت که ابزارهایی که برای اجرای آن ساخته می شوند، “ابزار دوآپس” نیستند.

دوآپس فقط یک فرهنگ نیست

بسیاری از افراد اسرار دارند که بگویند “دوآپس فقط یک فرهنگ است” و شما نمی توانید آن را با یک سری اصول و تمرین ها اعمال کنید، اما این جمله هم درست نیست. Agile فقط به واسطه بعد فرهنگی اش نیست که به هزاران تیم کمک کرده است، اعضای تیم های چابک در کنار هم بهروش هایی (Best Practice) را جهت اجرای آن شناسایی کردند و ابزارهایی را به کار گرفتند و آن ها را به اشتراک گذاشتند. دوآپس از بهروش ها، ابزارها و به طور کلی آیتم هایی در سطوح مختلف تشکیل شده است (و همچنان در حال کامل تر شدن است) ، و عمدتا بدون اجرای تمریناتی که حول آن بوجود آمده، بی فایده است.

دوآپس فقط توسعه و عملیات نیست

دوآپس محدود به توسعه (Development) و عملیات (Operation) نیست. برخی شاکی هستند و می گویند پس اعضای تیم امنیت چه ؟ یا مدیران شبکه چه ؟ چرا دوآپس به آن ها توجه نکرده ؟ اما نکته ی مهم این است که دوآپس برای همه ی کسانی است که به نحوی در تولید و تحویل یک محصول یا یک سیستم مشارکت دارند، از افراد کسب و کار گرفته، تا تحلیل گران، توسعه دهندگان، اعضای تیم های زیرساخت، شبکه، امنیت و سایر افراد مرتبط. همانطور که در توسعه چابک، تمرکز بر ارتباط و همکاری بین کسب و کار (Business) و تیم توسعه (Development) است (Biz + Dev)، در دوآپس تمرکز بر ارتباط و همکاری بین توسعه (Development) و عملیات (IT Operation) است اما تنها به این موارد محدود نمی شود. در نتیجه دوآپس شامل تمام کسانی می شود که به نحوی در تحویل یک محصول یا سرویس مشارکت دارند. به همین منظور اسامی مشابهی مانند DevSecOps, DevOpSec, SecOps, SecureDevOps یا BizDevSecOps مطرح می شود اما رویکرد و طرز تفکری دوآپس شامل همه ی این موارد هست، درگیر عناوین نشوید.

دوآپس فقط یک عنوان شغلی نیست

به سادگی و با تغییر نام تیم عملیات (IT Operation) به تیم دوآپس، هیچ چیز عوض نمی شود. با تعویض عنوان شغلی به مهندس دوآپس (DevOps Engineer) هم چیزی عوض نمی شود. اگر شما ارزش ها و اصول دوآپس را قبول نکنید (که نیازمند تغییرات در سطح کلی سازمان است نه فقط تغییرات در یک بخش یا تیم)، نمی توانید از تمام مزایای آن بهره مند شوید.

البته من مخالف این موضوع نیستم که کسی نباید از واژه ی دوآپس در عناوین شغلی استفاده کند. معمولا استفاده از این واژه برای تمایز بین دو تفکر است، یکی “تفکر به روش دوآپس، تاکید بر خودکارسازی، همکاری توسعه و عملیات، اجرای CI و …” و دیگری  “تفکر کسانی که در اتاق خودشان نشسته اند و اهمیتی نمی دهند که در بیرون از اتاق چه اتفاقی می افتد و منافع سازمان در چیست”.

دوآپس یک تیم نیست

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

دوآپس راجع به همه چیز و همه جا نیست

برخی از افراد با طرح یک ادعای بزرگ به اشتباه مدعی می شوند که دوآپس درباره “همه چیز و همه جا !” است. دوآپس با تفکر های چابک (Agile) و ناب (Lean) اجین می شود و از آن به عنوان فرصتی برای همکاری درون سازمانی استفاده می شود، اما واقعا همه چیز به خاطر وجود آن نیست. این بخشی از یک فرهنگ کلی، امیدوار به همکاری و فرهنگ سازمانی چابک است در حالی که دوآپس به طور خاص در مورد این است که چطور محصولات و سرویس ها، عملیاتی و تحویل داده می شوند.

برخی افراد به اشتباه دوآپس را به یک نسخه ی کوچک از Agile و Lean یا فقط به عنوان یک علاقه مندی تبدیل می کنند (البته به عنوان یک چشم انداز خوب است) اما با دنبال کردن سلسله مراتب پیچیدگی ها، بیشتر به یکپارچکی عملیاتی (Operational Integration) می رسند و تلاش در سایر بخش ها امیدوار کننده نیست. اما همچنان مشکلات حل نشده ای در تحویل نرم افزار، نگهداری سرویس و سریعتر، قابل اعتمادتر و امن تر کردن آن باقی مانده است. اگر کسی بخواهد با استفاده از آموخته هایش در دوآپس در محدوده ی (scope) بزرگتری از سازمان به مشاوره بپردازد، که خیلی هم عالی است، اما معمولا افرادی فنی درگیر دوآپس هستند که می خواهند کار خودشان را بهبود بخشند نه کار دیگران را !

به گفته ی ارنست مولر، دوآپس را می توان “تحویل و عملیات چابک نرم افزار” (“Agile Software Delivery and Operations”) دانست که در آن افراد با همکاری یکدیگر بر روی ابتکارات سازمانی بزرگتر کار می کنند بدون اینکه ارزش پیشنهادی اصلی خود را فراموش کنند.





Share Button

Continuous Delivery چیست ؟

Continuous Delivery چیست

Continuous Delivery یا (CD)، رویکردی در مهندسی نرم افزار است که تیم ها را قادر می سازد نرم افزار تولید شده را به روشی سریع و مطمئن برای انتشار و تحویل آماده کنند. این فرایند از لحظه اضافه شدن یا تغییر کد در source control شروع می شود و شامل بیلد، تست، پیکربندی و انتشار در محیط های مختلف تست و محیط عملیات می شود. این مفهوم در فارسی به “تحویل مداوم” یا “تحویل مستمر” ترجمه شده است.

به عبارت دیگر: Continuous Delivery توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و به طور کاملا پایدار می باشد. این تغییرات شامل همه انواع آن از جمله تغییرات پیکربندی در نرم افزار، زیرساخت و پلتفرم، افرودن ویژگی های جدید، رفع باگ و خطا ها می شود.

به وسیله محیط های تست مختلف، می توان یک Release Pipeline ایجاد کرد تا بتوان یک زیرساخت جدید را به طور اتوماتیک ایجاد کرد و نرم افزار را روی آن منتشر کرد. منظور از زیرساخت، سرور، سیستم عامل، سرویس دهنده ی وب، virtualization، شبکه و پیکربندی و تنظیمات آنها می باشد. به کمک این محیط های متوالی می توان فعالیت های طولانی Integration، تست عملکرد و تست های پذیرش نهایی را به تدریج انجام داد. فرایند Continuous Delivery در Release Pipeline با Continuous Integration شروع میشود و با انتشار و پایان تست در هر محیط، انتشار و تست در مرحله بعدی شروع می شود. مجموع این کارها به صورت حلقه های یک زنجیر در پشت سر هم قرار گرفته و فرایند Continuous Delivery را تشکیل می دهند.

ContinuousDelivery Process چیست

هدف Continuous Delivery چیست ؟

هدف CD این است که که انتشار و تحویل نرم افزار را به خصوص برای سیستم های توزیع شده در مقیاس بسیار بزرگ و محیط های عملیاتی پیچیده به یک فرایند روتین، ساده و قابل پیش بینی تبدیل کند. رسیدن به این هدف تنها در صورتی امکان پذیر است که کدهای نرم افزار همیشه در وضعیت آماده برای انتشار باشند، حتی در شرایطی که یک تیم با هزاران توسعه دهنده به طور روزانه در حال تغییر و به روزرسانی کد ها و نرم افزار هستند. به این ترتیب روش سنتی فازهای ادغام (Integration)، تست، پیکربندی و Hardening جای خود را به روش های اتوماتیک می دهد. همچنین زمان آماده شدن برای انتشار، زمان مهاجرت به محیطهای دیگر (Time to Remediate) و زمان برطرف کردن رخداد در محیط عملیات را کاهش (Time To Mitigate or time to remediate production incidents) می دهد.

تفاوت Continuous Delivery و Continuous Deployment چیست ؟

بسیاری از مواقع دو مفهوم Continuous Delivery و Continuous Deployment به اشتباه به جای هم استفاده می شوند اما تقاوت این دو چیست ؟ Continuous Deployment به این معنی است که هر تغییر در نرم افزار به طور اتوماتیک (یا بر طبق یک زمان بندی مشخص) در محیط عملیات منتشر شود. اما Continuous Delivery به این معنی است که هر تغییر در نرم افزار، آماده انتشار در هر محیطی باشد اما ممکن است تصمیم این باشد که منتشر نشود (معمولا به دلایل کسب و کاری). این محیط ها شامل محیط تست تیم توسعه، محیط تست تیم کنترل کیفیت و محیط عملیات و هر محیط دیگری می شود.

تفاوت Continuous Delivery و دواپس چیست ؟

این دو مفهوم از جهاتی به هم نزدیک هستند و اما تفاوت های بنیادی با هم دارند. دامنه ی DevOps بسیار گسترده تر از CD است و علاوه بر خودکارسازی فرایند تحویل نرم افزار، شامل تغییرات فرهنگی به خصوص ارتباط بین تیم های مختلفی که در جریان آماده سازی و تحویل محصول نرم افزاری (Software Delivery) هستند هم می شود. (از جمله تیم های توسعه، عملیات، تضمین کیفیت، مدیریت و … ) اما Continuous Delivery روشی است برای اتوماتیک سازی زنجیره تحویل محصول و بر این موضوع تمرکز دارد که فرایند های مرتبط در کنار هم طوری اجرا شود که منجر شود محصول نرم افزاری، سریعتر، امن تر و با تکرار بیشتری به دست مشتری برسد.

DevOps CD CI Agile چیست

در نبود Continuous Delivery …

در نبود CD، انتشار نرم افزار یک bottleneck برای تیم های “عملیات فناوری اطلاعات” و در نهایت برای محصول است. فرایند دستی و غیر اتوماتیک، باعث انتشارهای غیر قابل اتکا، با تاخیر و پر از خطا می شود. تیم های درگیر این موضوع معمولا به کارهای دستی که افراد انجام می دهند تکیه می کنند که باعث مشکلات جدی خواهد شد.

حداقل الزامات اجرای Continuous Delivery

برای راه اندازی و اجرای Continuous Delivery الزاماتی وجود دارد که در کمترین حالت می توان از دو مورد زیر نام برد

  • زیربنایی از تست ها که تا حد قابل قبولی خیال شما را از اینکه نرم افزار به درستی کار می کند، راحت کند و به شما اعتماد به نفس لازم را برای شروع استقرار بدهد
  • ابزارهای خودکارسازی (automation) و اسکریپت های لازم که به شما اطمینان دهد استقرار با موفقیت انجام خواهد شد و در صورت نیاز امکان Rollback وجود خواهد داشت

سخن آخر

در آخر باید این این نکته را اضافه کنم که فرایند Continuous Delivery و Infrastructure as Code و Monitoring به طور قابل ملاحظه ای مکمل یکدیگر هستند. Continuous Delivery برای کنترل تاثیر تغییرات در محیط عملیاتی از استراتژی های استقرار از جمله Blue-Green Deployment و همچنین تکنیک Feature Flags (یا Feature Toggles) نیز پشتیبانی می کند. (در آینده راجع به استراتژی های انتشار مطلبی خواهم نوشت)
امروزه ارزش هایی که CD برای سازمان ها ایجاد می کند، آن را به یک نیاز ضروری تبدیل کرده است. برای رساندن ارزش به مشتریان نهایی، باید محصول را به طور پیوسته و بدون خطا منتشر کرد. Release Pipeline های پیشرفته به توسعه دهندگان اجازه می دهد که feature های جدید را سریع و مطمئن منتشر کنند. با کمک CD، رفع خطاها در محیط عملیات و اضافه کردن ویژگی های جدید بسیار سریع تر و با اطمینان بالا انجام خواهد شد و به دست مشتری خواهد رسید.

Share Button

Continuous Integration چیست ؟

Continuous Integration

به زبان ساده

ادغام مداوم (Continuous Integration) فرایندی است که در آن توسعه دهندگان می توانند به طور مستمر کارهای خود را با هم یکپارچه کنند، هر بار که توسعه دهنده ای کدی را به سورس کنترل اضافه می کند، توسط یک بیلد اتوماتیک عدم تاثیر منفی تغییرات کدها در پروژه ها (که برخی به هم وابستگی دارند) بررسی میشود. با اجرای این فرآیند که شامل کامپایل و بیلد کردن پروژه ها و اجرای تست های واحد (unit test) است، مشکلات یکپارچه سازی به شدت کم می شود و تیم ها را قادر می سازد تا به صورت منسجم تری به توسعه نرم افزار بپردازند.

تغریف دقیق تر از Continuous Integration

به فرایند ادغام یکپارچه کد ها و بیلد کردن پروژه ها و اجرای unit test ها به صورت اتوماتیک، Continuous Integration یا CI می گویند. با اجرای CI، با اعمال یک تغییر در سورس کد و اضافه شدن آن به source control، یک بیلد اتوماتیک را به راه می افتد تا بوسیله آن، آخرین نسخه کدها از مخزن کد استخراج و بیلد شود و unit test های آن اجرا شود، در واقع با این کار یک ارزیابی کلی از سلامت کدها انجام شود. این کار معمولا چندین بار در یک روز انجام می شود.

در نبود Continuous Integration چه اتفاقی می افتد ؟

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

Continuous Integration چه کمکی به ما می کند ؟

با اجرای CI، توسعه دهندگان در فواصل کوتاه و با هر بار check-in (یا commit) در source control قادر خواهند بود که تغییرات خود را با سایر تغییرات ادغام کنند و یک ارزیابی سریع از آن داشته باشند. با کمک CI می توان شاخه اصلی کد را تمیز و پایدار نگه داشت. در چنین شرایطی توسعه دهندگان ترقیب می شوند تا تغییرات خود را به صورت قطعه های کوچکتر و با تکرار بیشتری در Source Control اعمال کنند.تیم ها از بیلد های اتوماتیک استفاده می کنند تا اطمینان پیدا کنند که باگ ها خیلی زود و در چرخه توسعه شناسایی می شوند که منجر می شود برای رفع آن ها هزینه ی کمتری بپردازیم. اجرای تست ها به صورت اتوماتیک در هر بار تغییر در source control منجر به کیفیت پایدار در آن خواهد شد.

تیم ها به وسیله version control های جدید مانند GIT، می توانند برای هر feature، یک شاخه ی کوتاه مدت از کد در سیستم خودشان بسازند و بعد از تایید یک pull request، تغییراتشان با شاخه اصلی کد ها ادغام شود و سپس آن شاخه را حذف کنند. این کار می تواند بارها تکرار شود. تیم ها می توانند برای branch ها سیاست گزاری کنند تا همیشه مطمئن باشند که معیارهای کیفی لازم در آن رعایت شده است.

امروزه CI به عنوان یک Best Practice در توسعه نرم افزار شناخته می شود، تا جاییکه جزئی جدا ناپذیر از روش های چابک تولید نرم افزار شده است. همچنین یکی از ملزومات دواپس (DevOps)  و Continuous Delivery نیز می باشد.

10 دلیل که نیاز است تکنیک Continuous Integration را فرا بگیریم؟

  1. در بازه های زمانی کوتاه و چند بار در روز قادر خواهید بود که تغییرات اعمال شده توسط توسعه دهندگان با هم ادغام شوند و یک ارزیابی سریع از آن داشته باشید.
  2. با کمک CI همیشه می توان شاخه اصلی کد را تمیز و پایدار نگه داشت.
  3. توسعه دهندگان ترغیب می شوند که تغییرات خود را در قطعات کوچکتر و در دفعات بیشتری در سورس کنترل اعمال کنند.
  4. خطاها خیلی زودتر و در مراحل ابتدایی چرخه حیات نرم افزار شناسایی می شوند.
  5. شناسایی زودتر خطاها باعث می شود هزینه رفع آن ها بسیار اندک باشد.
  6. منجر به افزایش شفافیت و ارتباط بهتر با ذینفعان می شود.
  7. از آشوب و به هم ریختگی در روز انتشار جلوگیری می کند.
  8. کمک می کند محصول سریعتر و با کیفیت بهتری به دست مشتری نهایی برسد.
  9. اجرای خودکار تست ها و بررسی نتایج آن ها منجر به کیفیت پایدارتری خواهد شد و به پروسه تضمین کیفیت کمک می کند.
  10. پیش نیاز Continuous Delivery است.
Share Button

دواپس چیست و چرا آن را اجرا کنیم ؟ | What is DevOps, Why should imp it ?

فرایند دواپس

دواپس به زبان ساده

این مطلب با پست دیگری “دواپس به زبان ساده چیست ؟” ادغام شد.

Share Button
Show Buttons
Hide Buttons