چگونه یک مهندس DevOps شویم: نقش و مسئولیت‌های یک مهندس DevOps

چگونه یک مهندس DevOps شویم: نقش و مسئولیت‌های یک مهندس DevOps

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

وظایف رایج شغل DevOps

من درشغل DevOps با تیم‌های مختلفی همکاری داشتم، و درکنار آن به صدها دانشجو که اکنون در این شغل مشغول هستند ویا قصد دارند درآینده مشغول شوند کمک کرده‌ام.

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

  • ارائه خدمات رهبری و راهنمایی برای کاهش زمان دپلوی تغییرات نرم افزار.
  • مدیریت CI (Continuous integration : یکپارچگی مداوم) سیستم‌ها و خطوط تولید (Pipelines).
  • ایجاد ساختارهای نرم‌افزاری خودکار و تست آن‌ها.
  • طراحی و پیاده‌سازی زیرساخت.
  • اتومیشن‌سازی ساخت و نگهداری زیرساخت.
  • مدیریت و تقویت  سیستم‌های logging و Monitoring.
  • ارائه خدمات ابزارهای self-service به توسعه‌دهندگان برای تامین سیستم‌ها، دپلوی کردن کدها و اجرای تست ها.

شغل مهندسی DevOps زیرمجموعه ای متشکل از چنین تسک‌هایی است که شما درصورت انتخاب این مسیر باید انجام دهید. براساس عقاید و میزان بلوغ سازمان این فعالیت ها روز به روز تغییر خواهند کرد (که درادامه به آن میپردازیم).

مساله: DevOps یک عنوان کلی است

من خودم اغلب خودم را مهندس DevOps معرفی می‌کنم، ولیکن این عنوان را دوست ندارم، و به نظر من نباید چنین عنوانی به وجود می‌آمد.

DevOps هم مانند روش توسعه نرم‌افزار چابک، یک زمینه شغلی نیست. دریک سازمان نرم‌افزاری هرکسی باید با اهداف DevOps برای درست پیش رفتن‌ها کارها همسو شوند. درصورتیکه یک یا گاها چند نفر به عنوان مهندس DevOps شناخته می‌شوند، معمولا باعث می‌شود تا بقیه افراد از همکاری سرباز زده و احساس کنند که نیازی به کمک آنها در ایجاد تغییرات نیست. ازنظر من عناونینی مثل “مهندس QA”، “مهندس اعتبارسنجی (SRE)” یا “مهندس ساخت” بهتر از  مهندس DevOps هستند. این شغل‌ها و بسیاری دیگر قسمتی از چرخه زیستی نرم‌افزار را کنترل می‌کنند که روی نتایج DevOps شما اثر می‌گذارند.

برای همین عنوان شغلی کلی مهندس DevOps ممکن است گمراه کننده باشد و بهتر است تغییر داده شود. ولیکن هنوز عنوان جهانی بهتری برای آن انتخاب نشده است.

مهندس DevOps جونیور و سنیور

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

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

من اغلب به دانشجویانم پیشنهاد می‌کنم که اگر به عنوان DevOps در شرایط سختی قرار گرفته‌اند، به کاری که با شغل DevOps مدنظرشان نزدیک‌تر است تغییر مسیر دهند. گاها این عمل با مهارت‌های یک مهندس DevOps همپوشانی خواهد داشت. که می توان از عناوین شغلی‌ای مثل، “مهندس ساخت”، “مهندس تست”، “QA” یا فقط ” ادمین سیستم ابری” باشد. به دنبال عناوین شغلی‌ای بروید که درآن ها بتوانید کدهای سفارشی تیم توسعه را در دست بگیرید، زیرساخت‌ها را کنترل کنید و جریان های کاری و سیستم ها را خودکار کنید.

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

تاثیرات بلوغ سازمان در تعریف وظایف شغلی DevOps

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

سازمانها با پیشرفت در فرهنگ DevOps، فرایندها و ابزارکاری شان ممکن است دیگر عنوان شغلی “مهندس DevOps  نخواهند داشت. دراین موارد، دیگر جایی برای عنوان شغلی کلی DevOps نخواهد بود، چراکه همه افراد تیم با ایده DevOps روی پروژه کار می‌کنند و هرفرد وظیفه خود را به نحواحسن انجام می‌دهد.

