خانه / گوناگون / DevOps چیست؟

DevOps چیست؟

devops

DevOps چیست و چرا مطرح شد ؟

سال های متمادی در شرکت های توسعه نرم افزار، تیم هایی با هدف کاملا متفاوت به نام تیم توسعه (Development) و تیم عملیات (Operation) وجود داشتند. هدف تیم توسعه ساخت ویژگی های جدید بر روی محصول و در نتیجه تغییرات زیاد روی آن بود، اما هدف تیم عملیات، ثابت نگه داشتن وضعیت موجود سرویس ها برای پایداری بیشتر آن ها بود. بدین ترتیب دیواری بین این دو تیم وجود داشت.

به مرور زمان تیم های توسعه به روش های چابک برای تولید نرم افزار روی آوردند که تعامل همیشگی با مشتری، اعمال تغییرات، و اضافه کردن ویژگی های جدید بر اساس نظر مشتریان قسمتی از این روش های چابک بود.
اما دیوار بین دو تیم Dev و Ops باعث می شد تا عملیاتی کردن ویژگی های جدید توسعه داده شده و تغییرات، به اندازه کافی چابک نباشد. تمرکز روش های چابک توسعه نرم افزار، بر توسعه و تولید نرم افزار بود و کمتر به موضوعاتی مثل استقرار (Deployment) و عملیات (Operation) توجه می کرد.

به دنبال این محدودیت هامفهوم دوآپس (DevOps) مطرح شد و به دنبال این بود که دیوار بین تیم های Dev و Ops را از بین ببرد و با تمرکز بر افزایش تعاملات بین تیمی، موجب افزایش سرعت تحویل ارزش به مشتری شود. پس دوآپس به دنبال این است که ارزش های ایجاد شده در نرم افزار را خیلی سریعتر به دست مشتری برساند.

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

DevOps چیست؟

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

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

حالا چرا DevOps مهم شد؟

تغییر بر اساس نیاز مشتری و تحولات بازار، یک ویژگی حیاتی برای کسب‌وکارهای حوزۀ IT محسوب می‌شود. اگر در این حوزه فعالیت می‌کنید، حتماً می‌دانید که باید سریع همسو با تغییرات به‌روز شوید و نسخه‌های جدید را رو کنید؛ وگرنه شانسی در این رقابت نخواهید داشت.

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

DevOps مرز بین این تیم‌ها را برداشت و با اتومات کردن خیلی از روال‌های تکراری، تحویل ارزش به مشتری را سریع‌تر و چابک‌تر کرد.

ما به دواپس اعتماد می کنیم

اما در DevOps، مشارکت بر اساس اعتماد یک شرط اساسی است، اما تنها شرط لازم نیست. DevOps شامل شیوه های زیر است:

  •  بی حاصل: از بین بردن اتلاف در یک جریان با ارزش مداوم؛ جریان ارزش در این حالت دنباله ای از فعالیت های توسعه از طریق استقرار عملیات است
  •  توسعه تکراری و افزایشی ویژگی های نرم افزار
  • قابلیت مشاهده فعالیت های کاری در یک جریان با ارزش مداوم از طریق هیئت مدیره کانبان با محدودیت های کار در فرایند (WIP)
  • تفکر سیستم: مشاهده کل فرایند (به صورت جامع)، نحوه تاثیر هر فعالیت بر کل جریان ارزش
  • یک زنجیره ابزار از محصولات حمایتی با هدف خودکار کردن زیرساخت های افزایشی برای توسعه و نصب نرم افزار از قبیل:

Git: کنترل نسخه و برگشت
‏Gradle: کد ساختمانی و بسته بندی های درجه یک
‏JUnit: کد آزمایشی
‏Jenkins: ادغام درجات
‏Puppet: استقرار
‏Nagios: ارزیابی عملکرد

کاربرد DevOps کجاست؟

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

برای درک بهتر از اینکه مهندسان DevOps چه کاری ممکن است انجام دهند اجازه دهید به چرخه ی عمر نرم افزار نگاه کنیم. در ذهن من 5 بخش اصلی وجود دارد که شامل طرح ریزی یا برنامه ریزی (Planning)، توسعه(Development)، تست(Testing)، گسترش یا راه اندازی (Deployment) و نگهداری (Maintenance) می باشد. تجربه ی من همچنین نشان می دهد که اکثرا زمان یک مهندس روی Planning و Maintenance صرف می شود. درنظر داشته باشید که گام ها همیشه به ترتیبی که گفته شد نمی باشد و اغلب این روند همانطور که شما همان وظایف برای آینده که بخشی از یک پروژه ی بزرگ است را انجام می دهید، در خودش تعبیه شده است.

طرح ریزی (Planning)

طرح ریزی مرحله ای است که تیم (توسعه دهندگان آینده، QA، مدیران محصول و غیره) اهداف یک پروژه را تعریف می کنند. آن ها ممکن است یک معماری سراسری برای نرم افزار تعریف کنند.

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

توسعه (Development)

این قسمت کلی کار یا ویژگی های کار مشخص شده و توسعه دهندگان همکاری و کد نویسی می کنند، قهوه می نوشند و آینده را تغییر می دهند.

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

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

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

تست (testing)

توسعه دهندگان و QA و هرکس دیگری تست را انجام می دهد. کد موجود را برای یکپارچه شدن با کد اصلی آماده می کند.

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

مهندسان DevOps نقش تعریف و پیاده سازی زیرساخت هایی که می توانند این تست ها را به یک روش قابل تکرار اجرا کنند، را دارند. آن ها باید چیزی شبیه Jenkins،Bamboo یا Drone را برای نامگذاری تعدادی، تنظیم کنند. این موارد ابزار های Continuous Integration یا به اختصار (CI) می باشد. که از پیچیدگی زیاد تنظیم تست های مداوم جلوگیری می کند. درواقع احتمالا این کار در مرحله ی طرح ریزی نیز انجام شود اما فکر می کنم که بیان این مورد در این مرحله بیشتر قابل درک است زیرا این ابزار ها عمدتا برای مهندسان DevOps است.

گسترش یا استقرار (Deployment)

منظور از Deployment این است قرار دادن کدها روی سرور اصلی نرم افزار است.

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

نگهداری(Maintenance)

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

این مرحله ضرورتا شامل تمام کار و ابزار هایی است که باعث می شود سیستم با عملکرد و دسترس پذیری بالایی باشد.

گفتنی‎‌های اصلی را گفتیم. حالا دیگر می‌دانید که دواپس چیست و چه کمکی به بالا بردن بهره‌وری تیم‌تان می‌کند. به عنوان آخرین نکته، بد نیست بدانید که استفاده از DevOps در هر سازمانی، تنها با فرهنگسازی و متعهد بودن اعضای تیم به آن، امکان‌پذیر است!

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

 

نوشته های مشابه

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

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

هفت + 9 =

کلیه حقوق مادی و معنوی این سایت متعلق به آسان رایان می باشد