Pull to refresh

5 причин почему мы перешли с Python на Go

Всем привет! Это мой первый пост здесь. Решил выложить свой перевод статьи Tigranа Bayburtsyanа о том, как он и его стартап перешли с Python на Go. Статья мне показалась интересной, на medium она находится в топ-3 по тегу golang с начала этого года. Сразу скажу, она лишь отражает мнение и опыт автора, которые могут не совпадать с вашими, и это нормально — сколько людей столько и мнений. Итак, поехали.

Gophers с сайта golang.org
Gophers с сайта golang.org

Python прекрасен! Особенно Python 3 с его асинхронной функциональностью. Но на деле Go не даёт никому шансов выжить в мире enterprise…

Если вы прониклись этой цитатой, тогда вы, возможно, пробовали или хотя бы смотрели в сторону языка программирования Go, который, по моему мнению, является самым простым языком программирования, подходящим для разработки любых приложений. Да! Вы не ослышались, для меня изучить Go оказалось проще, чем Javascript. Я думаю, это главная причина того, что Go разошёлся такой популярностью всего за несколько лет.

Итак, что мы имели перед использованием Go?


TreeScale.com — это, в основном, панель инструментов и приложение, основанное на API, с некоторыми аналитическими возможностями. Вот наш технологический стек:

  • React.js для клиентской части панели инструментов
  • Django (Python) для серверной части панели инструментов + сервис аутентификации
  • Node.js для API сервиса
  • PostgreSQL как база данных и Cassandra для логирования
  • Самописные реестры для контейнеров на языке Rust

Как вы можете видеть, вся инфраструктура — полностью основана на микросервисах, и большая часть логики полностью разделена, даже на разные технологии.

Это основная причина, почему мы начали размышлять о слиянии API сервиса и серверной части в единый проект, потому что у них есть много схожих вещей, в то время как код приходится повторять на множестве различных языков и технологий. Но, как оказалось, нам пришлось бы совершать много лишних телодвижений по настройке API сервиса Django, особенно с пользовательскими JSON ответами.

После 1 месяца создания API сервиса на Django, я почувствовал, что Django крут только пока вы делаете что-то обыденное, но когда вы хотите больше производительности и настраиваемых модулей — это становится куда более сложным делом.

Почему Go?


Как я говорил ранее, Go — самый простой язык, который я когда-либо видел и использовал до этого. Но это было лишь начало.

Вот 5 основных причин, почему мы перешли с Python Django в пользу Go.

#1 Он компилируется в единый бинарник


Goland создан как компилируемый язык, и команда разработчиков Google проделала большую работу над ним. Используя статичное связывание (static linking) он действительно объединяет все зависимости библиотек и модулей в единый бинарный файл, основанный на типе и архитектуре используемой операционной системы. Это значит, если вы компилируете серверную часть своего приложения на своём ноутбуке под linux x86 CPU, то вы можете просто загрузить скомпилированный бинарник на сервер и это будет работать, без установки каких-либо зависимостей на нём!

#2 Система статических типов


Система типов это действительно важная часть большого масштабируемого приложения. Python крутой и интересный язык, но иногда вы просто получаете нестандартные исключения, потому что пытаетесь использовать переменные как число (integer), но оказывается, что это строка (string).

# Django will crash process because of this
def some_view(request):
    user_id = request.POST.get('id', 0)
    # If this post request has "id" parameter then
    # user_id would be a string, 
    # but you really thinking it is integer
    User.objects.get(id=user_id)

Go даст вам знать об этой проблеме во время компиляции, путём вывода ошибки компилятора. Это тот момент, когда вы выигрываете время, вместо того, что тратить его на такие глупые ошибки.

#3 Производительность!!


Это возможно вас удивит, но во многих случаях Go быстрее Python (2 и 3). Вот результаты
тестов игр, которые, тем не менее, являются несправедливыми, так как зависят от типа приложения и конкретного случая.

В нашем случае, Go производительнее благодаря своей модели параллелизма и масштабируемости CPU. Всякий раз, когда нам необходимо обработать внутренний запрос, мы делаем это с помощью отдельной Горутины, которая в 10 раз менее прожорлива, чем потоки в Python. Таким образом, мы сохраняем много ресурсов (память, CPU), потому что используем встроенные функции языка.

#4 Вам не нужен фреймворк для Go


Это наиболее крутая штука в этом языке программирование. Создатели Go и его сообщество сделали так много встроенных инструментов, которые в самом языке поставляются «из коробки», что в большинстве случаев отпадает необходимость в какой-либо сторонней библиотеке. Например, в нём есть http, json, html templating, изначально встроенные в язык, тем самым вы можете создавать сложные API сервисы даже не думая о поиске какой-либо библиотеке на Github!

Но конечно, есть и множество библиотек и фреймворков, написанных для Go и для создания веб-приложений на нём, но я рекомендую вам самим создавать ваше приложение или API сервис без использования сторонних библиотек, потому что в большинстве случаев они не сделают вашу жизнь проще, как это делают встроенные пакеты.

#5 Отличная поддержка IDE и отладка


Поддержка IDE это одна из самых важных вещей, когда вы пытаетесь перейти на другой язык программирования. Комфортная IDE в среднем может сохранить до 80% вашего времени написания кода. Я нашёл плагин Go для JetBrains IDEA, который также поддерживает WebStorm, PHPStorm и так далее. Этот плагин предоставляет всё, что необходимо для разработки проекта; со всей мощью JetBrains IDEA вы можете реально ускорить свою разработку.

Основываясь на нашей статистике кода, после переписывания всех проектов на Go мы получили на 64% меньше кода, чем раньше.

Вам действительно не нужно отлаживать код, которого не существует. Меньше кода, меньше проблем!

Заключение


Go дал нам большую гибкость, единый язык для всех случаев и во всех из них, он работает очень и очень хорошо. Мы получили на 30% больше производительности нашей серверной части и API сервисов. И теперь мы можем обрабатывать логи в режиме реального времени, перемещать его в базу данных и создавать потоки на Websocket из одного или нескольких сервисов. Это потрясающий результат возможностей языка Go.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings