如何将数据库与微服务(以及新服务)同步?
How to sync the database with the microservices (and the new one)?
我正在开发一个微服务架构的网站,每个服务都有一个数据库。数据库存储微服务需要的数据。
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?
您必须从一开始就重播此新服务订阅的所有事件(您应该有一个 "event store" 来保持您的应用程序中已经发生的所有事件)。此外,您可以在重播事件时通过从最近的事件开始并及时返回来放置更智能的逻辑。这样,您将能够首先恢复最有价值的数据。只要注意正确处理相互依赖的事件即可。
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?
你不是谈论备份,对吧?
除了备份之外,在事件驱动系统中,人们通常不会以经典方式逐行复制数据。相反,他们只是从一开始就重放事件存储中的事件,并将这些事件提供给新服务(或新实例)的事件处理程序。因此,新服务最终会与系统的其他部分保持一致。
我正在开发一个微服务架构的网站,每个服务都有一个数据库。数据库存储微服务需要的数据。
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?
您必须从一开始就重播此新服务订阅的所有事件(您应该有一个 "event store" 来保持您的应用程序中已经发生的所有事件)。此外,您可以在重播事件时通过从最近的事件开始并及时返回来放置更智能的逻辑。这样,您将能够首先恢复最有价值的数据。只要注意正确处理相互依赖的事件即可。
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?
你不是谈论备份,对吧?
除了备份之外,在事件驱动系统中,人们通常不会以经典方式逐行复制数据。相反,他们只是从一开始就重放事件存储中的事件,并将这些事件提供给新服务(或新实例)的事件处理程序。因此,新服务最终会与系统的其他部分保持一致。