Architecture 微服务关系/依赖策略
我想了解一些关于处理跨微服务的数据依赖性和关系的两种不同解决方案的反馈 以这些服务为例: 简单地说,有银行服务和账户服务。帐户服务保存帐户,并始终使用银行ID连接到银行 困境在于如何处理和验证这种关系和bankId以及每个决策的利弊 选项1: 完全忽略验证。如果给定的银行ID是现有ID,则针对帐户的POST/PATCH将永远不会验证 专业人士Architecture 微服务关系/依赖策略,architecture,microservices,Architecture,Microservices,我想了解一些关于处理跨微服务的数据依赖性和关系的两种不同解决方案的反馈 以这些服务为例: 简单地说,有银行服务和账户服务。帐户服务保存帐户,并始终使用银行ID连接到银行 困境在于如何处理和验证这种关系和bankId以及每个决策的利弊 选项1: 完全忽略验证。如果给定的银行ID是现有ID,则针对帐户的POST/PATCH将永远不会验证 专业人士 服务彼此不了解,它们之间没有硬依赖关系,如果一个服务宕机,另一个也不会停止工作。(哪个是大的) 缺点 如果银行标识不正确,则帐户“丢失”,无法访问
- 服务彼此不了解,它们之间没有硬依赖关系,如果一个服务宕机,另一个也不会停止工作。(哪个是大的)
- 如果银行标识不正确,则帐户“丢失”,无法访问
- 报告服务和/或任何读者必须解释丢失或不正确的银行,并在不崩溃的情况下提供其拥有的任何数据
- 100%数据完整性
- 读者不需要处理和期待破裂的关系
- 服务是紧密依赖的,您可能会争辩说,它们不再是合适的微服务,也可能是单一服务
- 绩效受到负面影响
- AccountService发布/修补程序将不起作用如果BankService关闭,GET仍将起作用
- 100%数据完整性
- 读者不需要处理和期待破裂的关系
- 没有可测量的负面绩效影响
- 复杂性增加
- 由于事件的异步性质,我们不能假设银行的只读副本已100%更新。创建银行实体后,快速连续发布/修补帐户可能会失败
- AccountService获得了更多关于其他服务的知识,尽管它是一个松散的依赖项
你对此有何经验、看法和想法?你会怎么做?你会选择哪种策略?这一种策略是基于观点的,这里没有正确或错误的答案(实际上不是正确的,有很多错误的答案,但也有很多正确的答案)。这实际上取决于您的用例。就个人而言,我倾向于更松散的耦合,直到我需要更强的耦合 我最喜欢的模式是为银行ID输入URL,而不是数字。这将为您提供一个指向银行的指针,而不必知道另一个服务的内部结构的细节
如果以后您决定需要ID,您可以解析所有URL并收集ID,也可以在运行时这样做。关键是,您还不必知道这一点,除非您已经有了这些数据的使用用例,否则不要将其耦合起来。首先,您选择的选项将取决于您的业务需求