当前位置: 首页 > 知识库问答 >
问题:

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

乐正烨熠
2023-03-14

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

  1. 微服务生成事件
  2. 事件存储在事件存储中
  3. 事件将发布到订阅的微服务

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

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

共有1个答案

陆卓
2023-03-14

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

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

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

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

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

 类似资料:
  • 虽然每个微服务通常都有自己的数据,但某些实体需要在多个服务之间保持一致。 对于高度分布式环境(如微服务体系结构)中的这种数据一致性要求,设计的选择是什么?当然,我不想要共享数据库体系结构,即单个数据库管理所有服务的状态。这违反了孤立和不共享的原则。 我明白,微服务可以在创建、更新或删除实体时发布事件。对该事件感兴趣的所有其他微服务可以相应地更新各自数据库中的链接实体。 这是可行的,但是它会导致跨服

  • 主要内容:1、再回顾:什么是服务注册中心?,2、Consul服务注册中心的整体架构,3、Consul如何通过Raft协议实现强一致性?,4、Consul如何通过Agent实现分布式健康检查?1、再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相调用。 举个现实点的例子吧,比如电商系统里的订单服务需要调用库存服务,如下图所示。 现在的问题在于,订单服务在192.168.31.1

  • 我正在计划一个使用事件源的微服务模型。为了实现高可伸缩性和高吞吐量处理能力,我将使用Kafka作为微服务的消息代理。 在这一点上,我有问题的实现模型,以能够拥有Kafka主题和分区的好处。我的模型需要满足一些要求: 微服务必须从message broker获取数据(post/patch/put/delete) 数据一致性是强制性的,如果实体A需要实体B的先前存在,则必须只存在实体A的指向实体B的有

  • 我刚开始接触微服务架构,我有几个关于数据持久性和数据库的问题。 所以我的理解是每个微服务都有自己的数据库(不一定,但通常)。但鉴于这种情况,请考虑一个包含用户、帖子和评论的常用社交媒体平台。将有两个微服务,一个用户的微服务和一个帖子的微服务。用户的数据库有一个用户表,帖子的数据库有一个帖子和评论表。 我的问题是关于帖子微服务,因为每个帖子和评论都有一个作者,所以通常我们会创建指向用户表的外键,但是

  • 本文向大家介绍微服务中如何实现 session 共享 ?相关面试题,主要包含被问及微服务中如何实现 session 共享 ?时的应答技巧和注意事项,需要的朋友参考一下 在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Se

  • 我正在开发一个具有微服务架构的网站,每个服务都拥有一个数据库。数据库存储微服务所需的数据。 、服务都需要用户信息,所以这两个服务都订阅了。 当有新用户注册时,将触发。 一旦服务收到,它们就会将传入的用户信息放入它们自己的数据库中。因此,他们可以在不询问服务的情况下做事。 到目前为止还不错。但问题来了: 如果我要创建一个新服务呢?如何获取注册用户信息并将其放入新服务 也许我可以从现有服务中获取信息。