microservices - 微服务之间的循环依赖是一种反模式吗?
问题描述
说我有user-accounts
服务和profiles
服务。如果profiles
服务需要来自user-accounts
服务的数据进行某些计算,这意味着profiles
服务依赖于user-accounts
服务。
现在,假设正在为user-accounts
服务实现附加功能。此功能需要来自profiles
服务的数据。
这将创建一个循环依赖,因为每个服务都依赖于另一个。这被认为是有害的吗?
在微服务之间引入循环依赖有哪些替代方法?最好添加一项额外的服务来充当经纪人吗?
解决方案
我会尽量避免这种情况。就我个人而言,我尽量避免完全耦合微服务,而更多地依赖编排和/或事件编排。
以下是您可能能够避免的一些方法:
- 组合
user-accounts
并profiles
作为单个微服务。如果它们密切相关,那么您的服务粒度可能略有错误。 - 创建一个更高级别的编排层,用于编排 和 之间的
user-accounts
调用profiles
。 - 根据您的具体情况,您可能能够编排 和 之间的
user-accounts
事件profiles
。一个服务可能会发布事件,而另一个服务订阅这些事件。您可以在这种类型的架构中使用像 RabbitMQ 这样的消息代理。
IMO 没有绝对正确的答案 - 这些只是一些一般指导方针 - 这实际上取决于您的具体情况......
推荐阅读
- python - 电报机器人错误。TypeError:“NoneType”对象不可订阅
- java - 问题:返回 ResponseEntity 类型的 Flux
- git - 本地 Git 服务器——突然无法推送/拉取/克隆
- amazon-web-services - AWS SQS 服务可以触发 API Gateway 代理吗?
- python - 一类 svm 分类错误:分类指标无法处理未知目标和二元目标的混合
- android - 弹出菜单的Android setIcon函数不显示我的drawable
- arrays - 如何使用 MPI 发送整数数组并计算它们的阶乘?
- postgresql - 并发查询给出意外数据
- kotlin - 在 Ktor 中构建 URL
- r - 在 RBookdown 中创建“在此页面上”部分