| Плюсы | Минусы |
|---|---|
| Изоляция данных. У каждого микросервиса своя база данных. Им не нужно конкурировать за ресурсы. | Более сложное управление. Приходится управлять множеством баз данных. Это усложняет администрирование. |
| Автономность. Микросервисы можно развернуть и масштабировать независимо друг от друга. | Сложно добиться согласованности. Может быть трудно поддерживать согласованность данных между микросервисами. |
| Гибкость. Можно использовать разные типы баз данных для разных микросервисов и ориентироваться на их потребности. |
| Плюсы | Минусы |
|---|---|
| Чёткие зоны ответственности. Каждая команда отвечает за свои микросервисы. Это упрощает управление и улучшает качество. | Возможны конфликты. Несогласованность между командами может привести к проблемам в интеграции и взаимодействии микросервисов. |
| Гибкость. Команды могут самостоятельно выбирать технологии и инструменты, которые лучше всего подходят для их задач. | Различия в технологиях. Использование разных технологий может усложнить интеграцию и поддержку системы. |
| Улучшение коммуникаций. В небольших командах проще выстраивать коммуникацию. А ещё можно быстрее принимать решения. |
| Плюсы | Минусы |
|---|---|
| Полная история изменений. Можно воспроизвести любое состояние объекта в любой момент времени. | Сложность реализации. Требует сложной логики для управления событиями и воспроизведения состояния. |
| Гибкость. Легко добавлять такие функциональности, как аудит и аналитика. | Рост объёма данных. Сохранение всех событий может значительно увеличить объём данных. |
| Повышенная согласованность. Обеспечивает согласованность данных, так как все изменения фиксируются в виде событий. |
Courier и Order, а также сущности Event, которая представляет события. Courier генерирует события. Например, когда курьер начинает свою смену, создаётся событие CourierShiftStarted, когда курьер принимает заказ — событие OrderAssigned и так далее. Эти события влияют на состояние заказов, которые хранятся в сущности Order.Event с указанием типа события, времени его возникновения и дополнительных данных. Это позволяет воспроизвести любое состояние курьера или заказа в любой момент времени.| Плюсы | Минусы |
|---|---|
| Улучшенная наблюдаемость. Позволяет проследить полный путь запроса — через все микросервисы, участвующие в обработке. | Сложность реализации. Нужно настроить и интегрировать инструменты для отслеживания запросов. |
| Диагностика проблем. Облегчает поиск и устранение проблем производительности и ошибок. | Дополнительные накладные расходы. Внедрение трейсинга может увеличить накладные расходы на обработку запросов. |
| Оптимизация производительности. Позволяет выявлять и устранять узкие места в системе. |
| Плюсы | Минусы |
|---|---|
| Безопасность и соответствие. Позволяет соответствовать нормативным требованиям и стандартам безопасности. | Объём данных. Ведение журналов аудита может значительно увеличить объём данных. |
| Отслеживание изменений. Обеспечивает прозрачность всех изменений в системе — их можно отследить. | Управление и хранение. Нужно организовать хранение журналов и управлять большими объёмами данных. |
| Решение инцидентов. Помогает расследовать инциденты безопасности и устранять их причины. |
Courier) выполняет действие — например, принимает или завершает заказ.AuditLog).| Плюсы | Минусы |
|---|---|
| Автоматизация подключения. Микросервисы автоматически находят друг друга, упрощая управление связями. | Сложно настроить. Нужно настроить систему обнаружения и управлять ею. |
| Гибкость и масштабируемость. Легко добавлять и удалять микросервисы. Для этого не нужно менять конфигурации. | Задержки. Процесс обнаружения может добавить в коммуникации небольшие задержки. |
| Устойчивость к сбоям. В случае сбоя микросервиса паттерн обеспечивает возможность динамического переключения на доступные микросервисы. |
| Плюсы | Минусы |
|---|---|
| Безопасность. Обеспечивает сквозное шифрование и управление доступом между микросервисами. | Сложно внедрить. Нужно приложить много усилий, чтобы настроить Service Mesh и управлять им. |
| Наблюдаемость. Предоставляет детализированные метрики, трассировку и логи для мониторинга и диагностики. | Производительность. Добавляет дополнительные накладные расходы на обработку сетевых запросов. |
| Управляемость. Позволяет централизованно управлять политиками и конфигурациями сети микросервисов. |
| Плюсы | Минусы |
|---|---|
| Централизованное управление. Обеспечивает централизованное хранение и управление информацией о микросервисах. | Единая точка отказа. Реестр может стать единой точкой отказа, если не обеспечить его надёжность. |
| Упрощение управления. Легко добавлять, удалять и обновлять микросервисы в реестре. | Зависимость. Все микросервисы зависят от доступности реестра. |
| Интеграция с другими системами. Можно интегрировать реестр с системой обнаружения сервисов и другими инструментами управления. |
YAML
@startuml
package "Courier Service" {
[Courier Database]
}
package "Order Service" {
[Order Database]
}
package "Location Service" {
[Location Database]
}
[Courier Service] --> [Courier Database]
[Order Service] --> [Order Database]
[Location Service] --> [Location Database]
@enduml YAML
@startuml
package "Team A" {
[Courier Service]
}
package "Team B" {
[Order Service]
}
package "Team C" {
[Location Service]
}
@enduml CourierShiftStarted, а когда курьер принимает заказ — событие OrderAssigned.YAML
@startuml
entity Courier {
* id : UUID
* name : String
* status : String
}
entity Event {
* id : UUID
* type : String
* timestamp : Date
* data : JSON
}
entity Order {
* id : UUID
* courierId : UUID
* status : String
* deliveryTime : Date
}
Courier --> Event : generates
Event --> Order : affects
@enduml