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查询。这将删除往返行程等