6

我正在开发一个具有微服务架构的网站,每个服务都拥有一个数据库。数据库存储微服务需要的数据。


Post,Video服务需要用户信息,所以两个服务都订阅了NEW_USER_EVENT.

NEW_USER_EVENT在有新用户注册时触发。

在此处输入图像描述

一旦服务接收到NEW_USER_EVENT,他们将传入的用户信息放到他们自己的数据库中。所以他们可以在不询问User服务的情况下做事。

在此处输入图像描述

到目前为止,一切都很好。但问题来了:

  • 如果我要创建一个新服务怎么办?如何获取注册用户信息并将其放入新服务中?

也许我可以从现有服务中获取信息。但事件是由消息队列 ( NSQ) 推送的。

如果我要从其中一个微服务中复制数据,我如何确定哪个服务具有最新的用户信息?(因为有些服务没有收到最新的事件

在此处输入图像描述


阅读更多:

微服务最难的部分:你的数据

微服务简介,第 4 部分:依赖关系和数据共享

4

1 回答 1

3

如果我要创建一个新服务怎么办?如何获取注册用户信息并将其放入新服务中?

您必须重播从一开始就订阅了此新服务的所有事件(您应该有一个“事件存储”来保存应用程序中已经发生的所有事件)。此外,您可以通过从最近的事件开始并及时返回来在重播事件时添加一些更智能的逻辑。这样,您将能够首先恢复最有价值的数据。请注意正确处理相互依赖的事件。

数据源:事件由消息队列(NSQ)推送,如果我要从其中一个微服务中复制数据,如何确保复制源具有最新的用户信息?

不是在谈论做备份,对吧?

除了备份之外,在事件驱动的系统中,人们通常不会以经典的方式逐行复制数据。相反,他们只是从一开始就重播事件存储中的事件,并将这些事件提供给新服务(或新实例)的事件处理程序。结果,新服务最终与系统的其他部分保持一致。

于 2017-01-05T00:14:10.400 回答