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

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

Алексей Ладейщиков
Алексей Ладейщиков

CTO в aim digital agency

Node.JS — технология, которая трансформировала знакомый всем веб-разработчикам JavaScript из языка клиентского скриптинга в язык общего назначения, который имеет большое количество вариантов прикладного использования.

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

Чем хорош Node в сравнении с другими технологиями серверного скриптинга?

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

Что это значит для бизнеса?

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

Что это значит для разработчиков?

  • Если нет понимания работы асинхронного кода и опыта работы с ним, то вначале будет очень сложно. Сложно понять, что какая-то инструкция, написанная «выше по течению» может выполниться намного позже, чем последующие, а может и не выполниться вовсе. Потребуется хорошо изучить концепции коллбэков, промисов, async-await обёрток над промисами, синхронных и асинхронных генераторов, итераторов. Зато это очень хорошо структурирует мышление, позволяет иначе взглянуть на процесс выполнения программы и понять, какое огромное количество времени «обычная» — синхронная — программа тратит впустую — в периоды ожидания, а также научиться экономить это время.
  • Хорошее понимание асинхронных подходов к разработке сильно повышает ценность специалиста на рынке труда и, соответственно, позволяет претендовать на более высокую зарплату.

Node позволяет быстро разработать MVP. В Node уже разработано большое количество пакетов с различным функционалом. Можно не тратить время на разработку базового функционала, а сразу сконцентрироваться на бизнес-логике.

Что это значит для бизнеса?

  • Новый продукт будет быстрее выведен на рынок (уменьшится TTM).
  • Меньше средств будет затрачено на процесс разработки, т.к. для создания первой версии продукта понадобится меньше часов разработчиков.
  • Быстрее будут проверены гипотезы, сформировавшиеся при первоначальном исследовании рынка, быстрее будут внесены коррективы в продукт, быстрее, в конечном счёте, будут оборачиваться средства. Это очень важная характеристика для инвесторов проекта.

Что это значит для разработчиков?

  • Можно не изобретать «велосипеды» на каждом проекте, что неизбежно вызывает массу ошибок и делает работу скучной, а заниматься вплотную задачами, важными для проекта.
  • Большая свобода в выборе подхода, выстраивании архитектуры, доработке штатной функциональности, не удовлетворяющей требованиям архитектора и/или заказчика.
  • Node построен на базе языка JavaScript. Как следствие это значительно повышает вероятность развития фуллстек-специалистов в команде разработки: фронтендеров, которые неплохо разбираются в бэкенде или бэкендеров, которые неплохо разбираются во фронтенде.

Node.js очень тесно связан с JavaScript, синтаксис и архитектурные подходы идентичны, отличаются только «обвязки» (браузерная и серверная).

Что это значит для бизнеса?

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

Что это значит для разработчиков?

  • Если до этого приходилось тесно работать с фронтендом, то есть хорошее понимание процессов, которые происходят с данными в пользовательской части ресурса, и, как следствие, более простой диалог с фронтендерами.
  • Хорошего фуллстек-специалиста часто больше ценят на рынке, чем хорошего бэкенд- или фронтенд-разработчика
  • При наличии достаточного количества времени, отведённого на разработку проекта, можно самостоятельно сделать и фронт и бэк, тем самым избежать огромного количества «коллизий», на решение которых нередко тратится масса времени.

Естественно, как и у любой другой технологии у Node есть недостатки.

В чём заключаются слабые стороны Node?

  1. Node очень быстро работает с большим количеством легковесных запросов (таких, которые не требуют длительной обработки данных, сложных вычислений и т.п.), однако его производительность сильно падает, если запросы требуют задействования больших серверных ресурсов.
  2. Язык и машина его исполнения очень активно развиваются и иногда случается так, что отдельные пакеты оказываются несовместимы между собой или с текущей версией платформы, что может привести к полному отказу проекта при обновлении «движка» или отдельного пакета.

Часто указанные недостатки используют противники Node для того, чтобы объяснить нежелание использовать его в продакшне. Причём, в подтверждение первого недостатка нередко заявляют о том, что Node однопоточный, поэтому писать на нём серьёзные приложения нельзя. На текущем этапе развития технологии – это совершенно неверно. Во-первых, давно существует подход, при котором запускается несколько экземпляров приложения, а в качестве балансировщика нагрузки используется веб-сервер Nginx. Во-вторых, в современных версиях Node существует встроенная возможность создания кластеров из однопоточных процессов, а также специальные утилиты для балансирования нагрузки, автоматического перезапуска процессов, контроля над использованием памяти и т.п.

Второй недостаток Node компенсировать достаточно легко. Во-первых, ни в коем случае не использовать указание версии пакета в формате «latest», а указывать точную версию пакета, с которым система гарантированно совместима. Во-вторых, во избежание потери доступа к точным версиям пакетов в общедоступном регистре создавать их копии в локальном регистре. В-третьих, не обновлять платформу или версии пакетов в production-окружении, не протестировав предварительно эту связку в development-окружении (утверждение очевидное, но нередко встречается его игнорирование).

С первым недостатком дело обстоит немного сложнее, т.к. «разогнать» Node в ресурсоёмких операциях у нас не получится. Но решение существует — передавать операции, создающие высокую аппаратную нагрузку, отдельным компонентам системы, написанным не на Node, зачастую даже расположенным на отдельных физических или виртуальных машинах. Существуют различные варианты реализации этого решения: микросервисная архитектура, подключение модулей, написанных на других языках программирования и т.п.

В качестве технологий, позволяющих реализовать высокопроизводительную функциональность, удобно применять: Rust, Go, C++.

Где удобно использовать Node?

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

  • интернет-магазины;
  • видео- и аудио-хостинги;
  • мессенджеры;
  • социальные сети;
  • любые b2c продукты.

Для всех этих направлений Node позволяет реализовать, как было сказано выше, быстрый старт, а затем быстрое, относительно недорогое горизонтальное масштабирование.

Проекты на Node

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

  • фриланс-биржа;
  • маркетплейс запасных частей;
  • realtime-аукцион (API для мобильного приложения и веб-версии);
  • интерактивная система создания медиа-материалов для соцсетей;
  • система организации e-mail-рассылок;
  • помощник инспектора предприятий торговли (API для мобильного приложения);
  • помощник пациента (API для мобильного приложения).

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации