如何将数据库与微服务(和新服务)同步?

Yam*_*mel 6 mysql database message-queue nsq microservices

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


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

NEW_USER_EVENT时候,那里已经注册的新用户将被触发.

在此输入图像描述

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

在此输入图像描述

到现在为止还挺好.但问题出现了:

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

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

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

在此输入图像描述


阅读更多:

关于微服务最难的部分:您的数据

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

Ill*_*llI 3

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

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

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

不是在谈论进行备份,对吗?

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