Share This
Связаться со мной
Крути в низ
Categories
//📱 Выбираем хостинг для мобильного приложения. Часть третья: Node.js или Go – что лучше?

📱 Выбираем хостинг для мобильного приложения. Часть третья: Node.js или Go – что лучше?

Серверные языки программирования и среды исполнения различаются по многим аспектам, что делает процесс выбора для конкретного случая довольно сложным. Сравним преимущества и недостатки Node.js и Go – двух популярных среди разработчиков всего мира вариантов. Попробуем разобраться, какой из них лучше.

vybiraem hosting dlja mobilnogo prilozhenija chast tretja nodejs ili go chto luchshe 41e2db0 - 📱 Выбираем хостинг для мобильного приложения. Часть третья: Node.js или Go – что лучше?

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

Серверная часть приложения воплощает в жизнь всю бизнес-логику и является наиболее важной частью продукта. Качество приложения определяется многими факторами: способностью эффективно обрабатывать запросы и возможностями масштабирования, а также поддержкой кода и общей безопасностью системы.

Чтобы помочь вам сделать правильный выбор, мы сосредоточимся на двух вариантах: Go и Node.js. В последнее время они наиболее активно развиваются и являются наиболее многообещающими серверными технологиями.

Другие статьи цикла:

  • Часть первая: технологический стек
  • Часть вторая: базы данных и системы кеширования

vybiraem hosting dlja mobilnogo prilozhenija chast tretja nodejs ili go chto luchshe 071c9d0 - 📱 Выбираем хостинг для мобильного приложения. Часть третья: Node.js или Go – что лучше?

Node.js

Node.js – это кроссплатформенная среда исполнения JavaScript с открытым исходным кодом, которая часто используется для создания сетевых сервисов. Node.js характеризуется легкой кривой обучения, которая позволяет создавать быстрые и масштабируемые приложения на JavaScript – эта среда отлично подходит для быстрого прототипирования и отличается изобилием библиотек с открытым исходным кодом.

Как появился Node.js

История Node.js начинается с JavaScript, одного из самых любимых языков программирования всех времен. JavaScript был создан в 1995 году и в то время использовался исключительно для веб-разработки, но применять его исключительно как язык программирования сценариев на стороне клиента было бы непрактично.

Почему бы не использовать JS за пределами браузера? В 2009 году Райану Далю пришла в голову блестящая идея: он взял движок Chrome V8 и встроил его в программу на C++. Получившееся творение увидело свет под названием Node. Так родился Node.js!

Node.js подходит для выполнения кода на серверной стороне, в нем есть несколько модулей, которые предоставляют JavaScript возможности, необходимые для мобильных, настольных и серверных приложений. Таким образом Node.js позволил программистам использовать свой любимый JavaScript не только для интерактивной веб-разработки, но и для других целей!

Для чего используется Node.js

Node.js идеально подходит для масштабируемых, ресурсоемких и даже для приложений реального времени. Это связано с неблокирующей асинхронной природой среды. Что это значит? В Node.js один поток предназначен для обслуживания нескольких запросов. Когда поступает запрос, для его обработки используется один поток. Если нам нужно обратиться к базе данных для получения ответа, поток не ждет ответа от базы данных. Скорее он переходит к другим запросам, и когда база данных готова вернуть данные, она помещает их в очередь событий. Очередь постоянно контролируется Node.js, поэтому клиенты обслуживаются непрерывно.

Управляемая событиями архитектура (механизм обратного вызова) делает Node.js идеальным выбором для обработки сотен тысяч одновременных запросов.

Благодаря неблокирующим асинхронным алгоритмам работы Node.js идеально подходит для приложений с интенсивным использованием данных, приложений с высокими требованиями к масштабируемости и приложений, требующих высокой производительности в течение всего срока службы.

vybiraem hosting dlja mobilnogo prilozhenija chast tretja nodejs ili go chto luchshe 396b7bf - 📱 Выбираем хостинг для мобильного приложения. Часть третья: Node.js или Go – что лучше?

Go

Go (GoLang) – это статически типизированный компилируемый язык программирования с открытым исходным кодом, включающий сборщик мусора. Он чрезвычайно быстр (приложения на Go компилируются сразу в машинный код) и эффективен, поскольку построен с использованием языка C. Разработчики Go определенно не страдают от крутой кривой обучения.

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

Как появился язык программирования Go

Язык Go был создан в Google примерно в 2008 – 2009 годах, чтобы помочь технологическому гиганту решить конкретные проблемы того времени. Среди них можно выделить разработку многопоточных, сетевых приложений и веб-сервисов. По словам создателей GoLang (Кен Томпсон, Роберт Гриземер и Роб Пайк), старые языки не решали, а обходили современные проблемы. Таким образом они придумали новое решение, адаптированное к конкретным потребностям бизнеса.

