微服务(应用程序级连接)有更多的API调用-导致更多的延迟吗?

时间:2018-07-22 09:04:20

标签: join architecture microservices decoupling

我有2个微服务,一个是Orders,另一个是Customers
就像下面的例子一样
http://microservices.io/patterns/data/database-per-service.html
enter image description here

可以正常工作的
我可以根据输入Customers

列出Orders数据和CustomerId数据

但是现在有开发新屏幕的新要求
其中显示了Orders输入的日期,并在每个CustomerName信息旁边显示了Order

实施时
我可以获取输入日期Orders的列表
但是要根据CustomerNames的列表显示相应的CustomerIds
我对Customer微服务进行了多次API调用,每次调用都发送CustomerId以获得CustomerName
这导致我们更多的延迟

我知道以上解决方案都是不好的解决方案
有什么想法吗?

2 个答案:

答案 0 :(得分:1)

微服务架构的重点是将您的问题域分为(技术上,组织上和语义上)独立的 部分。如果“微服务”表可以解决任何问题,那么实际上会产生比其解决的问题更多的问题。

首先要做的几件事:

  • 列出架构约束(即进行微服务的原因)。是否具有独立的扩展能力,组织问题,使团队独立等?
  • 列出问题域中与业务相关的边界(即,理论上不需要彼此工作或不需要同步通信的部分)。

有了这些信息,以下是解决问题的几种方法:

  1. 基于业务边界而不是技术边界来重组服务。这意味着使用表或图层或其他技术资料来拆分功能。服务应该是问题域的完整垂直部分。
  2. 或者作为变通方法,创建第三个系统,该系统聚集数据并可以创建报告。
  3. 或者,如果您发现实际上没有理由保留微服务方法,只需按照习惯的方式进行即可。

答案 1 :(得分:1)

新需求需要跨域数据

下面是方法

  1. 在每个呼叫中​​更新客户ID和姓名。问题是延迟 会有多次往返

  2. 在Order Service中具有ID为ID的所有CustomerName的缓存(我是 假设有一个有限的客户)。问题将是,何时刷新 缓存或使缓存无效,为此,您可能需要公开一些 休息电话使字段无效。对于不是的新客户 在缓存中去并从数据库中获取并更新缓存以供将来使用。 )

  3. 使用CQRS方式,其中所有需要的数据(订单客户等)进入单独的表。现在,在此架构中,您可以创建一个复合SQL查询。这将消除往返等...