Architecture 如何在新添加的微服务中实现数据一致性?

Architecture 如何在新添加的微服务中实现数据一致性?,architecture,microservices,event-sourcing,data-consistency,Architecture,Microservices,Event Sourcing,Data Consistency,例如,我们有带有事件源的微服务。 为实现数据一致性,我们采用以下方法: 微服务生成一个事件 事件存储在事件存储中 事件将发布到订阅的微服务 这种方法适用于已经在使用的微服务。 但如果我需要部署另一个需要与事件存储同步数据的微服务,该怎么办? 显然,这项新的微服务错过了所有已发布的事件 这个新的微服务是否应该自己从事件存储中提取事件?从事件存储中提取所有事件可能会随着时间的推移而变得昂贵,因为事件的数量可能会爆炸 为了加速新微服务的初始化,您应该不时创建应用程序状态的快照(并将其存储在一些快速访问

例如,我们有带有事件源的微服务。 为实现数据一致性,我们采用以下方法:

  • 微服务生成一个事件
  • 事件存储在事件存储中
  • 事件将发布到订阅的微服务
  • 这种方法适用于已经在使用的微服务。 但如果我需要部署另一个需要与事件存储同步数据的微服务,该怎么办? 显然,这项新的微服务错过了所有已发布的事件


    这个新的微服务是否应该自己从事件存储中提取事件?

    从事件存储中提取所有事件可能会随着时间的推移而变得昂贵,因为事件的数量可能会爆炸

    为了加速新微服务的初始化,您应该不时创建应用程序状态的快照(并将其存储在一些快速访问内存/缓存中)。快照之后存储的所有事件都基于快照中的应用程序状态

    这样,当您部署新的微服务时,它将首先加载最新的快照,然后应用在该快照之后存储的所有事件,以更新应用程序状态

    您可以调整创建快照的频率,以便需要加载的额外事件数量相对较少

    这是一篇很好的文章,你可以查看更多细节