Microservice
По определению Фаулера архитектурный стиль микросервисов - это подход, при котором единое приложение строится как набор небольших сервисов, каждый из которых работает в собственном процессе и коммуницирует с остальными используя легковесные механизмы, как правило HTTP. Эти сервисы построены вокруг бизнес-потребностей и развертываются независимо с использованием полностью автоматизированной среды.
В микросервисной архитектуре границы между сервисами (модулями) выносятся на уровень инфраструктуры, что позволяет лучше их контролировать, поддерживая слабую связанность и высокую сочетаемость (Low Coupling и High Cohesion).
В монолитах же все модули работают в рамках одного процесса, на одной машине. С течением времени под напором постоянно изменяющихся требований становится труднее сохранять хорошую модульную структуру. В монолите проще срезать угол, нарушить границы модулей, создавать новые связи между ними. Приложение начинает быть похожим на большой комок грязи (big ball of mud), где все связано со всем.
Область применения¶
Микросервисы хорошо подходят для сценариев со слабой интеграцией данных и высокой динамикой процессов
Разделение системы на микросервисы¶
При разбиении на микросервисы нужно стремиться к автономности, а не к размеру. Микро это не про размер.
Если упираемся в ресурсы или команду.
Причины популярности¶
Монолиты это приложения с большой сложностью внутри, требующие специалистов высокой квалификации сервисы в MSA относительно простые в отдельности, но образуют сложную динамическую систему. В MSA нужно несколько человек архитекторов высоких компетенций, и можно иметь основную массу инженеров выпускников курсов. К этому бизнес стремится. Хороших инженеров мало, а рабочих рук нужно много.
Отличие от SOA¶
В SOA допускается доступ к одной БД из разных сервисов. В микросервисной архитектуре каждый микросервис работает только со своей БД.
В микросервисах фокус смещается с reuse и composition на independence, replaceability и autonomy.
SOA реализует идею share-as-much-as-possible, микросервисы в свою очередь – share-as-little-as-possible.