微服务设计模式:微服务之间的通信

时间:2021-03-23 13:16:37

标签: microservices

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

我想投资的另一件事是您如何在服务之间进行通信,这将解决您的大部分问题。我们和https://cytoscape.org/images/screenshots/edge_bundling3_1400px.png一起去了,我们很喜欢。