اگر کمی در دنیای برنامه ‌نویسی، دواپس (DevOps) یا زیرساخت ‌های ابری (Cloud) چرخیده باشی، محال است اسم گو (Golang) به گوشت نخورده باشد. زبان برنامه ‌نویسی ‌ای که گوگل در سال ۲۰۰۹ معرفی کرد و در کمتر از یک دهه، تبدیل به زبان رسمی و "پادشاه" بلا منازع دنیای کلاد شد. اما چرا؟ چرا غول‌ هایی مثل داکر (Docker) و کوبرنتیز (Kubernetes) با این زبان نوشته شده‌اند؟ بیا با هم خیلی خودمونی و راحت، راز این پادشاهی را بررسی کنیم.

چرا گو (Go) برای دنیای کلاد ساخته شده؟

قبل از اینکه سراغ ابزار ها برویم، باید بدانیم گو چه جادویی در خودش دارد که بقیه زبان‌ها (مثل پایتون، جاوا یا سی‌پلاس‌پلاس) در دنیای ابری به گرد پایش هم نمیرسند:

  1. کامپایل شدن به یک فایل باینری مستقل (Single Binary): کد های گو مستقیماً به زبان ماشین کامپایل میشوند. نتیجه؟ یک فایل اجرایی تر‌و‌تمیز که برای اجرا شدن به هیچ پیش‌ نیازی (مثل ماشین مجازی جاوا یا مفسر پایتون) نیاز ندارد. این ویژگی برای ساخت کانتینر ها یک موهبت بزرگ است!
  2. هم‌زمانی بی نظیر (Concurrency): گو با مفهومی به نام Goroutines به دنیا آمد. گوروتین‌ها مثل تردها (Threads) هستند اما بسیار بسیار سبک‌تر. یک سرور گو میتواند میلیون ‌ها گوروتین را همزمان مدیریت کند بدون اینکه حافظه سیستم منفجر شود.
  3. مصرف بهینه منابع: در دنیای کلاد، هر مگابایت رم و هر درصد پردازنده یعنی پول. گو به‌شدت سریع است و حافظه کمی مصرف میکند.
  4. سادگی و خوانایی: یادگیری گو راحت است و کد های آن پیچیدگی زبان ‌هایی مثل ++C را ندارد. این یعنی تیم‌ های بزرگ میتوانند خیلی راحت روی پروژه‌ های عظیم کار کنند.

بررسی نقش Golang در ۳ غول دنیای ابری

حالا بیا ببینیم این زبان چطور معماری اینترنت و سرورها را با سه ابزار قدرتمند زیر و رو کرد:

۱. داکر (Docker): شروع انقلاب کانتینرها 

تا قبل از داکر، برنامه ‌نویس ‌ها همیشه می گفتند: "روی سیستم من که کار میکرد!" داکر آمد تا این مشکل را با کانتینر ها حل کند. داکر در ابتدا با زبان پایتون استارت خورد، اما خیلی زود تیم سازنده متوجه شدند پایتون برای کارهای سطح پایینِ سیستم‌عامل (مثل دستکاری Namespaceها و Cgroups در لینوکس) مناسب نیست. آن‌ ها به زبانی نیاز داشتند که مثل C قدرتمند باشد، اما توسعه با آن سریعتر و امن ‌تر باشد. اینجا بود که گو وارد شد. گو به داکر اجازه داد تا یک فایل اجرایی سبک بسازد که مستقیماً با هسته لینوکس صحبت میکند و کانتینرها را در کسری از ثانیه بالا می آورد.

۲. کوبرنتیز (Kubernetes): رهبر ارکستر کانتینرها 

وقتی تعداد کانتینر های داکر در یک شرکت از ۱۰ تا به ۱۰۰۰۰ تا می‌رسد، دیگر نمی‌توان آن‌ها را دستی مدیریت کرد. گوگل، کوبرنتیز (K8s) را برای مدیریت و زمان ‌بندی این کانتینرها ساخت. از آنجایی که هم گو و هم کوبرنتیز دست ‌پرورده‌ی خود گوگل هستند، انتخاب گو برای این پروژه کاملاً منطقی بود. کوبرنتیز باید هزاران سرور (Node) را مدیریت کند، درخواست‌ های شبکه‌ ای بی ‌شماری را هندل کند و وضعیت سیستم را هر ثانیه چک کند. هم‌زمانی (Concurrency) قدرتمند گو، اینجا دقیقاً همان چیزی بود که K8s برای مدیریت این ترافیک عظیم نیاز داشت.

۳. ترافیک (Traefik): مسیریاب مدرن لبه شبکه 

در دنیای میکروسرویس ‌ها، سرویس‌ ها مدام خاموش و روشن میشوند و آدرس ‌های IP آن‌ها تغییر میکند. ما به یک روتر (Reverse Proxy) نیاز داریم که این تغییرات را در لحظه بفهمد. ترافیک (Traefik) دقیقاً همین کار را میکند. این ابزار که کاملاً با گو نوشته شده، می‌تواند به کوبرنتیز یا داکر متصل شود و بدون نیاز به ری‌استارت شدن، مسیردهی (Routing) را به‌روزرسانی کند. سرعت بالای گو در پردازش درخواست‌های HTTP و پشتیبانی عالی آن از شبکه‌سازی باعث شد تا Traefik بتواند هزاران درخواست در ثانیه را بدون افت عملکرد مدیریت کند.

 نتیجه‌گیری

اگر امروز میبینیم که توسعه‌دهنده‌ ها میتوانند نرم‌افزار هایشان را با خیال راحت روی سرور های ابری دیپلوی (Deploy) کنند و نگران از کار افتادن آن‌ ها در ترافیک‌ های بالا نباشند، بخش بزرگی از این آرامش را مدیون زبان Golang هستیم. گو با ترکیب سرعت، سادگی و هم ‌زمانی، دقیقاً همان آجری بود که برای ساختن آسمان ‌خراش‌ های دنیای Cloud به آن نیاز داشتیم.