> 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.md).

# Микросервисы

{% hint style="info" %}
**Микросервисы (Microservices)** – это архитектурный подход к разработке программного обеспечения, при котором приложение строится как набор небольших, автономных и независимых сервисов, работающих вместе для решения бизнес-задач.
{% endhint %}

<figure><img src="/files/KfslHuqsZyMzKr50Zer3" alt="" width="563"><figcaption><p>Схематичное представление микросервисного приложения</p></figcaption></figure>

Основные характеристики микросервисной архитектуры:

1. **Разделение на автономные сервисы:** В микросервисной архитектуре приложение разбивается на небольшие сервисы, каждый из которых отвечает за определенный функционал. Каждый сервис разрабатывается, развертывается и масштабируется независимо от других сервисов. Это позволяет командам разработчиков работать параллельно и обновлять только необходимые сервисы без необходимости вносить изменения во всё приложение.
2. **Коммуникация через сетевые протоколы:** Микросервисы взаимодействуют друг с другом через сетевые протоколы, такие как HTTP, REST, messaging и другие. Каждый сервис может иметь свой собственный API и использовать выбранный протокол для взаимодействия с другими сервисами. Это позволяет легко интегрировать различные сервисы и расширять функциональность системы.
3. **Самостоятельность и независимость:** Каждый микросервис может быть разработан, развернут и масштабирован независимо от других сервисов. Это дает возможность использовать разные технологии, языки программирования и базы данных для каждого сервиса в зависимости от его требований. Каждый сервис также может быть масштабирован отдельно, чтобы справиться с изменяющейся нагрузкой.
4. **Легкая заменяемость и гибкость:** В микросервисной архитектуре каждый сервис может быть заменен или модифицирован без значительных изменений в остальной системе. Это позволяет более гибко реагировать на изменения требований и обеспечивать легкую масштабируемость.

## Преимущества микросервисной архитектуры

* **Масштабируемость**

Если какой-то сервис испытывает повышенную нагрузку, вы можете масштабировать только этот сервис, не затрагивая другие части приложения.

* **Гибкость и независимость разработки**

Разработчики могут использовать разные технологии и практики для каждого сервиса в зависимости от его конкретных потребностей.

* **Легкость замены и обновления**

Замена или обновление одного микросервиса не влияет на остальные части приложения.

## Недостатки микросервисной архитектуры

* **Сложность управления**

Управление множеством независимых сервисов может быть сложным. Необходимы инструменты для мониторинга, развертывания и управления версиями.

* **Затраты на межсервисное взаимодействие**

Микросервисы взаимодействуют между собой через сеть, что может вести к дополнительным накладным расходам и ухудшению производительности.

* **Сложность обеспечения целостности данных**

При наличии множества сервисов, управление целостностью данных становится сложным и возникают проблемы с согласованностью, и обменом данных между сервисами.

* **Высокие затраты на начальное развертывание**

Создание инфраструктуры для микросервисной архитектуры, включая системы управления контейнерами и может потребовать значительных временных и финансовых затрат.

## **Ситуации, когда лучше подойдет микросервисная архитектура приложения**

1. Ваше приложение представляет собой совокупность слабо связанных друг с другом функций или сервисов (яркие примеры - мобильные банки, Яндекс Go), где каждый сервис может развиваться независимо.
2. Сервисы и функции вашего приложения регулируются разными заказчиками или бизнес подразделениями.
3. Вы пришли к тому, что ваше текущее монолитное приложение написано сложно, неоптимально и, возможно, на устаревшем стеке, так что что его сопровождение и развитие стоит очень дорого. Вы решаете, что нужно постепенно выделять из него функции, проверять их и начинать эксплуатировать.
4. Сервисы вашего приложения имеют разные нефункциональные требования и обеспечивать соответствие им всему приложению дорого и сложно.

Исчтоники:

* <https://testengineer.ru/microservices/>
* <https://vc.ru/dev/922352-monolitnaya-vs-mikroservisnoy-arhitektury>
* <https://speca.school/monolit-vs-mikroservisy>
