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

{% 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>


---

# 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.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.
