چگونه یک مهندس DevOps شویم؟
مهندس DevOps در رتبهبندی ۵۰ شغل برتر Glassdoor در آمریکا رتبه دوم را دارد. طبق گزارش SD Times، شغل مهندس DevOps در پستهایIndeed 225 درصد جهش داشته است. بر اساس آخرین دادههای شغلی Glassdoor، حقوق یک مهندس کاربلد DevOps میتواند بین 47,884 دلار تا 242,000 دلار در سال باشد. در این مطلب با عنوان چگونه یک مهندس DevOps شوید، یک نقشه راه کامل را به شما ارائه خواهیم داد که شما را در مسیر تبدیل شدن به یک مهندس DevOps موفق قرار میدهد.
مهندس DevOps کیست؟
مهندس DevOps کسی است که چرخه عمر توسعه نرم افزار را درک میکند و درک کاملی از ابزارهای اتوماسیون مختلف برای توسعه خطوط لوله دیجیتال (خطوط لوله CI/CD) دارد.
چه کسی میتواند یک مهندس DevOps شود؟
اگر شما یک توسعه دهنده، یک Ops یا عضو تضمین کیفیت یا حتی یک فرد تازه کار هستید، میتوانید یک مهندس DevOps شوید. اما باید بدانید اگر بخواهید خود را DevOps بنامید، سفر بسیار طولانی خواهد بود.
قطعا یک دوره مهندسی توسعهیافته ساختاریافته را توصیه میکنم زیرا نه تنها در مورد دانش نظری، بلکه بیشتر در مورد دانش عملی است. برای انجام چنین کارهایی به زیرساخت مناسب نیاز دارید. همچنین، یک مهندس DevOps فردی نیست که فقط ابزارهای مختلف را درک کند. بیشتر در مورد چگونگی و مکان استفاده از فناوری های مختلف توسعه، آزمایش و استقرار برای به دست آوردن حداکثر سود است (معماری یک راهکار SDLC).
چگونه یک مهندس DevOps شویم؟ (نقشه راه مهندس DevOps)
بیایید این سفر را با فهرست کردن برخی از مهارتهای مهمی که سازمانها در یک مهندس DevOps به دنبال آن هستند، آغاز کنیم:
- زبانهای برنامه نویسی را بیاموزید (Python، Ruby، Go، Node.js)
- مطالعه سیستم عامل (Linux, Unix, Windows, Sockets)
- کنترل نسخه و ابزار مدیریت پروژه (GitHub، GitLab)
- امنیت شبکه و پروتکلها را بررسی کنید. (HTTP، HTTPS، SSL، SSH)
- زیرساخت به عنوان کد را درک کنید. (کانتینرها، ارکستراسیون کانتینر، مدیریت پیکربندی، تامین زیرساخت - Docker، Kubernetes، Terraform، Ansible، CHEF، Puppet)
- کاوش در مدیریت کد سورس و تکنیکهای یکپارچهسازی ابزار ساخت برای یکپارچهسازی مداوم (Gradle, Maven, npm)
- بیاموزید که چگونه یکپارچه سازی مداوم(CI) را برای آزمایش مداوم (تحویل مداوم) پیش ببرید: (Jenkins, Bamboo, TeamCity)
- نحوه استقرار و پیکربندی Dev، Test و Prod Environment را بیاموزید: (Ansible، Puppet، CHEF)
- در مانیتور برنامه و زیرساخت سرمایه گذاری کنید. (Prometheus، Nagios، Datadog، New Relic، Sentry)
- به ارائه دهندگان خدمات ابری توجه کنید. (AWS، Azure، Google Cloud، Heroku)
- مطالعه طراحی ابر (Data Management, Design, Implementation)
نقشه راه زیر را در نظر بگیرید:
بیایید هر یک از نقاط عطف کلیدی در این طرح را به صورت جداگانه بررسی کنیم.
-
زبان های برنامه نویسی را یاد بگیرید.
مهندسان DevOps دیتابیس و دیباگ کد ایجاد شده توسط تیم توسعه را ارتباط میدهند و رویهها را خودکار میکنند، حتی اگر معمولا کد سورس را ننوشته باشند. سرعت چرخه عمر DevOps تا حد زیادی به دلیل اتوماسیون است و نقش یک مهندس DevOps برای اجرای استراتژی اتوماسیون DevOps بسیار مهم است.
یک مهندس DevOps همچنین باید با زبانهایی که تیمش برای درک کدهای موجود، ارزیابی کدهای جدید و کمک به دیباگ استفاده میکند، آشنا باشد.
زبان های برنامه نویسی که باید یاد بگیرید عبارتند از:
- Go (توصیه میشود)
- Ruby
- Python
- Node.js
-
مطالعه سیستم عامل
سیستم عاملها (OS) جزء ضروری پشته فناوری هستند که برای عملکرد یک تیم DevOps مورد نیاز است. سیستمعاملها سرورهایی را اجرا میکنند که برنامههای مستقر تیم را در خود جای میدهند، علاوه بر ماشینهای محلی که تیم برای برقراری ارتباط و اجرای فعالیتها از آنها استفاده میکند.
برای اینکه برای راه اندازی سرورهای خود به رابط کاربری بصری (GUI) وابسته نباشید، باید نحوه استفاده از خط فرمان را یاد بگیرید. کارهایی که ممکن است به کلیکهای متعدد در یک رابط کاربری گرافیکی نیاز داشته باشند با استفاده از خط فرمان سادهتر میشوند و برخی از دستورات را فقط میتوان از طریق ترمینال اجرا کرد. از آنجایی که هر سیستم عامل با سایرین متفاوت است، یادگیری بیش از یک سیستم عامل توصیه میشود.
سیستم عامل های زیر برای یادگیری هستند:
- Linux (توصیه میشود)
- Unix
- Windows
علاوه بر این، شما باید با رویکردها و دستورالعمل های کلیتری که ایجاد و عملکرد سیستم عامل ها را کنترل میکنند آشنا شوید. هر دو درک فنی و مفهومی برای یک مهندس DevOps بسیار مهم است.
از جمله موضوعات سیستم عامل برای یادگیری عبارتند از:
- Process Management
- Sockets
- Threads and Concurrency
-
کنترل نسخه و ابزار مدیریت پروژه
باید درک عملی خوبی از حداقل یک ابزار مدیریت کد منبع یا کنترل نسخه، به طور ایدهآل Git داشته باشید و در جریانهای کاری Git مهارت داشته باشید.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
-
امنیت شبکه و پروتکلها را بررسی کنید.
هر برنامه مبتنی بر وب که دادههای کاربر را انتقال یا دریافت میکند، این کار را از طریق پروتکلها انجام میدهد. در نتیجه، درک اینکه چگونه انواع درخواستهای مختلف توسط پروتکلها پشتیبانی میشوند بسیار مهم است.
برای متوقف کردن عوامل مخرب از رهگیری دادههای شما یا ورود به برنامه شما، به همان اندازه ضروری است که خطرات مرتبط با این روش های انتقال و نحوه ایمن سازی آنها را درک کنید. مهم نیست که چه موقعیتی در چرخه عمر DevOps دارید، امنیت سایبری یک مهارت بسیار مهم است.
پروتکلهای شبکهای که باید یاد بگیرید عبارتند از:
- HTTP
- HTTPS
- SSL
- SSH
-
زیرساخت به عنوان کد را درک کنید.
تکنیکی به نام زیرساخت به عنوان کد (IaC) ارائه زیرساخت را برای پشتیبانی از استقرار برنامه شما ساده میکند. با استفاده از فایلهای تمپلیت، شبکهها، سرورها و سایر زیرساختها پیکربندی و مدیریت میشوند تا تنظیماتی را ایجاد کنند که دقیقا نیازهای برنامه شما را برآورده کند. میتوانید این رویه را با IaC برای استقرار و ارتقاء سریعتر خودکار کنید.
تکنیک های IaC برای انتخاب عبارتند از:
- Containers
- Configuration Management
- Container Orchestration
- Infrastructure Provisioning
-
مدیریت کد منبع و تکنیکهای یکپارچه سازی ابزار ساخت برای یکپارچه سازی مداوم (CI) را بررسی کنید:
گام بعدی پس از یادگیری Git، درک نحوه خودکارسازی فرآیند ساخت و ساخت مداوم جدیدترین commit به ریپازیتوری سورس کد است. برای انجام آن باید نحوه عملکرد جنکینز و سایر سرورهای اتوماسیون را درک کنید. چگونه می توان فناوری های مدیریت کد منبع مانند Git را با ابزارهای ساخت مانند Maven ترکیب کرد. بله، منظور ایجاد خط لوله برای یکپارچه سازی مداوم است.
-
یاد بگیرید که چگونه یکپارچه سازی مداوم را برای آزمایش مداوم (تحویل مستمر) پیش ببرید:
گام بعدی این است که یاد بگیرید چگونه مرحله آزمایش را خودکار کنید و آن را ساده کنید، زیرا همانطور که مطمئن هستم همه شما تجربه کردهاید، مواقعی وجود دارد که کد در محیط توسعه به راحتی اجرا می شود اما در محیط تست اجرا نمیشود. شما باید بدانید که چگونه محیط توسعه را در سرورهای آزمایشی خود تقلید کنید. شما باید بدانید که چگونه برنامه هایی مانند Puppet، Chef و دیگران برای این منظور کار میکنند و همچنین میتوانید از کانتینرهای Docker برای این کار استفاده کنید، بنابراین یادگیری Docker ضروری است. علاوه بر این، باید بدانید که چگونه پس از هر commit به طور مداوم کد خود را آزمایش کنید. یک بار دیگر، باید جنکینز را با فناوریهای تست اتوماسیون مانند Selenium ترکیب کنید. Continuous Delivery کلمه ای است که برای این مورد استفاده میشود.
ابزارهای ادغام مداوم برای یادگیری عبارتند از:
- Jenkins
- Bamboo
- TeamCity
-
نحوه استقرار و پیکربندی Dev، Test و Prod Environment را بیاموزید:
در نهایت، شما باید بدانید که چگونه برنامه را به صورت ایمن در سرور پروداکشن مستقر کنید. یکبار دیگر، پیکربندی و استقرار آن در محیط پروداکشن نیاز به استفاده از ابزارهایی مانند Puppet یا Docker دارد.
ابزارهای یادگیری استقرار مستمر عبارتند از:
- Puppet
- Ansible
- CHEF
-
در زیرساخت و مانیتور بر برنامهها سرمایه گذاری کنید.
مانیتورینگ فرآیندی است که به دنبال سیگنالهای هشدار دهنده مشکلات برنامه شما و زیرساختهای پشتیبانیکننده از آن است تا تیم عملیاتی شما ممکن است مشکلات را قبل از قطعی شدن برطرف کند. مولفه های کاربردی و زیرساختی این عمل را می توان از هم جدا کرد.
بازرسی برنامه
بهتر است معیارهای متعددی را زیر نظر داشته باشید زیرا ایرادات داخلی برنامه شما می تواند خود را به روش های مختلفی نشان دهد.
به عنوان مثال، نرخ تبدیل پایینتر از متوسط یک فرم میتواند نشان دهد که وقتی مشتریان سعی میکنند ثبتنام کنند، فرم به درستی کار نمیکند. برای اینکه به شما فرصتهای بیشتری برای شناسایی مشکلات بدهد، ابزارهای مانیتورینگ شما باید خطاهای کد ایجاد شده هنگام ارسال درخواست ثبتنام همراه با نرخ تبدیل را علامتگذاری کنند.
ابزارهای نظارت بر برنامه برای یادگیری عبارتند از:
- Prometheus (توصیه میشود)
- Nagios
- Datadog
نظارت بر زیرساخت
مشکلات زیرساختی که از برنامه شما پشتیبانی میکند اغلب میتواند تاثیری داشته باشد که حداقل به اندازه تاثیر خود برنامه مهم است.
به عنوان مثال، مشکلات مربوط به میزبانی ابری برای برنامه آنلاین شما ممکن است باعث قطع شدن کاربران شما در هنگام تلاش برای دسترسی به آن شود. ابزارهای مانیتورینگ معیارهای عملکرد و اشتباهات تولید شده توسط پشته برنامه شما را برای تشخیص زودهنگام خطاها بررسی می کنند. هرچه تاثیر این خطاها بر تجربه کاربری شما کمتر باشد، تیم شما سریعتر میتواند واکنش نشان دهد.
با ابزارهای مانیتور بر زیرساخت زیر آشنا شوید:
- New Relic (توصیه میشود)
- Jaeger
- AppDynamics
-
ارائه دهندگان خدمات ابری را مشاهده کنید.
برنامههای مدرن در اکثر موارد، اگر نگوییم همیشه، در فضای ابری میزبانی میشوند. هنگامی که دیگر نیازی به میزبانی سرورهای خود برای برنامه خود ندارید، خدمات ابری میتوانند در هزینه شما صرفه جویی کنند و مقیاس پذیری بیشتری را از جمله مزایای دیگر به شما ارائه دهند. برای انتخاب بهترین ارائه دهنده میزبانی برای برنامه های تکمیل شده خود، درک انواع خدمات ابری موجود و همچنین هزینه ها و مزایای متمایز آنها بسیار مهم است.
برای درک بیشتر، ارائه دهندگان خدمات ابری زیر را در نظر بگیرید:
- AWS (توصیه می شود)
- Azure
- Google Cloud
- Heroku
-
مطالعه طراحی ابر
مفاهیم پشت الگوهای طراحی ابری همان چیزی است که به اپلیکیشنهای ابری مقیاس پذیری، قابلیت اطمینان و امنیت میدهد. درک این روندها به اندازه درک ارائه دهندگان ابر بسیار مهم است.
چیزهای زیادی وجود دارد که میتوانید برای برنامههای میزبانی شده در فضای ابری و همچنین فرآیند توسعهتان قبل از استقرار اعمال کنید که میتوانید از بهترین شیوههای ابر یاد بگیرید، مانند تاخیر بالا. به عنوان مثال، اگر فضای ذخیرهسازی محلی شما قطع است، همچنان میتوانید با پشتیبانگیری از کد سورس خود در یک مخزن مجهز به ابر، به کد منبع خود دسترسی پیدا کنید.
از جمله الگوهای طراحی ابری برای یادگیری عبارتند از:
- دسترسی
- مدیریت اطلاعات
- طراحی و پیاده سازی
اگرچه اطلاعاتی که در مورد آن بحث کردیم به طور کامل دانشی را که برای یک مهندس DevOps موفق نیاز دارید را نشان نمیدهد، اما اصولی را که باید قبل از تمرکز بر روی نکات دقیق از آنها آگاه باشید را پوشش میدهد. هنگامی که این زمینه را برای هدایت فرآیند تحقیق خود داشته باشید، متوجه خواهید شد که مطالعه بسیار سادهتر است.
بیایید قبل از پایان دادن به این بحث، برخی از نکات اصلی را بر اساس نقاط عطف مختلف نقشه راه DevOps مرور کنیم.
نکاتی از نقشه راه DevOps
- از مهارت های فنی قبلی خود استفاده کنید.
من به اندازه کافی خوش شانس بودم که قبلا HTML، CSS و جاوا اسکریپت را یاد گرفته بودم و یکبار دیگر از نمونه راه انداز توسعه وب استفاده کردم. این پسزمینه باعث شد که سایر فناوریهای مورد بحث برای من جالبتر شوند. این واقعیت که من تجربه کار در یک وبسایت تجاری را داشتم که در آن پاسخگویی تلفن همراه مشکلساز بود، به من انگیزه داد که توجه بیشتری به آن جزء از اردوگاه راهاندازی خود اختصاص دهم.
هر گونه دانش قبلی از چرخه عمر توسعه نرم افزار می تواند به مهندسان DevOps کمک کند تا مراحل مختلف DevOps را بهتر هماهنگ کرده و با هم تیمی های خود کار کنند. مهندسان DevOps کل چرخه عمر توسعه نرم افزار را اداره می کنند. علاوه بر این، هنگامی که ایده هایی برای بهبود خط لوله ارائه میکنند، به آنها اطمینان بیشتری می دهد.
- به مفاهیم، نه فقط ابزار، اولویت بدهید.
تخصص فنی بسیار حیاتی است، اما اگر دلیل استفاده از روش خاصی را درک نکنید، نمیتوانید استدلال خود را به تیم منتقل کنید. درک ایدههای اساسی این فناوری ضروری است زیرا یک مهندس DevOps متدولوژی DevOps را در کنار هر کاری که در تیم انجام میدهد ترویج می کند. علاوه بر این، داشتن درک مفهومی به شما کمک میکند بعدا زمانی که میخواهید اطلاعات فنی عمیقتری را بیاموزید.
- فقط روی یک زمینه تخصصی تمرکز نکنید.
از آنجایی که مهندسان DevOps در هر مرحله از چرخه عمر DevOps درگیر هستند، ترجیح داده می شود که به جای تخصص، دانش عمومی داشته باشند. قرار است مشارکت کنندگان تیم شما در زمینههای مربوطه خود (توسعه، شبکه، مانیتور و غیره) متخصص باشند. شما مسئول انتقال کار تمام شده بین هر مشارکت کننده هستید.
اگر درک کاملی از کل روش دارید و می خواهید بیشتر بدانید، خود را محدود نکنید. مهندسان DevOps که به یادگیری علاقه دارند در این زمینه موفق خواهند شد. فقط مطمئن شوید که به تصویر بزرگتر نیز توجه کرده اید. در زمینه ای که مانند DevOps در حال گسترش است، همیشه دانش زیادی وجود دارد - مانند کتاب ها.
- مدام به دنبال امکانات آموزشی جدید باشید.
این هشت مرحله فقط شروع است. برای تبدیل شدن به یک مهندس DevOps، باید همچنان در جریان روندهای نوظهور باشید و به دنبال فرصت های آموزشی جدید باشید. زمانی که بر نقشه راه ما مسلط شدید، این نقشه راه تعاملی را بررسی کنید.