Какие знаешь паттерны для проектирования распределенных систем

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

Ответ

В распределенных системах часто применяют следующие паттерны:

  • Ambassador – прокси-сервис для оффлоада логики (например, мониторинг, логирование). Пример: sidecar-контейнер в Kubernetes.
  • CQRS – разделение на команды (запись) и запросы (чтение) для масштабируемости.
  • Saga – управление распределенными транзакциями через цепочку событийных компенсаций.
  • Event Sourcing – хранение изменений состояния как последовательности событий.
  • Circuit Breaker – защита от каскадных сбоев (например, Hystrix).

Пример Circuit Breaker на псевдокоде:

if failure_rate > threshold:  
    state = "OPEN"  # Блокируем вызовы  
    return cached_response  

Также полезны Retry, Backpressure, Sharding. Выбор зависит от требований к согласованности, отказоустойчивости и задержкам.