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

в 0:24, , рубрики: Go, python, метки: , , ,

Всем привет! Это мой первый пост здесь. Решил выложить свой перевод статьи 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.

Автор: Барак Адама

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js