تعریف DevOps
در یک تعریف کلی، DevOps مجموعهای از رویهها است که به منظور ایجاد کارآمد و سریع فرآیند توسعه و انتشار برنامهها استفاده می شود. اما این تعریف خیلی تئوری به نظر می رسه. بیایید فعلاً جنبه های فنی را نادیده بگیریم. در عوض، اجازه دهید نگاهی به جنبه انسانی توسعه و انتشار اپلیکیشن ها بیندازیم. اگر ابتدا به مشکلاتی که DevOps سعی در حل آنها دارد نگاه کنیم، درک آن آسان تر خواهد بود.
وظایف مهندس DevOps
به عنوان مثال، برنامه YouTube را در نظر بگیریم که به ما امکان می دهد هر ویدیویی را که می خواهیم به راحتی تماشا کنیم. چگونه در تلفن های ما این اتفاق می افتد؟ تصور مرحله اول از این کار خیلی آسان است: یک دسته از مردم برای آن کد می نویسند. آنها از یک زبان برنامه نویسی برای پیاده سازی تمام ویژگی هایی که باید داشته باشد استفاده می کنند. اما قبل از اینکه این برنامه در فروشگاه گوگل پلی یا اپ استور اپل قرار بگیرد، باید مراحل زیادی را طی کند.
اول از همه، تمام آن کد فقط مجموعه ای از متن ها است و تلفن ما نمی تواند آن متن را همانطور که هست اجرا کند. این کد باید به چیزی تبدیل شود که تلفن ما بتواند آن را بفهمد و اجرا کند. همچنین، ما نمیتوانیم هر کدی را به یک برنامه کاربردی تبدیل کرده و به مشتریان خود تحویل دهیم.اگر آن کد خطا داشته باشد چه؟ اگر سرورهای ما را خراب کند چه؟
بنابراین، به طور خلاصه، کد باید بررسی شود، به یک برنامه اجرایی تبدیل شود، آزمایش شود، و سپس بسته بندی شود و به فروشگاه App تحویل داده شود تا کاربران ما بتوانند آن را در گوشی خود دانلود کنند.
حالا بیایید این تعاریف را ساده کنیم. ما می توانیم آن را فقط به دو مرحله تقسیم کنیم.
ابتدا توسعه دهندگان کد می نویسند. این مرحله توسعه، بخش “Dev” از کلمه “DevOps” است.
بعد نوبت به مرحله Operations، یعنی بخش “Ops” از “DevOps” می رسد. حالا این “عملیات” چیست؟ خوب، به زبان ساده، تیم عملیات اطمینان حاصل می کند که این برنامه تمام آنچه را که برای کار در دنیای واقعی نیاز دارد، دارا باشد. به عنوان مثال، برنامه ممکن است نیاز به دسترسی به برخی از سرورها، ذخیره جزئیات ورود ما در برخی پایگاه داده ها، به خاطر سپردن ویدیوهای مورد علاقه ما و غیره داشته باشد. بنابراین آنها مطمئن می شوند که همه این زیرساخت ها وجود دارد و به درستی کار می کند تا از این برنامه پشتیبانی کنند.
بین این دو مرحله توسعه و عملیات است که مشکلات زیادی می تواند ظاهر شود. بیایید نگاهی به چند مورد بیاندازیم.
بیایید در نظر بگیریم که توسعه دهندگان ما کار بسیار خوبی انجام دادند و کدهایی را به خوبی ارائه کردند. با این حال، هنگامی که تیم عملیات این برنامه را آزمایش می کند، سرورهای آنها را از کار می اندازد. این لزوماً به معنای بد بودن کد نیست. فقط ممکن است که توسعه دهندگان روی جنبه های کار خود، یعنی خود کد متمرکز شده اند. آنها ممکن است هیچ ایده ای در مورد پیکربندی دقیق سرورهایی که از این برنامه پشتیبانی می کنند نداشته باشند.
بنابراین، به یک معنا، آنها کد می نویسند و مطمئن نیستند که چگونه آن کد را برای آن سرورهای خاص بهینه کنند. این مثال خوبی است از اینکه چگونه یک تیم DevOps می تواند وارد عمل شود و این مشکل را حل کند. به عنوان مثال، شخصی که مسئولیت DevOps را بر عهده دارد می تواند در اینجا کاری بسیار ساده انجام دهد. آنها می توانند آن کد را بررسی کنند و نظری مانند این بگذارند:
“محصولات شما عالی هستند! ما فقط به یک تغییر کوچک در خط 127 نیاز داریم: باید اندازه حافظه اختصاص داده شده در این متغیر را کاهش دهیم تا مطمئن شویم که با سرورهای فعلی ما به خوبی کار میکند.” و به همین ترتیب، از مشکل جلوگیری می شود. توسعه دهندگان این تغییر را انجام می دهند، سپس کد توسط تیم DevOps تایید می شود و برنامه اکنون با سرورهایی که ما داریم به خوبی کار می کند. بنابراین این یکی از مسئولیت های یک مهندس DevOps است. آنها به نوعی پلی بین مراحل توسعه و عملیات هستند.
اما اکنون، بیایید ادامه دهیم و به یک مشکل بزرگتر نگاه کنیم. کد یک برنامه اغلب تغییر می کند. توسعه دهندگان به طور مداوم کد را اضافه، حذف و اصلاح می کنند. به این ترتیب، آنها می توانند ویژگی های جدید اضافه کنند، موارد را اصلاح کنند، عملکرد را بهبود بخشند و غیره. حالا تصور کنید که 30 توسعه دهنده در شرکت ما کار می کنند. هر 10 دقیقه یک کد به روز شده دریافت می کنیم. هر 10 دقیقه ما باید کد را بررسی کنیم، برنامه را بسازیم، چند آزمایش اولیه را روی سرورهایمان انجام دهیم و غیره.
تصور کنید که مجبور هستید برای انجام این مراحل، هر 10 دقیقه، 20 دستور بنویسید، دوباره و دوباره و دوباره. خیلی سریع ناامید کننده می شود! و توسعه دهندگان باید منتظر بمانند تا ما بتوانیم تأیید کنیم که کد آنها به خوبی کار می کند یا نه! این باعث می شود تا زمان زیادی برای همه تلف شود.
اکنون میتوانیم در نهایت به آنچه که DevOps انجام می دهد بپردازیم.
به موقعیت هایی فکر کنید که ما همین الان بحث کردیم. آیا واقعاً به یک نفر نیاز داریم که هر بار که کد برنامه ما تغییر می کند وارد عمل شود؟ آیا کامپیوترها نمی توانند این کار را انجام دهند؟ آیا یک کامپیوتر نمی تواند به آن کد نگاه کند و آزمایش های کلی انجام دهد تا از معتبر بودن آن مطمئن شود؟ آیا رایانه ای نمی تواند آن کد را بگیرد و آن را کامپایل کند و آن را به یک برنامه تبدیل کند که بتواند روی تلفن اجرا شود؟ آیا نمی تواند آزمایش کند که این برنامه با سرورهایی که داریم به خوبی کار می کند؟ البته که می تواند!
یک تیم DevOps می تواند تمام این مراحل را خودکار کند. اکنون توسعه دهندگان می توانند نتیجه کار خود را سریعتر ببینند. آنها تعدادی کد جدید را می سازند و در عرض چند دقیقه نتایجی را دریافت می کنند. شاید برخی از تست ها شکست بخورند، اما اکنون آنها به سرعت می بینند که چه چیزی را باید اصلاح کنند. یا همه چیز به خوبی کار می کند، آنها از نتیجه راضی هستند و می توانند به افزودن ویژگی های بیشتر ادامه دهند. دیگر لازم نیست کسی منتظر شخص دیگری باشد.
این فرآیند مزایای زیادی هم برای کارمندان و هم برای کاربران برنامه ما به همراه دارد. کارمندان می توانند کار خود را بدون اتلاف وقت برای انجام کارهایی که رایانه ها می توانند به طور خودکار برای آنها انجام دهند، انجام دهند. و کاربران می توانند برنامه های به روز شده خود را حتی سریعتر دریافت کنند، ویژگی های جدید، اصلاحات یا هر چیزی که منتظر آن بوده اند را دریافت کنند.
اگر تا به حال مستندی در مورد نحوه ساخت خودروها تماشا کرده باشید، خطوط تولید آنها را دیده اید. بدنه خودرو از یک ربات به ربات دیگر منتقل می شود. یک ربات ممکن است آن را رنگ کند، سپس به ربات بعدی منتقل شود که شیشه جلو را وارد می کند، و دیگری که صندلی ها را اضافه می کند و غیره. تکه تکه، قدم به قدم، به طور خودکار در یک ماشین کاربردی ساخته می شود. خوب، یک مهندس DevOps همین کار را برای نرم افزار انجام می دهد.
آنها کل این خط تولید را می سازند تا مطمئن شوند که کد به صورت خودکار پردازش می شود. و به تدریج، این کد که چند لحظه پیش بود، کامپایل، تست، بسته بندی و در نهایت برای مشتریانی که از آن استفاده می کنند ارسال می شود.
اکنون میتوانیم در نهایت تصویر واضحتری ارائه کنیم و در مورد DevOps نتیجهگیری کنیم:
تیم DevOps همکاری بین توسعه و عملیات را بهبود می بخشد. یا به عبارت ساده تر، بین آنهایی که کد می نویسند و آنهایی که زیرساختی را می سازند که در آن کد اجرا می شود: سرورها، سرویس های ابری و غیره.
تیم DevOps یک خط تولید برای نرم افزار می سازد. آنها این کار را با اطمینان از خودکار بودن هر چیزی که نیاز به مداخله انسانی ندارد انجام می دهند. گام به گام، کد به تدریج از متن ساده به یک برنامه کاملاً کاربردی تبدیل می شود که می تواند (به طور خودکار) به کاربرانی که به آن نیاز دارند تحویل داده شود.
تیم DevOps همچنین مسئولیت های دیگری نیز دارد تا مطمئن شود نه تنها برنامه با موفقیت راه اندازی شده است، بلکه به درستی کار خود را نیز ادامه می دهد. به عنوان مثال، آنها می توانند راه هایی را برای نظارت مستمر این برنامه و نحوه عملکرد آن در دنیای واقعی تنظیم کنند. به این ترتیب آنها می توانند به طور خودکار در صورت بروز خطاهای جدی هشدار دریافت کنند که به رفع سریعتر آنها کمک می کند.
همه این موارد به یک شرکت اجازه میدهد تا نرمافزار را سریع بسازد، اغلب آزمایش کند و محصول نرمافزار نهایی را کارآمدتر ارسال کند.
امیدواریم که تصویر واضح تری از مسئولیت های یک مهندس DevOps ارائه داده باشیم. و اگر میخواهید نگاهی به جنبه های فنی و نوع ابزارهایی که اغلب در DevOps استفاده میشوند بیندازید میتوانید دوره های Docker QuickStart و Ansible QuickStart را در نت وی پرایم مشاهده نمایید.