درعوض ممکن است با عناوینی مثل “مهندس اتومیشن”، “معمار ابر”، “سیستم‌های توزیعی (یک چیزی)” و “مهندس اعتبارسنجی سایت (SRE)”  روبه رو شوید. این افراد ممکن است کارهای خود را  که حتی ممکن است کاربری یک ابزار-خاص در یک تیم بزرگ باشد را داشته باشند، مثل “مهندس/ ادمین/ معمار Kubernetes”، “مهندس Terraform” یا “معمار AWS”. به دنبال شغل‌هایی که در توضیحات آنها از کلیدواژه‌های DevOps مثل اتومیشن، ریلیز، دپلوی مستمر، CI/CD، GitOps، Autoscale، DevSecOps، FaaS، Serverless، ChatOps و Container ها استفاده شده بگردید.

ابزارهای رایجی که با اکثر فرهنگ های به روز سازگاری دارند شامل Decker، Terraform، Kubernetes، Helm، ArgoCD، Pulumi، OpenShift، Rancher، EKS، AKS و GKE هستند.

برای شغل مهندسی DevOps باید چه چیزهایی یادبگیریم

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

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

  1. طرز تفکر و قوانین DevOps.  قبل از یادگرفتن ابزارها، بایستی با مشکلات و مسائلی که DevOps برای حل کردنشان تلاش می کند آشنا شوید و بدانید که معمولا جریان کارها و الگوهای DevOps به چه شکل است. همچنین باید بدانید که به چه کارهایی DevOps  گفته نمیشود.
  2. ادمین میان رده لینوکس. بله مطمئنا سیستم عامل‌های زیادی وجود دارد، ولیکن لینوکس سیستم عامل پیش‌فرض ابری است. شما بایستی قادر به ساخت، نگهداری و حل مشکلات یک سرور لینوکسی باشید. درحالت ایده‌آل، برای مدیریت و کنترل سرورهای بیشتر با یک یا چند ابزار(مانند Ansible، Terraform، Pulumi) نیز آشنایی داشته باشید. این بخش تاحدودی با رشد اشتراک بازار مایکروسافت درحال تغییر است.
  3. داشتن آگاهی کامل و جامع از شبکه. یاد داشتن TCP/IP، Packetها، روترها، NIC ها، سوئئیچ‌ها، پورت‌های استاندارد TCP  و UDP، پروکسی‌ها، فایروال‌ها، IPv4 و IPv6 و DNS یک ضرورت است. تمام چیزها از این مفاهیم اساسی برای برقراری ارتباط استفاده می‌کنند و هرچقدر این مفاهیم را مثل کف دست تان بلد باشید، در تمام مسیر شغلی‌تان در خدمت شما خواهند بود.
  4. طراحی سیستم‌های توزیعی. یادبگیرید که وب اپلیکیشن ها چگونه با پایگاه داده ها ارتباط برقرار می‌کنند، چگونه container ها با سایر Container ها ارتباط برقرار می‌کنند، و سرویس‌ها با اپلیکیشن های شما کار می‌کنند. ما دیگر یک تک سرور ساده با یک وب سایت و یک پایگاه داده را دپلوی نمی‌کنیم. یک راه‌حل به‌روز از چندین قسمت تشکیل می‌شود که از مفاهیم شبکه و توابع در کنار هم استفاده می‌کند. دانستن فرق بین طراحی سیستم های توزیعی “خوب یا بد” یک امر حیاتی است.
  5. با ابزار کنترل نسخه Git و نحوه استفاده از آن در جریان‌های کاری تیمی آشنا شوید. شما تقریبا در تمام مسیر کاری تان در سرزمین DevOps از این ابزار استفاده خواهید کرد. امروز راحت ترین راه برای انجام این کار یادگرفتن GitHub (یکی از جاهایی که می توانید فایل های خودتان را با استاندارد Git ذخیره کنید) و جریان کار “GitHub Flow” است.
  6. یک ابر انتخاب کنید و با سرویس های ضروری به خوبی آشنا شوید. شما نیازی به یاد داشتن تمام ابرهای “big three” (AWS، Azure، Google) نیستید. یک فضای ابری انتخاب کنید (من به صورت پیشفرض AWS را انتخاب می‌کنم) و مهارت های خودتان را در مدیریت سرورها، Load balancer ها (پروکسی‌ها)، محل ذخیره داده، شبکه و پایگاه داده افزایش دهید.
  7. اولین زبان توسعه خودتان را انتخاب کنید و به بهترین شکل ممکن آن را یادبگیرید. DevOps بودن به این معنا نیست که شما همیشه وظیفه توسعه دهنده تیم را خواهید داشت، اما اغلب اوقات به میزان کمی کدهای سایر افراد را باید هندل کنید. یادگرفتن یک زبان به شما در انتخاب زبان دوم در مواقع لزوم کمک بسیاری خواهد کرد. پیشنهاد من یادگیری زبان های پایتون، جاوا اسکریپت/ node.js یا Go به عنوان اولین زبان است.
  8. خودکار کردن CLI لینوکس بااستفاده از اسکریپت‌های بش را یاد بگیرید. CLI ها همه‌جا حضور دارند، و من تابه حال هیچ تیم DevOps ی ندیده ام که از آنها نداشته باشند.
  9. یک راه‌حل اتومیشن کلی یاد بگیرید. بعضا آن را CI/CD می‌شناسند. این ابزارها پایه و اصول خودکارسازی ساختن، تست کردن و دپلوی کردن اپلیکیشن ها و زیرساخت‌ها هستند. که شامل هزاران (یا صدها) ابزار مثل Jenkins، CircleCI و GitHub Actions که درهرحالتی انتخاب دوم من است، می باشد.

