Можешь ли ты перечислить основные паттерны проектирования микросервисов?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Нужно показать, что микросервисы проектируют не “набором модных слов”, а через конкретные архитектурные паттерны под надежность, масштабирование и независимую поставку. Обычно ожидают, что будут названы базовые паттерны вроде API Gateway, Service Discovery, Circuit Breaker, Saga и Event-Driven Communication. Хорошо, если будет понятно, зачем каждый из них нужен и какие проблемы решает.
Определение:
Паттерны проектирования микросервисов — это типовые архитектурные решения, которые помогают строить систему из независимых сервисов так, чтобы она была масштабируемой, отказоустойчивой и удобной в сопровождении. Они описывают, как сервисы общаются, как находят друг друга, как обрабатывают сбои, как согласуют данные и как разделяют ответственность.
Пример использования:
Например, интернет-магазин можно построить так: API Gateway принимает запросы от клиента и маршрутизирует их в нужные сервисы, Service Discovery помогает сервисам находить друг друга, а Saga управляет заказом, оплатой и складом как цепочкой локальных транзакций.
# Упрощенный пример идеи Saga в Python:
# каждый шаг выполняется отдельно, при ошибке вызываются компенсирующие действия
def reserve_stock(order_id):
print(f"Резервируем товар для заказа {order_id}")
def charge_payment(order_id):
print(f"Проводим оплату для заказа {order_id}")
raise Exception("Ошибка оплаты")
def release_stock(order_id):
print(f"Снимаем резерв для заказа {order_id}")
def create_order(order_id):
try:
reserve_stock(order_id)
charge_payment(order_id)
print("Заказ успешно создан")
except Exception as e:
print(f"Ошибка: {e}")
release_stock(order_id)
print("Выполнена компенсация")
create_order(101)
Пояснение кода:
Код показывает идею паттерна Saga без распределенной инфраструктуры. Сначала выполняется резервирование склада, затем оплата. Если на этапе оплаты возникает ошибка, вызывается компенсирующее действие — снятие резерва. Это позволяет не держать длинную распределенную транзакцию и сохранять согласованность через последовательность локальных операций и компенсаций.
Ключевые моменты:
- API Gateway — единая точка входа для клиентов, скрывает внутреннюю структуру сервисов.
- Service Discovery — сервисы находят друг друга динамически, без жестко прописанных адресов.
- Circuit Breaker — защищает систему от каскадных отказов при сбоях зависимого сервиса.
- Saga — согласует бизнес-процесс через набор локальных транзакций и компенсаций.
- Event-Driven Communication — сервисы обмениваются событиями через брокер, уменьшая связность.
- Database per Service — у каждого сервиса своя база данных, чтобы сохранить независимость и автономность.