我正在开发一个采用微服务架构的网站,每个服务都拥有一个数据库。数据库存储微服务需要的数据。
Post
, Video
服务需要用户信息,所以这两个服务都订阅了NEW_USER_EVENT
。
NEW_USER_EVENT
将在有新用户注册时触发。
一旦服务接收到 NEW_USER_EVENT
,它们就会将传入的用户信息放入各自的数据库中。因此他们可以在不询问 User
服务的情况下做事。
到目前为止一切顺利。但是问题来了:
- 如果我要创建一项新服务怎么办?如何获取注册用户信息并将其放入新服务中?
也许我可以从现有服务中获取信息。但是事件是由消息队列(NSQ
)推送的。
如果我要从其中一个微服务复制数据,我如何确保哪个服务具有最新的用户信息? (因为有些服务还没有收到最新的事件)
阅读更多:
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/