> For the complete documentation index, see [llms.txt](https://docs.system-analyst-base.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.system-analyst-base.ru/hard-skills/proektirovanie/arkhitektura/mikroservisy/patterny-realizacii.md).

# Паттерны реализации

## Паттерны декомпозиции на микросервисы <a href="#paragraph-1" id="paragraph-1"></a>

1. **Decompose By Business Capability** - это шаблон микросервиса, основанный на разделении системы на модули или компоненты, каждый из которых отвечает за определенную бизнес-возможность. Этот подход позволяет уменьшить сложность системы, улучшить ее масштабируемость и обеспечить гибкость в изменении требований бизнеса.
2. **Decompose By Subdomain** - этот шаблон микросервиса предполагает разделение системы на множество подсистем, каждая из которых соответствует определенной предметной области или домену. Этот подход помогает улучшить модульность системы, уменьшить сложность и улучшить производительность. Шаблон основан на концепциях предметно-ориентированного проектирования ([Domain-Driven Design, DDD](#user-content-fn-1)[^1]).

## Паттерны управления данными в микросервисной архитектуре

1. **Database Per Service** - это шаблон микросервиса, в котором каждый сервис имеет свою собственную базу данных, что позволяет улучшить масштабируемость, доступность и изоляцию данных. Этот шаблон подходит для систем со множеством сервисов и большим объемом данных, требующих высокой производительности и гибкости.
2. **Command Query Responsibility Segregation (CQRS)** - это шаблон микросервисов для разделения команд (Commands) и запросов (Queries). Он разделяет процессы обработки команд, изменяющих состояние системы, и процессов обработки запросов, возвращающих текущее состояние системы. CQRS позволяет увеличить масштабируемость и гибкость системы, а также улучшить ее производительность и удобство использования.
3. **Event Sourcing** - это шаблон архитектуры микросервисов, основанный на сохранении и обработке хронологического списка событий, которые приводят к изменению состояния системы. Он используется в системах, где требуется высокая степень гибкости и возможности восстановления состояния, а также для реализации CQRS (Command Query Responsibility Segregation) и Event-based Architectures.
4. **Saga Pattern** - это шаблон архитектуры микросервисов, используемый для обработки сложных бизнес-транзакций, состоящих из нескольких независимых шагов. Он координирует выполнение шагов в нужной последовательности и обрабатывает возникающие ошибки, гарантируя тем самым успешное завершение всей транзакции.

## Паттерны коммуникации микросервисов

1. **API Gateway** - это шлюз, который направляет запросы от внешних приложений или сервисов к внутренним API. Он обеспечивает централизованную обработку всех входящих запросов, позволяя микросервисам не отвлекаться на управление доступом. API Gateway также может кэшировать ответы сервисов для повышения производительности и безопасности системы.
2. **Backends for Frontends (BFF)** - это шаблон микросервиса, предназначенный для оптимизации взаимодействия между интерфейсами (фронтендами) и внутренними сервисами. BFF обеспечивает единую точку доступа для фронтендов, упрощает интеграцию с различными бэкендами и улучшает масштабируемость системы в целом.

## Паттерны обнаружения сервисов в микросервисной архитектуре <a href="#paragraph-6" id="paragraph-6"></a>

1. **Service Registry** - это шаблон проектирования архитектуры микросервисов, который используется для регистрации и обнаружения сервисов в системе. Он предоставляет механизм для хранения информации о доступных сервисах, их местоположении и поддерживаемых операциях. Service Registry позволяет другим микросервисам находить нужные им сервисы и взаимодействовать с ними, уменьшая сложность и повышая масштабируемость системы.

## Паттерны повышения отказоустойчивости <a href="#paragraph-8" id="paragraph-8"></a>

1. **Circuit Breaker** - шаблон проектирования архитектуры микросервисов, предназначенный для управления ошибками и обеспечения стабильности системы. Он позволяет изолировать группы зависимых операций, чтобы предотвратить распространение ошибок между сервисами. Circuit Breaker анализирует количество и длительность сбоев в определенном сервисе и автоматически переключает его в режим “break” или “reset”, регулируя таким образом поток запросов к ненадежным сервисам.
2. **Bulkhead Pattern** - шаблон микросервиса, который разделяет систему на логические разделы (модули или компоненты) и обеспечивает изоляцию сбоев между ними. Он гарантирует, что в случае сбоя одного модуля другие продолжат работать, предотвращая тем самым распространение ошибок и обеспечивая стабильность системы.

Источники:

* <https://cloud.vk.com/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki> (подробнее: ru)
* <https://microservices.io/patterns/index.html> (подробнее: eng)

[^1]: **DDD означает «Domain-Driven Design»** (Проектирование на основе предметной области) - это методология и набор принципов и практик для проектирования сложных программных систем, сосредоточенных на предметной области бизнеса.
