Mohammadreza Abdoli
Mohammadreza Abdoli
خواندن ۴ دقیقه·۵ سال پیش

چطور Devops Engineering را شروع کنیم؟(Road Map CMD5)

یکی از تیم‌های فنی شرکت‌های نرم افزاری تیم Devops هست هم درگیر برنامه نویسی هستن و هم محصول رو نگه‌داری می‌کنن. ورود به تیم‌های Devops برای خیلی از افراد جذاب هست و از طرفی حقوق خوب این عنوان شغلی، این جذابیت رو بیشتر کرده، اما بهتره قبل از اینکه وارد این حوزه بشین، با خودتون رو راست باشید و بسنجید که این شغل رو دوست دارید یا صرفا بخاطر تعریف‌هایی هست که می‌شنوید یا می‌بینید، از این رو توصیه می‌کنم قسمت ابتدایی اولین مقاله RoadMap CMD رو بخونید و ادامه این مقاله رو پیگیری کنید. در قسمت پایانی هم لینکی از ویدئو Software Talk رو قرار دادم که به بحث و گفت و گو با متخصص‌های Devops پرداخته.

این مقاله به کمک محیار عباسپور (Devops Enginerr دیجی‌کالا)، جواد حاجیانی(Devops Enginerr دیجی‌کالا)، علی ستاری(Head Of Devops اسنپ) و افشین پایدار نوشته شد که همین‌جا ازشون تشکر می‌کنم.

تعریف Devops :

ساختار تیم‌های فنی بزرگ در گذشته به این شکل بود که یک تیم Operation(سیس ادمین) وجود داشت و یک تیم Development که به قول معروف، تیم دولوپ کد رو مینداخت رو دیوار، تیم اوپریشن بدون اینکه بدونن چیه، Deploy میکردن، البته دولوپرها هم سر از کار تیم اوپریشن در نمی‌آوردن که الان هم همین طوره.‌‌‌

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

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

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


چند تا از تهدید ها و فرصت ها + تحریم‌ها:

افزایش بهره‌وری شرکت ها و تیم‌های توسعه نرم‌افزار و پرکردن خلاهای ابزاری از فرصت‌های این حوزه هست اما در مقابل نرخ سریع‌ تغییر زیرساخت و ابزار‌ها و همچنین پیچیدگی وجود دارد که نمی‌توان گفت تهدید هستند بلکه به مطالعه پیوسته نیاز دارد. به‌عنوان مثال: ۲ سال پیش فردی با تسلط به containerization می‌تونست‌ کارهای بسیار موثری انجام بده درحالی که الان بدون درک عمیقی از orchesttratorها مثل (K8S) و Service Meshها مثل(Istio)، تنها کار متوسطی می‌تونه انجام بده.

بحث مهمی که در داخل کشور وجود داره تاثیر تحریم‌ها است که با نبود سرویس‌های زیرساختی آماده خیلی از شرکت‌ها مجبور هستند که Tech Stack رو از پایه ساخت و نگه‌داری کنند اما شرکت‌های خارجی با هزینه معقولی، لایه‌های زیادی از Stack رو دریافت کنند و بروی محصول خود تمرکز کنند.(که از طرفی باعث شده نیاز به نیروی متخصص برای راه‌اندازی Tech Stack بیشر بشه )


دانشگاه کجا بدرد می‌خوره؟

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


مهارت‌های اولیه:

  • دولوپمنت(دیولوپمنت?): زبان‌های برنامه‌نویسی، مثل: پایتون، گولنگ(گو) یا ...

برای یادگیری پایتون نسبت به گو منبع‌های فارسی بیشتری وجود دارد مثل دوره‌های پایتون کوئرا کالج، ارژنگ یا مکتبخونه اما به باید به منابع انگلیسی عادت کنید چون بخش عمده منابع در حوزه ComputerScience به زبان انگیسی هست.

  • اوپریشن: سیستم عامل: سیستم‌ عامل لینوکسی و ویندوز.

سیستم عامل لینوکس شامل توزیع‌های مختلفی میشه و انتظار میره که معروف‌ترین‌ و پرکاربرد ترین آن‌ها مثل ubuntu, suse, centos, debian و … رو بلد باشین که توزیع‌هایی که پایه یکسان دارند، شباهت زیادی بین آن‌ها از لحاظ عملکرد وجود دارد.

برای یادگیری سیتم عامل هم می‌تونید دوره‌های LPIC رو بگذرونید که شامل(LPIC 1,2,3) میشه اما در ابتدا لازم نیست هر سه دوره رو کامل بگذرونید.

  • آشنایی با مفاهیم اولیه مفاهیم CI/CD (همان کانتیوس اینتگریشن و دیپلویمنت).
بعد از کسب این مهارت‌ها دست به کار بشید و علاوه بر تلاش و مطالعه برای کسب مهارت‌های جدید، توصیه می‌شه بخش عمده از تمرکزتون روی کسب تجربه و تمرین باشه.


متخصص این حوزه چه مهارت‌هایی داره ؟

  • Operation Support(سیستم عامل و نتورک):

شناخت روی سیستم عامل‌های لینوکسی و ویندوزی - شبکه و سخت افزار اما نه در حد یه متخصص شبکه

  • configuration management & Automation:

آشنایی با Ansible, Saltstack, Bash script

  • Infrastructure:

آشنایی با Terraform

  • Continuous integration and Deployment(CI/CD):

آشنایی با Jenkins, GitLab-ci, Unit test

  • Continuous monitoring:

آشنایی با Grafana, Prometheus

  • Development:

آشنایی با یک زبان برنامه نویسی مثل پایتون، گو یا …

  • Version Control:

آشنایی با گیت و گیت لب یا گیت هاب که باوجود تحریم از طرف گیت هاب بهتر سراغ گیب لب برید مگر اینکه روی پروژه‌های اوپن سورس کارکنید.

  • RDBMS:

آشنایی با مدیریت دیتابیس‌های رابطه‌ای

  • خوبه که داکر، کوبرنتیز،الستیک سرچ و کافکا هم بلد باشید.


ویژگی‌های فردی؟

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


چند‌ تا منبع برای به روز ماندن:

  • Hacker News
  • infoQ(بیشتر درباره‌ی معماری نرم افزار هست)


چندتا لینک:

دواپسdevops
Everyone is talented
شاید از این پست‌ها خوشتان بیاید