Проектирование микросервисной архитектуры в среде NodeJS/NestJS

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Microservice Architecture Design in a NodeJS/NestJS Environment | Online Retail System


Проектирование микросервисной архитектуры в среде NodeJS/NestJS

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

Подразделение микросервисов:

  1. Product Catalog Service (Служба «Управление товарами»)

    • База данных: MongoDB или аналогичная база данных NoSQL для гибкой схемы и быстрого поиска информации о продукте;

    • Доступный функционал:

      • Управление продуктами;

      • Управление категориями продуктов;

      • Управление складом (Складскими запасами).

  2. User Account Service (Служба учетных записей пользователей)

    • База данных: Реляционная база данных PostgreSQL или MySQL для хранения таких данных, как профили пользователей, аутентификация и авторизация;

    • Доступный функционал: Работа с учетными записями пользователей, аутентификацией, авторизацией и данными, связанными с пользователями.

  3. Order Service (Служба «Управление заказами»)

    • База данных: MongoDB или база данных SQL, в зависимости от сложности данных, связанных с заказами и необходимости обеспечения транзакционной целостности;

    • Доступный функционал: Управление заказами, создание, обновление и отслеживание статуса заказов.

  4. Payment Processing Service (Служба «Обработка платежей»)

    • База данных: Может не требовать базы данных, если в основном занимается интеграцией платежных шлюзов. Однако он может хранить журналы транзакций в надежном хранилище, например Elasticsearch;

    • Доступный функционал: Интегрируется с платежными шлюзами, обрабатывает транзакции, регистрирует информацию о платежах.

Связь между микросервисами

  1. RESTful API или GraphQL: Каждый микросервис предоставляет API для взаимодействия. NestJS предоставляет отличные инструменты для создания RESTful API или конечных точек GraphQL, обеспечивая стандартизированное взаимодействие;

  2. Брокер сообщений (опционально): Реализуйте брокер сообщений, например RabbitMQ или Kafka, для асинхронного взаимодействия между сервисами. Это обеспечит свободное взаимодействие и лучшую масштабируемость.

Обеспечение согласованности данных

  1. Синхронная связь: Для критических операций, требующих немедленной согласованности (например, размещение заказа), используйте синхронную связь. Микросервисы могут напрямую взаимодействовать через REST или GraphQL для поддержания согласованности данных;

  2. Конечная согласованность: Для некритичных операций (например, обновление данных профиля пользователя) асинхронная связь с брокером сообщений позволяет поддерживать конечную согласованность без блокировки сервисов.

Обработка транзакций

  1. Распределенные транзакции: Используйте двухфазный протокол фиксации или шаблон (паттерн) SAGA для распределенных транзакций, охватывающих несколько микросервисов. Реализуйте компенсирующие транзакции для обработки частичных сбоев и обеспечения согласованности данных между сервисами;

  2. Журнал транзакций/сортировка событий: Ведите журналы транзакций или используйте поиск событий для отслеживания изменений в микросервисах. Это поможет восстановить состояния и устранить несоответствия.

Безопасность

  1. JWT‑токены: Внедрите JWT (JSON Web Tokens) для аутентификации и авторизации между сервисами. NestJS предоставляет надежные механизмы аутентификации;

  2. HTTPS: Обеспечьте безопасное взаимодействие между микросервисами с помощью HTTPS, чтобы предотвратить утечку данных.

Надежность системы

  1. Мониторинг и ведение логов: Внедрите системы логирования и мониторинга (например, стек ELK, Prometheus, Grafana) для отслеживания состояния, производительности и ошибок системы;

  2. Контейнеризация и оркестровка: Используйте Docker для контейнеризации и Kubernetes для оркестровки, чтобы обеспечить масштабируемость, отказоустойчивость и простоту развертывания.

Заключение

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


Изучаю архитектуру веб‑приложений, таких как «Система электронной коммерции».
Данная статья показалась мне интересной и я решил сохранить ее перевод.
В первую очередь для себя, ну и еще, чтобы почитать ваши комментарии)

Буду рад вашим комментариям, предложениям и замечаниям) Спасибо.

Источник: https://habr.com/ru/articles/841204/


Интересные статьи

Интересные статьи

"Сделай работающим, сделай правильным, сделай быстрым". Это мантра, которую вы, вероятно, слышали раньше. Это хорошая мантра, которая помогает вам сосредоточиться на том, чтобы не переусложнять решени...
Социальные сети стали неотъемлемой частью нашей повседневной жизни. Они объединяют людей, позволяют обмениваться информацией, поддерживать связь с друзьями и даже находить новых знакомых. Однако, за в...
К 2025 году, по оценкам Gartner, более 95% новых цифровых проектов будут развернуты на облачно-нативных платформах. В 2021 году таких было всего 30%. Согласно отчету компании Tigera (создатели ...
Приветствую, дорогие читатели, меня зовут Алексей Федулаев. Я работаю на позиции DevSecOps в компании Bimeister и делаю наши продукты безопаснее.Данная статья будем по мотивам моег...
Этот самодельный электровездеход имеет название «Восток», в честь первого космического корабля Советского Союза, который доставил первого космонавта на орбиту Земли. Это ...