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

Я участвовал во многих проектах в качестве бэкенд-разработчика и имел дело с различными фреймворками Node.js (такими как Express, NestJS, Adonis.JS и Fastify). Хочу поделиться своим опытом и рассказать о том, почему я выбираю NestJS в качестве бэкенд-фреймворка (при условии, что стеком проекта является Node.js).

1. Популярность фреймворка NestJS

Как можно определить популярность фреймворка?

  • Зайти на GitHub и обратить внимание на количество звезд, контрибьюторов, тикетов и т. д.
Сравнение Express и Nest (по состоянию на сентябрь 2022 г.)

В качестве примера я показал рейтинг Express и Nest на GitHub. Express более популярен (у него на 8 000 звезд больше, чем у Nest), но Express намного старше Nest. Другие фреймворки заработали менее 30 000 звезд.

Обратите внимание: количество загрузок в npm не всегда является точным показателем популярности фреймворка.

  • Посетить Stack Overflow.

Тренды Stack Overflow покажут, как со временем менялась популярность той или иной технологии. Анализ проводится на основе использования тегов, начиная с 2008 года, когда был основан сервис Stack Overflow.

Как видите, Express и NestJS “живы”, но процент роста NestJS намного выше. На мой взгляд, другие фреймворки можно считать “мертвыми”, потому что вопросов, касающихся их, очень мало. 

Сравнение Express и Nest (сентябрь 2022 г.)

Исходя из этих статистических выкладок, можно сделать вывод о том, что фреймворк Nest популярен и становится все популярнее с каждым днем. Следовательно вы можете легко найти разработчиков, специализирующихся на NestJS.


2. Понятный код

Есть два подхода к группировке файлов в проекте.

  • На основе функций (MVC).
  • На основе свойств: например, группировка всех связанных файлов для модуля (контроллера, модели, теста, сервиса и т. д.) в папку. Затем эту папку можно легко использовать повторно в других проектах, а при внесении изменений легче будет найти нужные файлы.

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

3. Использование TypeScript

Рассмотрим преимущества TypeScript.

  • Типизация позволяет давать точное определение.
  • Типы упрощают процесс управления кодом.
  • Поднимается производительность команд.

В проекте, предусматривающем микросервисы, все они должны иметь одну и ту же модель выхода или один и тот же режим ответа. Используя TypeScript, вы избежите множества ошибок.


4. Целостность при обработке ошибок

Одной из важных особенностей микросервисов является создание стабильной структуры для обработки микросервисных ошибок.

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

Фильтры исключений обеспечивают единую структуру для обработки ошибок.


5. Упрощенное межсервисное управление

Как вы знаете, в микросервисах не предусмотрен прямой доступ к базе данных других сервисов, поэтому для межсервисной связи стоит использовать шины событий, такие как Kafka, RabbitMQ, NAt и т. д.

Nest изначально поддерживает микросервисную архитектуру, поэтому связь между сервисами легко реализуется с помощью любого метода (Kafka, RabitMQ, MQTT, GRPC, Redis и NATS), который вы выберете.

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


6. Тестирование

Автоматизированное тестирование считается неотъемлемым этапом разработки программного обеспечения, особенно в части проверки микросервисов. Автоматизация позволяет легко и быстро повторять отдельные тесты или наборы тестов в процессе разработки. Благодаря этому обеспечивается соответствие релизов заданным показателям качества и производительности.

Nest выполняет следующие функции.

  • Автоматическое создание стандартных модульных тестов для компонентов и e2e-тестов для приложений.
  • Предоставление инструментов по умолчанию (например, тестового запуска, который собирает изолированный модуль/загрузчик приложений).
  • Обеспечение встроенной интеграции с Jest и Supertest при сохранении независимости от инструментов тестирования.
  • Обеспечение доступа к системе инъекции зависимостей Nest в среде тестирования для облегчения мокинга компонентов.

Итак, в этой статье мы кратко перечислили преимущества фреймворка NestJS при работе с микросервисами.

Все упомянутые выше задачи можно решить и с помощью Express. В других фреймворках разработчики могут следовать индивидуальным предпочтениям при реализации микросервисов. Но в Nest все действительно продумано до деталей. Для каждой потребности отведено конкретное место и с помощью документации показано, как реализуется та или иная функция.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Mohammad Yaser Ahmadi: Why NestJS is The Best Node.js Framework for Microservices?

Предыдущая статьяМониторинг кластера Kubernetes без зависимостей
Следующая статья5 вечерних практик, которые помогают избежать выгорания