Sobes.tech
Назад к вопросам
Junior — Middle
44

Можешь ли ты перечислить основные паттерны проектирования микросервисов?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

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 — у каждого сервиса своя база данных, чтобы сохранить независимость и автономность.