دنیای قبل DevOps
دنیایی را تصور کنید که در آن دو تیم اصلی برای استقرار یک برنامه، فقط operation team و development team هستند و برای ساختن یک محصول و رساندن آن به دست مشتری این دو تیم نقش اصلی را ایفا میکنند.
Dev Team وظیفهی ساخت و نگهداری محصول را بر عهده دارد و دغدغهی اصلی آن رفع سریع باگ ها، اضافه کردن ویژگی های جدید و تحویل سریع است. این در حالی است که Ops Team وظیفهی استقرارا را بر عهده دارد و دغدغهی آن پایداری، امنیت، دسترسپزیری و عملکرد سیستم است.
ارتباط Dev Team با Ops Team
در گذشته، سازمانها از مدلهای سنتی توسعه نرمافزار مانند Waterfall استفاده میکردند. در این مدلها، وظایف تیمها کاملاً مجزا از هم و خطی بود و همان طور که در بخش پیشین گفته شد وظایف این دو تیم به صورت زیر بود:
- تیم Dev وظیفه طراحی، پیادهسازی، تست و تکمیل نرمافزار را داشت.
- تیم Ops وظیفه نصب، استقرار، مانیتورینگ، نگهداری و پایداری سیستم را برعهده داشت.
و پس از اتمام توسعه، تیم Dev کد نهایی را همراه با مستندات مربوط و نحوهی اجرای کد به تیم Ops تحویل میداد تا در محیط واقعی (Production) نصب شود.
مشکلات و چالش ها
با این معماری و فرهنگ در ساخت و توسعهی نرمفزار بیشتر سازمان ها قادر به ایجاد تغییرات سریع در محیط تولید (production stage) نیستند یعنی نمیتوانند تغییرات در محیط تولید را در عرض چند دقیقه یا چند ساعت انجام دهند، بلکه برای آن های این کار هفته ها یا شاید ماه ها به طول بیانجامد ، آن ها توانایی انتقال صدها یا هزاران تغییر در روز را به محیط تولید ندارند بلکه برای این سازمان ها استقرار و انجام تغییرات ماهانه یا فصلی هم مشکل و چالش برانگیز است. علاوه براین استقرار در محیط تولید برای این سازمان ها امری روتین و عادی نیست بلکه معمولا با قطعی سیستم (Downtime) یا ایجاد باگ های سیستمی همراه است.
در عصر امروزی از ارکان های رقابتی در دنیای نرم افزار میتوان به سرعت در استقرار نیازمندی های جدید و کیفیت بالای خدمات اشاره کرد. بنابراین این سازمان ها با ناتوانی بسیار زیادی در رقابت با بازار مواجه اند و قدرت کافی برای رقابت را نخواهند داشت. بخش بسیار زیادی از این مشکلات به دلیل ناتوانی در حل یک مشکل است به نام:
یا تضاد اساسی و مستمر
The core, chronic conflict
تقریبا در تمام سازمان های نرمفزاری یک تضاد ذاتی بین تیم Development و Operations وجود دارد که باعث به وجود آمدن یک چرخه نزولی میشود. این چرخه باعث کاهش روزافزون سرعت استقرار ویژگی های جدید، کاهش کیفیت و افزایش قطعیها (downtime) و افزایش مداوم بدهی فنی میشود.
یکی از عوامل اصلی این مشکل در اهداف کاملا متضاد تیم development و operation است. همان طور که پیشتر نیز اشاره شد در اغلب موارد تیم develop مسئولیت ایجاد سریع تغییرات ، اضافه کردن ویژگی های جدید و انتقال سریع آن به محیط تولید است. این در حالی است که تیم Operation مسئول ارایه خدمات پایدار، قابل اعتماد و ایمن است، که این موضوع باعث میشود ایجاد تغییر در محیط تولید دشوار یا حتی غیرممکن شود؛ چرا که ممکن است این تغییرات، پایداری سیستم را به خطر بیندازند.
زمانی که ساختار و فرهنگ سازمان بدین گونه پیاده سازی شود، تیم Dev و Ops اهداف و انگیزه های کاملا متضادی خواهند داشت که این امر چالش بسیار بزرگی را در صنعت نرم افزار ایجاد میکند و باعث عقب افتادگی سازمان ها از رقابت واقعی بازار میشود.