mysql - 如何将数据库与微服务(以及新服务)同步?

标签 mysql database message-queue microservices nsq

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


Post, Video 服务需要用户信息,所以这两个服务都订阅了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

最佳答案

What if I'm going to create a new service? How do I get the registered user informations and put them in the new service?

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

Data source: The events are pushed by the messaging queue(NSQ), If I'm going to copy the data from one of the microservices, how do I make sure the copy source has the latest user informations?

不是在谈论备份,对吧?

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

关于mysql - 如何将数据库与微服务(以及新服务)同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445442/

相关文章:

json - Mongo forEach 查询

mysql - 如何使用 CakePHP 更新一行上的多个字段

mysql - 在单独的表中或一起存储帖子评论

java - 以静默方式将作业返回到队列

azure - 顺序处理算法/模式 - Azure 服务总线队列

c++ - 按时间顺序排列的并发消息处理

mysql - 为什么在我们已经从内部 SELECT 中找到数据后调用 JOIN?

php - 链接表上的 where 条件 Laravel 5.4

MySQL 将每一行连接到除自身以外的每一行

php - Mysql REPLACE 不工作