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

## Паттерны декомпозиции на микросервисы <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»** (Проектирование на основе предметной области) - это методология и набор принципов и практик для проектирования сложных программных систем, сосредоточенных на предметной области бизнеса.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.system-analyst-base.ru/hard-skills/proektirovanie/arkhitektura/mikroservisy/patterny-realizacii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