برای اینکه یک مهندس DevOps شوم باید یک توسعه دهنده نرم افزار باشم؟

پاسخ کوتاه این سوال:  همیشه نه، ولیکن شاید نیاز باشد.

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

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

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

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

مهندس DevOps و SRE (Site Reliability Engineer)                                   

ممکن است تابه‌حال درباره شغل SRE چیزهایی شنیده باشید، که اکنون در تیم هایی که تغییرشکل فرهنگ DevOps را داشته اند بیشتر رواج پیدا کرده است. درسازمان‌های نرم‌افزاری بالغ که نگرش DevOps مبنی بر “توسعه مداوم سیستم ها و فرایندهایی که نرم افزار ما را اجرا می‌کنند” دارند، اغلب به توسعه دهندگانی نیاز دارند که بیشتر  در عملیات تولید مهارت داشته باشند.

SRE ها روی ویژگی های طرف کاربراپلیکیشن شما تمرکز نمی‌کنند، بلکه روی بهبود قابل اعتماد بودن اپلیکیشن درحال اجرای محصول تمرکز دارند. درآخر مثل بقیه زمینه ها طرزفکر DevOps دارند.

اما هنوز هم زمینه شغلی آنها بیشتر مختص توسعه عملیات تولید است تا چیزهای معمول مثل “ساخت، تست، خودکارسازی” که مهندس DevOps در کل روی آنها متمرکز می‌شود. مهندسان DevOps (بدون درنظرگرفتن عنوان شغلی) ممکن است با SRE ها برای بهبود نرم افزار و چرخه زیستی زیرساخت ها همکاری کنند. گوگل بخاطر SRE های زیادی که دارد معروف است و در این زمینه می‌گوید:

“SRE ها روی پیدا کردن راه‌های بهبود طراحی و عملیات سیستم ها متمرکز می‌شوند، تا آنها را مقیاس پذیرتر، قابل اعتمادتر و کارامد تر کنند.”

همچنین داخل The Google SRE book اطلاعات مفیدتری در مورد این مطلب می‌توانید پیدا کنید.

آینده مهندسی DevOps چگونه خواهد بود؟

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

یکی از مشکلات توصیف واژه DevOps این است جزئیات کمتری را دربرمی‌گیرد، و یک واژه صنعتی خیلی کلی است که به معنای همه‌چیز و هیچ‌چیز است. به اندازه استفاده از چرخه زیستی توسعه سیستم 50 ساله  (50-year-old System Development Life Cycle(SDLC)) است. اکنون چنین به نظر می‌رسد که همه چیز برچسب DevOps دارد، که اهمیت کاری که انجام میدهد و نمی‌دهد را پایین می‌آورد.

ما اکنون می‌خواهیم ببینیم که چه ایده هایی برای توصیف مجموعه استانداردهای راهنماهای فرهنگی، وظایف و جریان‌های کاری برای چگونگی ظاهر تیم های نرم افزاری مدرن و فعالیت هایی که باید داخل تیم ها ارائه شوند، ارائه خواهد شد. گاها اسم “DevOps 2.0”  به گوش میخورد که بازهم ایده خوبی نیست.

یک مثال تازه برای این بحث تیزر طعنه‌آمیز امیلی فری‌من است که به بررسی مشکل طرز تفکر”DevOps تمام مشکلات را حل کرده‌است” پرداخته است. همچنین به دنبال آن به بررسی ایده چارچوب “Revolution” پرداخته است.

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

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