如何设计网络跳数较少的微服务

时间:2017-11-23 18:48:51

标签: microservices

我们有几个微服务A和B,每个都是一个独立的模块,有自己的代码和自己的数据库,C *和Oracle。

服务B有多个表 - T1,T2,T3。

对于服务A中的每个POST请求,它必须联系服务B以仅从表T1获取一些元信息。由于服务A处于关键路径并且流量非常大,因此从服务B获取每个POST呼叫的信息将成为瓶颈。

我在考虑两个选项:

  1. 在服务A上缓存服务B中托管的数据,因此可以从缓存中获取信息,因为它会更快 - 强一致性是另一个业务需求,我们可能会使用缓存中的陈旧数据
  2. 将T1中的信息完全移动到服务A,这样它就不必进行网络跳转 - 这种方法的问题是服务B在数据创建过程中具有事务边界,这将影响T1,T2,T3所以所有服务B中的数据应该保持在一起。
  3. 有没有更好的方法来设计这种仍然能够扩展的高一致性系统?

    谢谢和问候

1 个答案:

答案 0 :(得分:0)

一种选择是使用事件。

当服务B更改表T1中的数据时,它会引发域事件(将消息发布到消息代理或服务总线)。

服务A订阅该事件。当它收到消息时,它会更新表T1的本地副本。它不是记录系统,但它始终是最新的(在代理/总线的延迟和处理消息队列的时间内)。然后,当服务A需要数据时,它从本地T1提供服务。

有关此技术和其他技术的更多详细信息,请参阅Randy Shoup的Managing Data in Microservices,特别是有关微服务技术:共享数据的部分。