- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

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

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

Почему Go?

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

Вот 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). Вот результаты
тестов игр [4], которые, тем не менее, являются несправедливыми, так как зависят от типа приложения и конкретного случая.

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

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

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

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

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

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

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

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

Заключение

Go дал нам большую гибкость, единый язык для всех случаев и во всех из них, он работает очень и очень хорошо. Мы получили на 30% больше производительности нашей серверной части и API сервисов. И теперь мы можем обрабатывать логи в режиме реального времени, перемещать его в базу данных и создавать потоки на Websocket из одного или нескольких сервисов. Это потрясающий результат возможностей языка Go.

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

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/252830

Ссылки в тексте:

[1] статьи: https://hackernoon.com/5-reasons-why-we-switched-from-python-to-go-4414d5f42690

[2] языка программирования Go: https://golang.org/

[3] TreeScale.com: https://treescale.com/

[4] тестов игр: https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=python3

[5] плагин Go для JetBrains IDEA: https://github.com/go-lang-plugin-org/go-lang-idea-plugin

[6] Источник: http://habrahabr.ru/sandbox/108680/