【问题标题】:Microservice design pattern: communication between microservices微服务设计模式:微服务之间的通信
【发布时间】:2021-06-20 03:41:57
【问题描述】:

我不太确定如何描述我的问题的标题,但我目前正在研究微服务设计模式,并阅读了一些微软文档和一些关于复数视觉的视频。我读到的是,重复数据并不是错误的模式。这意味着例如,如果我有一个保存用户数据的身份微服务和一个论坛微服务,那么从论坛微服务中的身份微服务中保存部分用户对象不是“错误的”,例如用户显示名称。 值得一提的是,这两个微服务都有自己的数据库。

我似乎无法找到的是,如果在示例中给定用户更改他/她的显示名称会怎样。我猜有两个选项:

  1. 不要存储显示名称和存储用户ID,并让论坛微服务调用身份微服务来检索显示名称。问题在于微服务数据库不相关,因此如果删除用户,您可能会出现奇怪的行为。
  2. 如果用户更改显示名称,则向论坛微服务触发事件以进行更新。例如,这可以通过消息总线来完成。

我认为消息总线(选项 2)是最合适的,但我想知道我是否可能缺少其他选项?

【问题讨论】:

    标签: microservices


    【解决方案1】:

    两者都有权衡,你可以很好地抓住主要问题,我想说的是你的直觉。

    出于您提到的某些确切原因,我会避免数据重复并仅存储密钥。然后,当只有一些数据发生变化时,您必须跨服务进行多次更新,但现在您必须在发生任何变化时检查所有依赖项。另外,现在您的数据实际上不是由其微服务管理,而是由一项或多项服务管理。

    如果它的数据改变了一堆,但其他服务也检索了一堆,你可以考虑缓存和设置一些发布/订阅机制。我知道这就是我们很快要研究的内容。我们所做的其他事情是在数据库之间设置 dblinks 并创建视图以更好地链接微服务后端的数据。这是为了绕过设置发布/订阅,它可以工作但有其自身的问题。

    我想说的另一件事是您的服务之间的通信方式,这将解决您的大部分问题。我们选择了protocol-buffers,我们喜欢它。

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2016-06-10
      • 2016-03-05
      • 2018-01-22
      • 1970-01-01
      • 2020-10-05
      • 2021-01-17
      • 2019-03-26
      • 2016-08-10
      相关资源
      最近更新 更多