https://gemini.google.com/app/7e8b60fee2bbdbc9
Вот #методичка, составленная на основе видео Максима Добрынина «Популярные шаблоны микросервисной архитектуры за 20 минут».
---
# Методичка: Практические #паттерны микросервисной архитектуры
## Введение
Многие популярные темы (например, Event Sourcing или SAGA) обсуждаются часто, но на реальных проектах встречаются реже, чем базовые шаблоны, обеспечивающие стабильность, безопасность и предсказуемость системы. В данном материале разобраны паттерны, которые критически важны для любого микросервисного решения.
---
## 1. API Gateway (Единая точка входа)
Решает проблему прямого взаимодействия клиента с множеством микросервисов.
* **Основные задачи:**
* **Единая точка входа:** Клиенту не нужно знать список URL и портов всех сервисов.
* **Абстракция инфраструктуры:** Клиент работает с логическими путями (endpoints), а не с адресами конкретных инстансов.
* **Безопасность:** Выносит аутентификацию на внешний уровень, защищая внутренние сервисы от неавторизованных запросов.
* **Балансировка:** Распределяет нагрузку между масштабируемыми экземплярами сервисов.
* **Типы Gateway (разделение по специализации):**
* **Web API Gateway:** Для браузеров (графических интерфейсов).
* **Mobile Gateway:** Специально оптимизированный для мобильных устройств (учитывает ограничения по передаче данных).
* **Public API Gateway:** Предоставляет API для внешних интеграций («back-end for back-end»).
---
## 2. Health Check API (Мониторинг состояния)
Неотъемлемый компонент для жизнеобеспечения микросервиса в экосистеме.
* **Зачем нужен:** Позволяет системе понимать, готов ли сервис (и его зависимости: БД, очереди, кэши) к обработке трафика.
* **Как работает:**
* Каждый сервис предоставляет специальный эндпоинт (`/health`), возвращающий статус здоровья всех зависимых компонентов.
* Внешняя система мониторинга опрашивает этот эндпоинт и принимает решение: направлять ли запросы на данный инстанс.
* **Результаты:**
* **Up:** Сервис работает нормально.
* **Out of Service:** Сервис временно недоступен или не готов к работе (не стоит направлять трафик).
* **Автоматизация:** При недоступности сервиса система может инициировать его перезапуск или масштабирование.
---
## 3. Access Token (Аутентификация и авторизация)
Основан на использовании **JWT (JSON Web Token)**.
* **Аутентификация:** Подтверждение того, что пользователь — тот, за кого себя выдает. Токен содержит данные об identity.
* **Авторизация:** Проверка прав доступа. В токен зашиваются роли пользователя.
* **Преимущества:**
* Удобство передачи по протоколу HTTP.
* Каждый микросервис может самостоятельно проверить токен (его подлинность и права пользователя) без обращения к центральному серверу аутентификации на каждый запрос.
* В случае нехватки прав (например, для выполнения админ-действий) сервис может вернуть ошибку `403 Forbidden`.
---
## 4. Идемпотентность (Idempotent Consumer)
Критически важна при асинхронном взаимодействии (через очереди сообщений) для предотвращения дублирования операций.
* **Проблема:** При сетевом сбое сервис-отправитель может повторно отправить запрос (Retry-паттерн), не зная, дошло ли первое сообщение. Это ведет к дублированию действий (например, двойному списанию средств).
* **Решение:**
* **Idempotency Key:** Клиент генерирует уникальный ключ для каждого запроса.
* **Проверка:** Консьюмер (получатель) сохраняет обработанные ключи в БД. При получении запроса он проверяет: если ключ уже есть в базе, запрос не обрабатывается повторно.
* **Результат:** Гарантия того, что бизнес-операция будет выполнена ровно один раз, даже при повторных сетевых вызовах.
---
**Источник:** [Популярные шаблоны микросервисной архитектуры за 20 минут](https://www.youtube.com/watch?v=6AVxBxcU2NQ)
