当前位置:首页 > 科技  > 软件

微服务架构中的挑战及应对方式:Outbox 模式

来源: 责编: 时间:2024-05-07 09:10:40 251观看
导读使用 Outbox 模式保持微服务数据一致性在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问

使用 Outbox 模式保持微服务数据一致性

K2W28资讯网——每日最新资讯28at.com

在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问题。K2W28资讯网——每日最新资讯28at.com

在微服务中发出事件时,我们必须解决如何以事务方式更新数据库并发出事件的问题。K2W28资讯网——每日最新资讯28at.com

Outbox 模式

处理这个问题的简单方法是使用事务性 Outbox 模式。K2W28资讯网——每日最新资讯28at.com

K2W28资讯网——每日最新资讯28at.com

问题:双写问题

当我们必须同时更新两个不同的系统时,就会出现双写问题。例如,如果我们需要在 Apache Kafka 和数据库中记录事件。由于这些系统没有连接,我们无法一次性更新它们。我们必须找到一种方法来确保两者同时更新,或者两者都不更新。这就是事务性 Outbox 模式发挥作用的地方。K2W28资讯网——每日最新资讯28at.com

如果我们的数据库支持事务性更新,我们可以使用它来解决双写问题。我们将事务逻辑移到数据库中,而不是尝试同时更新数据库和 Kafka。每当我们更新数据库时,我们也在同一个事务中更新一个 Outbox 表。可以将 Outbox 想象成一个邮箱,我们将需要发送的信件放在其中。然后,我们等待邮递员收集这些信件并将其送到邮局。在我们的情况下,这些信件代表我们想要发送到 Kafka 的事件,而 Kafka 则充当邮局。但是,我们仍然需要某种东西扮演邮递员的角色。K2W28资讯网——每日最新资讯28at.com

要从 Outbox 表中发出事件到 Apache Kafka,我们可以使用一个单独的进程来异步监视该表。每当它检测到事件时,就可以将其发送到 Kafka。K2W28资讯网——每日最新资讯28at.com

K2W28资讯网——每日最新资讯28at.com

双写问题K2W28资讯网——每日最新资讯28at.com

一旦事件成功传递,它就可以从 Outbox 表中删除。该进程通常是在原始微服务中的另一个线程中编写的;但是,它也可以作为完全独立的应用程序运行。根据您使用的数据库,您可能可以使用 Kafka 连接器(例如 Postgres-Kafka 连接器)或更改数据捕获(CDC)系统(例如 Debezium)来监视表并发送事件。K2W28资讯网——每日最新资讯28at.com

K2W28资讯网——每日最新资讯28at.com

Kafka 连接器或更改数据捕获(CDC)K2W28资讯网——每日最新资讯28at.com

使用 CDC 解决双写问题的优势

Outbox 事务模式避免了双写问题。原因是状态和 Outbox 表将始终以事务方式更新。如果由于某种原因状态未能更新,则事件不会写入 Outbox;这意味着我们可以保证 Outbox 中的数据与数据库中的数据完全同步。然后,负责将事件传递到 Kafka 的独立进程确保 Outbox 表和 Kafka 保持同步。这使我们能够保证每个数据库操作都会在 Kafka 中有一个相应的事件,尽管会有一点延迟。K2W28资讯网——每日最新资讯28at.com

缺点:当传递过程向 Kafka 发出事件时,可能会出现失败或超时。在这种情况下,为了确保 Kafka 收到数据,我们必须重试。这些重试可能导致重复的消息;因此,我们向 Kafka 的传递保证是至少一次的。我们保证 Outbox 中的每条消息最终都会到达 Kafka,但可能会重复到达。因此,我们需要确保下游系统准备好处理任何重复消息。K2W28资讯网——每日最新资讯28at.com

在分布式系统中,至少一次的保证是常见的,因此,即使不涉及双写问题,实现去重逻辑也是一个良好的做法。例如,接收方在处理 Kafka 消息时可能会失败,并且当它重新启动时可能会再次收到相同的消息。K2W28资讯网——每日最新资讯28at.com

K2W28资讯网——每日最新资讯28at.com

Outbox 模式中的挑战K2W28资讯网——每日最新资讯28at.com

我们必须准备好处理这些情况。这可能会导致大量的流量。频繁的更新意味着数据库可能会始终将表保存在内存中,占用大量资源。与此同时,一些数据库在处理删除时效率不高。它们可能在幕后使用墓碑,并且随着频繁的插入和删除发生,这些墓碑可能会累积,这会导致资源使用量大增,并在我们的表中引起争用。如果数据库无法处理此类流量,可能会减慢我们的应用程序,因为请记住,每个写入都将触及该 Outbox 表。为了解决这些问题,我们可能需要进行调整,例如将记录而不是删除它们,或者调整数据库管理墓碑的方式。保留事件可能会带来长期的好处,因此删除可能并非绝对必要。一些数据库专门设计用于处理这种类型的流量。K2W28资讯网——每日最新资讯28at.com

结论

如果您的系统满足事务性 Outbox 模式的要求,那么它可以是解决双写问题的一种简单有效的方法。与其他选项(例如事件溯源或监听自己模式)相比,这种方法采用事件优先的方法,使用 Kafka 实时通知微服务变更,保持系统一致性。但是,诸如订单履行之类的组件可能需要编排,无法运行。K2W28资讯网——每日最新资讯28at.com


K2W28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86996-0.html微服务架构中的挑战及应对方式:Outbox 模式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 有人抵触ref?有人抵触reactive?

下一篇: 如何用C++实现简单的内存池

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top