Какие микросервисные паттерны ты знаешь?

«Какие микросервисные паттерны ты знаешь?» — вопрос из категории Паттерны, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При проектировании микросервисных архитектур я применяю следующие ключевые паттерны для решения типичных проблем распределенных систем:

  • API Gateway: Единая точка входа для клиентов, которая занимается маршрутизацией, аутентификацией, ограничением скорости запросов (rate limiting) и иногда агрегацией данных из нескольких сервисов. На практике использовал Kong и написание кастомных шлюзов на Go.
  • Service Discovery & Registry: Паттерн для динамического обнаружения сетевых расположений сервисов. Работал с Consul и etcd, где сервисы при старте регистрируются, а при обращении к другим сервисам клиент сначала запрашивает их актуальный адрес у registry.
  • Circuit Breaker («Предохранитель») : Защищает систему от каскадных сбоев. При повторных ошибках вызова удаленного сервиса «предохранитель» размыкается, и дальнейшие вызовы мгновенно завершаются ошибкой, давая целевой системе время на восстановление. Реализовывал с помощью библиотеки Resilience4j.
  • Saga: Паттерн для управления распределенными транзакциями. Вместо одной ACID-транзакции используется последовательность локальных транзакций в разных сервисах, каждая из которых публикует событие для запуска следующего шага. При ошибке выполняются компенсирующие транзакции (rollback).
  • CQRS (Command Query Responsibility Segregation): Разделение моделей для записи (команды) и чтения (запросы). Это позволяет независимо масштабировать и оптимизировать операции чтения, например, используя денормализованное представление данных в отдельной БД.
  • Event Sourcing: Хранение состояния приложения как последовательности событий. Все изменения фиксируются в immutable event store. Это дает полный аудит, позволяет воспроизводить состояние на любой момент времени и является естественной основой для интеграции сервисов через события.