Более того, GoLang был создан как относительно простой язык, который легко понять и использовать. Эти характеристики языка позволили получить более читаемый код, высокую надежность и упростили обслуживание проектов, построенных с использованием GoLang.

Для чего используется Go

GoLang – это в основном серверный язык, хотя область его применения стремительно растет. Он был создан для решения современных технических задач, и лучше всего показывает себя в следующих областях:

  • сетевое программирование;
  • обработка большого количества данных;
  • облачные вычисления;
  • машинное обучение;
  • обработка гео-данных;
  • микросервисы;
  • работа с потоковым аудио и видео;
  • инструменты разработки.

Итак, Go – это популярный статически типизированный язык программирования с открытым исходным кодом, исполняемый на стороне сервера и обладающий высокой производительностью. Это компилируемый язык, умеющий эффективно управлять памятью (с использованием сборщика мусора) и задействовать преимущества многоядерных процессоров. Количество разработчиков на Go постоянно растет.

Node.js vs Go

Node.js против Go – довольно спорное сравнение, поскольку это два разных инструмента разработки. Они принадлежат к разным классам технологий: языкам программирования и средам выполнения соответственно. Сравнение Node.js и GoLang – де-факто неправильная вещь, так как нельзя сравнивать микроскоп с телескопом!

  • GoLang – это статически типизированный язык программирования со сборкой мусора, обеспечивающий высокую производительность, а Node.js – это кроссплатформенная среда выполнения (а не язык или фреймворк). Если Go, если можно так выразиться, работает сам по себе, то Node.js на самом деле помогает JavaScript функционировать как серверный язык.
  • Оба они используются во всем мире как признанные технологии. У них есть отличное сообщество и армия поклонников, их используют в крупных ИТ-компаниях, среди которых есть такие громкие названия, как Google, Netflix и PayPal. Еще одна общая черта – они используются в основном для backend-разработки.
  • В то же время Node.js и Go однозначно нельзя сравнивать между собой: ни один не лучше и не хуже другого. В целом не слишком корректно навешивать на инструменты разработки ярлыки ПЛОХО или ХОРОШО, поскольку каждая технология предназначена для решения конкретных задач. Если в какой-то момент один инструмент действует «хуже», чем другой, может быть, он просто не предназначен для такого использования?

Следует тщательно выбирать язык программирования, на котором программа может быть эффективно разработана. Если говорить о Go vs Node.js, стоит учесть следующие факторы.

Критерий №1: зрелость

Хотя Go был представлен в 2009 году, его можно считать зрелым и надежным инструментом. В то же время Node.js демонстрирует тот же уровень зрелости и пользуется поддержкой широкой аудитории.

Итак, с точки зрения зрелости Node.js и GoLang почти одинаковы.

Критерий №2: чистая производительность

Google решил представить Go из-за разочарования специалистов в существующих языках программирования. По сравнению с Node.js, Go – лучший вариант для чистой (raw) производительности и вычислений.

С другой стороны, интерпретируемый Node.js является производным от JavaScript и, следовательно, обычно работает медленнее, чем другие языки программирования. В отличие от Go, Node.js не может предложить чистую производительность ЦП или задач, связанных с памятью. Проще говоря, Node.js может работать одинаково хорошо или ужасно, в зависимости от качества кода и специфики вашего приложения.

В сравнении производительности Go превосходит Node.js в среднем в два и более раза и помогает разработчикам добиться лучшей производительности.

Критерий №3: производительность в реальной жизни

Go показывает в два раза лучшую производительность по сравнению с Node.js даже в стандартном исполнении. Помимо того Go имеет подходы которые, позволяют получить еще большую производительность при реализации реальных задач.

Грамотное использование горутин (сопрограмм) совместно с гетерогенной архитектурой доступа к данным (база данных + кеш) или масштабированием на основе партиционирования позволяют сделать эту разницу еще более существенной.

Критерий №4: обработка ошибок

Обработка ошибок в Go требует от вас реализации явной проверки. Ошибки времени компиляции и выполнения обрабатываются по-разному, что создает сложности для разработчиков.

С другой стороны, Node.js реализует традиционный механизм обработки ошибок типа throw-catch, который довольно популярен среди программистов. При таком традиционном подходе ошибки отображаются и исправляются непосредственно перед исполнением следующих операций.

Сравнивая механизм обработки ошибок GoLang и Node.js, многие веб-разработчики находят Node.js лучше, поскольку они хорошо знакомы с подходом throw-catch.

Критерий №4: кривая обучения

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

