بیش از ۷۵ درصد پروژهها در CNCF(بنیاد رایاش ابری بومی) با زبان Go نوشته شدهاند. چه در مصاحبهها و چه در پروژههای دنیای واقعی، یک پروفایل قوی DevOps به مهارتهای کدنویسی قوی نیاز دارد، به خصوص در شرکتهای تولیدی.
زبان GO برای DevOps
وقتی در مورد برنامهنویسی یا اسکریپتنویسی برای DevOps صحبت میکنیم، زبانهای اصلی که بیشتر مورد بحث قرار میگیرند پایتون و shell scripting هستند.
به این دلیل که شروع کار با آن آسان است و میتوانید اسکریپتهای سیستمی زیادی را برای نیازهای اتوماسیون بنویسید.
با این حال، اگر به اکوسیستم DevOps نگاه کنید، بیشتر ابزارهای محبوبی که امروزه استفاده میکنیم بر اساس Go ساخته شدهاند.
Kubernetes، Terraform، Docker، Helm، Istio و بسیاری دیگر از ابزارهای CNCF با Go نوشته شدهاند.
چرا زبان Go به طور گسترده در ابزارهای DevOps و پروژههای بومی ابری استفاده میشود؟
پاسخ کوتاه: سرعت، سادگی و کارایی.
زبان Go برای رفع نیاز گوگل به کامپایل سریع (حل مشکلات زمان ساخت C++)، همزمانی کارآمد (برای سیستمهای توزیعشده در مقیاس بزرگ) و فایلهای باینری استاتیک (برای استقرار آسانتر در فضای ابری) طراحی شده است.
این امر، زبان Go را به انتخابی عالی برای زیرساختهای ابری، سرویسهای backend و سیستمهای توزیعشده تبدیل کرد، به همین دلیل است که به زبان بکاند پروژههایی مانند Kubernetes، Docker و Prometheus تبدیل شده است.
همچنین، بسیاری از پروژههای cloud-native با زبان Go توسعه داده میشوند و آن را به زبان ترجیحی برای ابزارهای DevOps تبدیل میکنند.
علاوه بر این، تعداد زیادی از توسعهدهندگان در این اکوسیستم مشارکت میکنند و منجر به ایجاد کتابخانهها و بستههای بیشتری برای اتوماسیون میشوند.
ابزار DevOps/SRE با زبان Go
به عنوان یک مهندس DevOps یا SRE، چه چیزی میتوانید با استفاده از زبان Go بسازید؟
کتابخانه استاندارد Golang از بسیاری از عملیات رایج، مانند مدیریت درخواستهای HTTP، ورودی/خروجی فایل، تجزیه JSON و YAML و موارد دیگر پشتیبانی میکند.
از آنجایی که ما اغلب برای کارهای روزمره اسکریپت مینویسیم، زبان Go انتخاب بسیار خوبی برای ساخت ابزارها و APIهای CLI است.
همچنین میتوانید کوبرنتیز را با استفاده از عملگرهای Kubernetes گسترش دهید و افزونههایی مانند کنترلرهای سفارشی و وبهوکهای پذیرش ایجاد کنید.
علاوه بر این، میتوانید با استفاده از زبان Go افزونههای kubectl ایجاد کنید.
به طور کلی، زبان Go برای سیستمهای backend، شبکهسازی و برنامههای بومی ابری عالی است. به همین دلیل، به لطف عملکرد Go و ابزار CNCF ساخته شده در اطراف آن، میتوانید از زبان Go برای DevOps و مهندسی قابلیت اطمینان سایت برای ساخت ابزارها و خدمات استفاده کنید.
Write once, run anywhere (WORA) یا یک بار بنویس، همه جا اجرا کن به این معنی است که یک برنامه میتواند یک بار نوشته شود و بدون نیاز به تغییر، روی پلتفرمهای مختلف اجرا شود.
زبان Go به توسعهدهندگان اجازه میدهد تا با استفاده از متغیرهای محیطی (GOOS و GOARCH) کد را برای سیستم عاملها و معماریهای مختلف کامپایل کنند.
به عنوان مثال،
اگر یک برنامه GO را روی یک دستگاه لینوکس بنویسید، میتوانید آن را برای ویندوز، macOS یا حتی دستگاههای مبتنی بر ARM کامپایل کنید بدون اینکه نیازی به بازنویسی کد داشته باشید.
برخلاف پایتون یا جاوا که برای اجرا به مفسر یا ماشین مجازی (JVM) نیاز دارند، زبان Go همه چیز را در یک فایل باینری کامپایل میکند.
بدان معناست که نیازی به نصب کتابخانهها یا وابستگیهای اضافی روی سیستم هدف ندارید. فقط فایل باینری نهایی Go را کپی و آن را اجرا کنید.
این امر توزیع ابزارهای Go را به ویژه در محیطهای ابری، خطوط لوله CI/CD و برنامههای کانتینری آسان میکند.
با خرید وی پی اس از پارسدو، میتوانید از قدرت و پایداری یک ماشین مجازی اختصاصی در ۵ موقعیت جهانی بهرهمند شوید.
وظایف DevOps Golang برای امتحان کردن
پس از یادگیری اصول اولیه، باید برنامههایی بسازید تا یادگیری خود را تقویت کنید.
هرچه بیشتر بسازید، زبان Go را بهتر درک میکنید (همزمانی با Goroutines، مدیریت خطا، ساختارها و رابطها، سرورهای HTTP و APIها و غیره).
میتوانید وظایف زیر مربوط به DevOps را امتحان کنید. با هوش مصنوعی، اگر اصول اولیه را قوی داشته باشید، میتوانید به راحتی آن را درک کرده و بسازید.
- یک رابط خط فرمان (CLI) بسازید که سرویسها/نقاط پایانی را پینگ کند و وضعیت آنها را گزارش دهد.
- یک ابزار خط فرمان ساده ایجاد کنید که عملیات رایج ابری را انجام دهد.
- یک ابزار ایجاد کنید که فایلهای پیکربندی YAML/JSON را قبل از استقرار بخواند و اعتبارسنجی کند.
- یک scheduler ساده ایجاد کنید که وظایف را در فواصل مشخص اجرا کند.
- یک API ایجاد کنید که معیارهای سیستم مانند CPU، حافظه و میزان استفاده از دیسک را نشان دهد.
- یک ابزار ایجاد کنید که فایلها را بین دایرکتوریها یا سیستمها همگامسازی (synchronizes ) کند.
- ابزاری ایجاد کنید که ترافیک را برای آزمایش عملکرد برنامه ایجاد کند.
- برنامهای ایجاد کنید که فایلهای لاگ را تجزیه کرده و اطلاعات یا آمار مفید را استخراج کند.
در ادامه برخی از وظایف زبان Go مخصوص Kubernetes آمده است.
- یک اپراتور ساده ایجاد کنید که یک منبع سفارشی را مدیریت کند.
- یک وبهوک بسازید که منابع Kubernetes را قبل از ایجاد یا بهروزرسانی، اعتبارسنجی یا تغییر دهد.
- یک کنترلر ایجاد کنید که منابع خاص را رصد و هنگام تغییر آنها اقداماتی انجام دهد.
- یک ابزار CLI ایجاد کنید که مجوزهای RBAC را در سراسر کلاستر شما تجزیه و تحلیل و تجسم کند و حسابهای سرویس با امتیاز بیش از حد را شناسایی کند.
- ابزاری ایجاد کنید که حسابهای سرویس و توکنهای بلااستفاده را که باید پاک شوند، شناسایی کند.
- یک CLI بسازید که زمینههای امنیتی را در پادها و کانتینرها در برابر سیاستهای امنیتی سازمان شما اعتبارسنجی کند.
- یک برنامه ساده ایجاد کنید که خاموش کردن تدریجی پاد را با استفاده از SIGTERM مدیریت کند.
آمار و مطالعات موردی زبان Go
طبق نظرسنجی توسعهدهندگان Go در سال ۲۰۲۴، تقریبا نیمی از پاسخدهندگان (۵۰٪) برنامههای Go را در سرویسهای وب آمازون و سپس در سرورهای prem مستقر میکنند.
نتفلیکس Go را برای بخشهایی از زیرساخت خود که به عملکرد فوقالعاده نیاز داشتند، به کار گرفت. با استفاده از Go، نتفلیکس به سرویسی با تاخیر کم و همزمانی بالا که بدون فدا کردن سرعت توسعهدهنده به آن نیاز داشتند، دست یافت.
کلودفلر به شدت به Go برای ساخت راهکارهای شبکهای با عملکرد بالا، مقیاسپذیر و ایمن متکی است. بسیاری از سرویسهای اصلی Cloudflare، مانند reverse proxy ، DDoS protection و firewall rules ، با Go نوشته شدهاند.
اینها فقط چند نمونه هستند. شرکتهایی مانند PayPal، Riot Games، Twitch و Uber به طور مشابه گزارش دادهاند که از Go برای دستیابی به سیستمهای مقیاسپذیر و قابل اعتماد استفاده میکنند.
نتیجهگیری
به مهندسان DevOps توصیه میکنم که روی کدنویسی (Golang یا Python) تمرکز نموده و شروع به ساخت ابزارها یا اپلیکیشن کنند.
حتی اگر امکان انجام این کار را در یک پروژه ندارید، روی پروژههای سرگرمی کار کنید یا ابزارهای متنباز ایجاد کنید.
این کار به شما کمک زیادی خواهد کرد. همچنین میتوانید در پروژههای متنباز نوشته شده با Go، مانند Kubernetes یا ابزارهای مرتبط با CNCF، مشارکت کنید.
اگر به دنبال شغلی در حوزه مهندسی پلتفرم هستید، داشتن درک قوی از زبان Go میتواند یک مزیت قابل توجه باشد.