Как мы открыли для себя Go, перевели на него почти все проекты и что из этого получилось
Еще год назад языками программирования, которые мы в ЛДБИТ использовали для бэкенда, были Python, Java и PHP. Если представить в процентном соотношении, то картина выглядела следующим образом:
Java мы предпочитали остальным, Python использовали из-за большого количества старых проектов на Django, на PHP выполняли простые рядовые задачи (типа презентационных сайтов на WordPress) и развлекались по мелочи (Laravel, Yii 2).
Но шло время: появлялись новые проекты, готовые проекты развивались. Вместе с тем росли и серверные мощности, ну и конечно счета. В один ужасный момент мы перешагнули психологический барьер наших финансовых затрат относительно хостинга. Лицензировать новые проекты не успевали, на горизонте начинали маячить проблемы относительно безопасности: банальной кражи кода и нарушений правил интеллектуальной собственности, плюс потенциальные риски для заказчиков.
Мы задумались о переезде.
Поиск нового решения
Переезде на другой язык программирования.
Основными критериями при поиске решения (нового для нас языка программирования) являлись:
- Компиляция в нативный код;
- Минимальное использование ресурсов для работы;
- Большое комьюнити;
- Большое количество библиотек для быстрой разработки решений.
В результате многодневных поисков мы пришли к следующему выбору: Rust или Golang. Rust показался нам слишком «тяжелым» для быстрого освоения и долгим для перевода команды на него. А вот с Golang ситуация оказалась диаметрально противоположной.
Ради эксперимента мы переписали несколько наших имеющихся продуктов на Go. В результате замеров выяснилось, что потребление ресурсов снизилось почти на 70% (В сравнении с предыдущим решением на Django 2). После мы решили посчитать финансовую экономию решения. Снижение суммы платежа на VDS для одной инсталляции этого проекта на 43% еще больше укрепило наше понимание, что мы движемся в верном направлении.
Плюс безопасность, конечно. Golang — компилируемый язык программирования со всеми вытекающими плюсами: злоумышленник получает доступ к системе, но не к ее основному коду. И это классно.
Еще одним нашим удивлением было то, что наши сотрудники с Java и Python на Go перешли буквально за пару недель без каких-либо проблем (разумеется переход с Java был более быстрым и легким, чем с Python, но и питонисты не подкачали). Проще всего, естественно, переход дался тем сотрудникам, кто до этого имел дело с C++.
Что имеем сейчас
Сейчас мы практически перестали разрабатывать решения на Java/Python/PHP и стараемся решать поставленные задачи с помощью Golang, благо с каждым новым проектом они становятся интереснее и сложнее. Разумеется, есть проекты и сфера деятельности (да здравствует «кровавый энтерпрайз»), где Java доминирует. Тут без вариантов. Java так Java. Ну и если клиент настаивает на решении задачи с помощью Python и переубедить его не удается — берем «питона». Простые задачи продолжаем решать на PHP.
Планируем ли мы мигрировать дальше и вкатываться в Rust? Пока мы не видим для себя сильно значимых аргументов для этого. Поэтому сейчас продолжаем по-максимуму использовать Golang.
И в заключении — наш текущий стек бэкенд-языков:
Про сам язык программирования Go мы расскажем в одной из следующих нашей статей.
Ну а пока желаем всем продуктивной рабочей недели. Увидимся.