В последнее время я много читал о микро-услугах, и вот некоторые из выводов, которые я сделал до сих пор (пожалуйста, исправьте меня, если я ошибаюсь в любой момент).
- Архитектура микросервисов хорошо сочетается с дизайном, управляемым доменом. Обычно одна MS представляет один ограниченный контекст.
- Если микро-сервис A требует функциональности, которая находится в микро-сервисе B , моя модель, вероятно, ошибочна, и A и B должны фактически быть одним микро-сервисом / BC.
- Синхронная связь между микро-сервисами (прямые HTTP-запросы) является плохой, потому что она не соответствует назначению микро-сервисов и вводит связь между компонентами.
- Асинхронная связь между службами желательна. Службы должны публиковать события в очереди сообщений, чтобы другие службы могли подписаться и обработать свою часть события или использовать ее для репликации части данных, необходимых для их контекста. Таким образом, сервисы могут обрабатывать запросы, даже если другие сервисы не работают, что было бы невозможно при синхронной связи.
- Если микросервис A публикует событие, микросервис B подписывается на это событие и создает новое событие в качестве результата, микросервис A не должен быть тем, который обрабатывает вновь созданное событие, потому что это будет циклическая зависимость. В этом случае мы должны ввести третий микросервис или объединить A и B в микросервис AB .
- Микро-сервис на самом деле вводит в заблуждение термин. Мы должны стремиться к маленькому контексту, но это не обязательно так. Термин не должен быть «микро-сервис», но « достаточно большим, чтобы сделать работу сервис ».
- Микро-сервисы позволяют нам вводить новые функции с большей легкостью и не опасаясь, что мы сломаем всю систему. Это можно сделать, введя новый сервис или реорганизовав один из существующих.
- Каждый микросервис должен иметь свое собственное хранилище данных. Репликация / дублирование данных является желательным поведением в этой архитектуре.
Помимо подтверждения моего понимания этой архитектуры, моя другая часть вопроса в основном связана с обнаружением сервисов. Если сервисы взаимодействуют асинхронно и используют центральную очередь событий, такую как amazon SQS, означает ли это, что обнаружение сервисов не имеет своего места в подобной архитектуре?
Службы не должны иметь никаких знаний о других службах в системе. Они знают только свой контекст и события, которые они должны опубликовать или подписаться?