О языке программирования Golang, созданном корпорацией Google, на Хабре рассказывали много и подробно, так что мы не будем в очередной раз обсуждать достоинства этого инструмента. Лучше поговорим об известных проектах, которые написаны на Go — они являются доказательством если не универсальности, то разносторонности языка и его возможностей.
Кроме того, упомянем и самые известные компании, которые работают с Go. Кто знает, возможно, кто-то из читателей Хабра там уже работает, и сможет рассказать подробности. Как всегда, все самое интересное — под катом. Статья написана совместно с Никитой Кузнецовым, старшим разработчиком в компании Мегафон и преподавателем курса “Go-разработчик PRO” в Skillbox.
Docker
Это один из наиболее известных и сложных продуктов, написанных на Go. Менее чем за год эта система для запуска изолированных виртуальных машин с кастомизируемой средой стала чрезвычайно популярной.
Команда Docker решила взять на вооружение Go по нескольким причинам:
- Статическая компиляция без зависимостей;
- Мощная стандартная библиотека;
- Полноценная среда разработки;
- Возможность создания проектов для разных архитектур с минимальными (по сравнению с другими языками) затратами времени и ресурсов.
У самого Docker можно выделить три основных преимущества:
- Возможность изоляции запущенного приложения. То есть его можно отделить от ОС хоста, работая как с управляемым приложением;
- Относительно простой процесс разработки, тестирования и развертывания приложений;
- Среда для запуска уже есть, ее не нужно конфигурировать, все необходимое поставляется вместе с приложением.
Kubernetes
Если говорить о Docker, то невозможно не упомянуть и другой, тесно связанный с ним проект — Kubernetes. Он тоже написан на Golang, причем его писали, фактически, создатели этого языка — разработчики из Google. Вместе с ними над Kubernetes работали представители других крупных компаний, включая IBM и Microsoft.
Перед тем, как приступить к созданию Kubernetes, разработчики из Google рассматривали возможность использования других языков, а именно C / C ++, Java и Python.
Золотой серединой в итоге стал именно Go, о чем рассказал Джо Беда, соучредитель и экс-технический руководитель проекта. Сейчас он работает в команде Vmware.
CoreOS
Конечно, нельзя сказать, чтобы вся эта ОС с открытым исходным кодом на базе ядра Linux была написана на Golang. Но основные компоненты этой системы — да, написаны. Предназначена ОС для создания инфраструктуры компьютерных кластеров, причем особое внимание уделено автоматизации, упрощению внедрения приложений, безопасности, надежности.
CoreOS предоставляет возможности для развертывания приложений внутри программных контейнеров, плюс средства обнаружения и передачи настроек.
Так вот, на Golang написаны оба демона этой ОС: etcd и fleet. Fleet позволяет обращаться с кластером CoreOS так, как если бы он имел общую систему инициализации. А etcd представляет собой распределенное хранилище ключей и значений, а также обеспечивает синхронизацию настроек между приложениями Docker и экземплярами CoreOS. Распространяются они под открытой лицензией Apache License 2.0. На Go их написали потому, что язык «предоставляет отличную кроссплатформенную поддержку, обширную экосистему и сообщество».
Istio
Это — отличная open-source технология от IBM, которая позволяет разработчикам подключать и управлять целыми сетями микросервисов. Также разработчики могут обеспечивать безопасность этих микросервисов вне всякой зависимости от платформы, источника или производителя. По словам команды, Istio — один из самых быстро развивающихся проектов с открытым исходным кодом. Его главная движущая сила — сообщество и участники Github.
Важно отметить, что Istio — часть экосистемы Kubernetes. При помощи этого инструмента разработчики могут не только соединять сервисы друг с другом, но и давать им доступ во внешний мир. При помощи Istio разработчики получают программируемую сервисную сетку, сетевые прокси между каждым контейнером в кластере Kubernetes и внешним миром.
Golang выбрали потому, что с его помощью можно создавать децентрализованные распределенные сетевые проекты, чем и является Istio.
Traefik
Это еще один сетевой проект, написанный на Go. Он представляет собой обратный прокси-сервер и балансировщик нагрузки для сетевых сервисов. Инструмент создавался для работы с широким спектром вариантов оркестровки, от Kubernetes и Docker Swarm до Amazon ECS и Azure Service Fabric. Traefik автоматически создает маршруты, необходимые микросервисам, работающим под управлением этих оркестраторов, для связи с внешним миром. Он также генерирует данные трассировки и статистику, подходящие для вашего оркестратора.
Вот основные возможности обратного прокси-сервера:
- обеспечение сокрытия структуры внутренней сети и подробностей о находящихся в ней сервисах;
- осуществление балансировки нагрузки (load balancing) между экземплярами одного и того же сервиса или серверами с одинаковыми задачами;
- обеспечение зашифрованного (HTTPS) соединение между клиентом и любым сервисом, в таком случае SSL сессия создается между клиентом и прокси. Между прокси и сервисом во внутренней сети устанавливается незашифрованное HTTP соединение, если сервис поддерживает HTTPS то можно организовать зашифрованное соединение и во внутренней сети;
- организация контроля доступа к сервисам (аутентификацию клиента), а также установить файрволл (брандмауэр).
В качестве вывода можно сказать, что Golang обеспечивает высокую производительность, подобно C и C++, работу с параллелизмом, как Java и удобство работы с кодом, аналогично Python. Golang может работать и на недорогом, медленном железе, что дает возможность бизнесу экономить на аппаратном обеспечении.