С другой стороны, JavaScript – наиболее часто используемый во всем мире язык программирования. Разработчикам легко изучить Node.js, если у них есть базовые знания о JavaScript. Поскольку JavaScript существует давно, доступно множество онлайн- и оффлайн-ресурсов для помощи новичкам, а также существует огромное сообщество, которое делится опытом и предлагает помощь.

Таким образом, в сравнении кривой обучения Go и Node.js побеждает последний.

Критерий №5: параллелизм

Параллелизм – сильная сторона Go, так как он лучше всего подходит для крупных высоконагруженных проектов, требующих одновременной обработки тысяч запросов. Go использует горутины и облегченный механизм взаимодействия потоков, который позволяет разработчикам выполнять функции одновременно. Хотя пользователи могут одновременно запускать свои функции с помощью Go, это, к сожалению, не относится к Node.js.

Node.js является однопоточным и использует механизм обратного вызова событий, а значит все должно выполняться в линейном порядке и нет никакого параллелизма.

Итак, в этом раунде Go vs Node.js, Go – чемпион!

Критерий №6: масштабируемость

Go также уверенно выигрывает в битве масштабируемости Go vs Node.js. Горутины позволяют эффективно и надежно обрабатывать параллельные потоки. С другой стороны, масштабируемость Node.js менее функциональна.

Таким образом, Node.js не рекомендуется для крупных проектов из-за слабой поддержки многопоточного исполнения.

Критерий №7: инструменты разработки

Go поставляется с приличным набором библиотек, но по сравнению с Node.js разработчикам доступно меньше готовых инструментов.

Что касается Node.js, он предлагает разработчикам широкий набор инструментов, фреймворков и библиотек для создания всевозможных приложений. Более того, у JS есть огромное сообщество, которое обеспечивает поддержку для всех задач разработки.

Таким образом, Go проигрывает битву, когда дело касается инструментов разработки.

Критерий №8: доступность разработчиков

Найти разработчиков на Go может быть сложнее, чем разработчиков на Node.js. Однако ситуация стремительно меняется и со временем это не будет являться столь критичной проблемой.

Критерий № 9: Сообщество

Node.js – это зрелый инструмент с большим и динамичным сообществом. В первый год своего существования фонд Node.js сформировал команду ответственных за безопасность профессионалов и разработал долгосрочный план поддержки для повышения стабильности. На сегодняшний день репозиторий Node.js имеет 82100 звезд и 21400 форков на GitHub, а также аудиторию в 197000 участников на Reddit.

Сообщество Go с каждым годом продолжает расти. Поддержка Google – довольно веская тому причина. Ежегодный GopherCon собирает разработчиков со всего мира, чтобы обсудить новые возможности и изменения. Эта конференция привела к увеличению количества разработчиков, заинтересованных в участии в сообществе и в связанных с Go. На сегодняшний день репозиторий GoLang имеет 90400 звезд и 13300 форков на GitHub, а также аудиторию в 159000 участников на reddit.com.

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

Итог

Go занимает лидирующие позиции во всем мире превосходит Node.js в большинстве сценариев, включая производительность, параллелизм, масштабируемость и простоту, но библиотеки Node.js великолепны. Поскольку популярность Go неуклонно растет, можно быть уверенным, что со временем для него будет разработано больше библиотек и инструментов.

Многие компании решили перейти с текущих технологий (включая Node.js) на Go, чтобы повысить производительность программного обеспечения.

Однако на практике выбор технологии для создания приложения тесно связан со знанием этой технологии вашей командой и общей производительностью, которой вы можете достичь с ее помощью. Поиск разработчиков или их знакомство со стеком технологий часто является одним из определяющих факторов.

Итак, если вы очень хорошо разбираетесь в разработке на JavaScript и нуждаетесь в библиотеках Node.js, эквивалент которых может быть недоступен для Go, а также если функциональность Go не столь критична для вашего приложения, Node.js может быть хорошим выбором. В противном случае лучше остановить свой выбор на Go!

Во второй части я упомянул кастомные решения для построения эффективных баз данных RocksDB и BadgerDB. Также стоит упомянуть что BadgerDB – потрясающее хранилище для графовой системы управления базой данных Dgraph, которое написано на Go. А эти парни знают толк в построении баз данных и умеют выжать максимум из инструмента. В случае выбора Go для реализации серверной части у вас будет возможность поработать с ним, не нарушая консистентность проекта. *** Чтобы ускорить работу системы, выберите провайдера инфраструктуры, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативной памяти и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка. Эта статья написана совместно с нашим партнером – компанией Selectel.

Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.

Интересно, посмотреть тарифы Selectel

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2020 / All rights reserved

    Связаться со мной
    Close