2017-01-03 237 views
4

我正在开发一个带有微服务架构的网站,并且每个服务都拥有一个数据库。数据库存储微服务所需的数据。如何将数据库与微服务(和新服务)同步?


PostVideo服务需要的用户信息,所以无论是服务的订阅的NEW_USER_EVENT

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

enter image description here

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

enter image description here

到目前为止好。但问题来了:

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

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

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

enter image description here


阅读更多:

The Hardest Part About Microservices: Your Data

Intro to Microservices, Part 4: Dependencies and Data Sharing

+0

为什么“帖子”和“视频”以及其他服务需要了解用户创建?如果请求到达与那些服务从未听说过的用户有关,则他们不需要验证用户是否存在......他们可以简单地假定用户必须确实存在,否则他们将不会收到与用户。 –

+0

@Michael这些服务收到了'username',他们会将它转换为'user_id',而不要求'User'服务进行松耦合。当新用户注册后,服务会在每个数据库中存储'username-userId'地图,以便他们可以在自己的服务中进行转换。 –

+0

我知道这个问题可以通过使用JWT来解决,但是我仍然有类似的东西,而不仅仅是关于用户需要转换的东西。 –

回答

3

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

你必须重播所有这个新服务从一开始就订阅的事件(你应该有一个“事件存储器”来保存你的应用程序中已经发生的所有事件)。而且,当从最近的时间开始并且回溯时重放事件时,您可以放置​​更智能的逻辑。这样,您将能够首先恢复最有价值的数据。只要小心处理相互依存的事件。

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

你是不是谈论做备份吧?

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

+0

要说清楚,你说的是我相信的事件采购,这不一定与微服务架构相关联? –

+0

你是对的,Yami指出他正在使用NEW_USER_EVENT在服务之间同步数据,这意味着使用事件源技术。 – IlliakaillI

+0

我可能用错误的方式来描述我的最后一个问题,但你的答案仍然有助于我理解一些额外的东西。我在谈论:也许我可以从现有的服务获取注册的用户信息,但由于我使用“消息队列”来同步用户信息,我无法确定哪个服务具有最新的用户信息(*因为某些服务还没有收到'NEW_USER_EVENT'事件*)。 –

相关问题