Join 微服务(应用程序级连接)更多API调用-导致更多延迟?
我有两个微服务,一个用于Join 微服务(应用程序级连接)更多API调用-导致更多延迟?,join,architecture,microservices,decoupling,Join,Architecture,Microservices,Decoupling,我有两个微服务,一个用于订单,一个用于客户 与下面的示例完全相同 没有任何问题。 我可以根据输入的客户ID列出客户数据和订单数据 但是现在有了开发新屏幕的新要求 其中显示输入日期的订单,并在每个订单信息旁边显示客户名称 在执行时 我可以获取输入日期的订单列表 但要根据客户ID列表显示相应的客户名称 我对Customermicroservice进行多个API调用,每个调用发送CustomerId以获取CustomerName 这会导致更多的延迟 我知道上述解决方案不好 有什么想法吗?微服务体系
订单
,一个用于客户
与下面的示例完全相同
没有任何问题。
我可以根据输入的客户ID列出客户数据和订单数据 但是现在有了开发新屏幕的新要求
其中显示输入日期的
订单
,并在每个订单
信息旁边显示客户名称
在执行时我可以获取输入日期的
订单列表
但要根据客户ID列表显示相应的客户名称
我对Customer
microservice进行多个API调用,每个调用发送CustomerId
以获取CustomerName
这会导致更多的延迟
我知道上述解决方案不好
有什么想法吗?微服务体系结构的要点是将您的问题域划分为(技术上、组织上和语义上)独立的部分。使“微服务”美化(简化)表实际上产生的问题比它解决的问题还要多,如果它解决了任何问题的话
以下是首先要做的几件事:
- 列出架构约束(即执行微服务的原因)。它是独立的扩展能力、组织问题、使团队独立等吗
- 列出问题域中与业务相关的边界(即理论上不需要彼此工作或不需要同步通信的部分)
根据这些信息,以下是解决问题的几种方法:
根据业务边界而不是技术边界来重组服务。这意味着不使用表、层或其他技术工具来拆分函数。服务应该是问题域的一个完整的垂直部分
或者作为一种解决办法,创建第三个系统来聚合数据并创建报告
或者,如果您发现实际上没有理由继续使用微服务方法,请按照您习惯的方式进行
新需求需要来自跨领域的数据
以下是方法
在每次通话中更新客户Id和姓名。问题是延迟
会有多次往返
在订单服务中缓存所有ID为的CustomerName(我是
假设客户有限),问题是何时刷新
缓存或使缓存无效,为此,您可能需要公开一些
rest调用以使字段无效。适用于新客户,而这些新客户不是
缓存中存在从数据库中获取和更新缓存以备将来使用。)
使用CQRS的方式,将所有需要的数据(订单、客户等)放到一个单独的表中。现在,在这个模式中,您可以创建一个复合SQL查询。这将删除往返行程等