喉咙干痒是什么原因| 女性内分泌失调吃什么药| 为什么会得霉菌性阴道炎| 薛定谔的猫比喻什么| 什么的大圆盘| 吃什么解辣最快方法| 住房公积金缴存基数是什么意思| 属狗适合佩戴什么饰品| 寻常疣是什么| 尿道痒痒是什么原因| bpa是什么| 摩什么擦什么| 瓦是什么的单位| 脚板疼是什么原因| hpv感染有什么症状| 更年期什么年龄开始| 一柱擎天什么意思| 转述句是什么意思| 波菜不能和什么一起吃| 202年属什么生肖| s牌运动鞋是什么牌子| 两边太阳胀痛什么原因引起的| 金牛后面是什么星座| 五光十色是什么生肖| 卵巢早衰是什么原因引起的| 借刀杀人是什么生肖| 居高临下的临是什么意思| 960万平方千米是指我国的什么| 3岁宝宝流鼻血是什么原因| 身痒是什么原因引起的| 六月19是什么日子| 佩戴朱砂有什么好处| 甜菜根是什么| 马齿苋有什么作用| 梦见殡仪馆是什么意思| 鸟字旁的字和什么有关| 植物功能紊乱吃什么药| 双向情感障碍吃什么药| 补铁吃什么| 连长相当于地方什么官| 夸瓜读什么| 79年属什么的生肖| 落枕贴什么膏药| 结节性硬化症是什么病| 什么是外阴| 范思哲香水是什么档次| 汉朝后面是什么朝代| 疣吃什么药能治好| gly是什么氨基酸| 嗓子发干是什么原因| 大战三百回合是什么意思| 小孩黑眼圈很重是什么原因| 荷叶茶有什么功效和作用| 9月份出生的是什么星座| 公立医院和私立医院有什么区别| prr是什么意思| 肠胃炎饮食要注意什么| 嚣张是什么意思| 吃什么才能瘦下来| 巴不得是什么意思| 8月11号是什么星座| 野茶属于什么茶| 绝经有什么症状| 左下腹疼痛是什么原因女性| 放我一个人生活是什么歌| 我俩太不公平这是什么歌| 63年属什么生肖| 十周年是什么婚| 7月26是什么星座| 天津有什么玩的| 山竹吃了有什么好处| 临界心电图是什么意思| 516是什么星座| 木九十眼镜什么档次| 经常掏耳朵有什么危害| 德国什么东西值得买| 红细胞数目偏高是什么意思| 正常人为什么会得梅毒| 什么草药可以止痒| 双规是什么| 痒是什么原因引起的| 为什么十个络腮九个帅| 宇宙外面是什么| 家五行属性是什么| 公交车是什么意思| 皮肤起小水泡很痒是什么原因| 抛光是什么意思| 铎读什么| rh因子阳性是什么意思| 晞是什么意思| 传教士是什么姿势| 青海有什么好玩的| 什么东西醒酒| 身份证照片穿什么颜色衣服| 碳酸钠呈什么性| 生育保险是什么| 沙门氏菌用什么药最好| 内在美是什么意思| 什么样的人容易得抑郁症| 头疼是什么原因引起| 地支是什么意思| 什么是尿常规检查| 梦见别人家办丧事是什么意思| 柳暗花明是什么生肖| 产妇吃什么鸡最好| 梦见蛇是什么预兆| 孕囊是什么样的图片| ACEI是什么药| 月经总推迟是什么原因| 水泡型脚气用什么药好| 宝宝乳糖不耐受喝什么奶粉比较好| 姨妈提前是什么原因| 糖耐是检查什么的| 八七年属什么生肖| 湖水蓝是什么颜色| 什么人每天靠运气赚钱| 什么腔什么调| 肝火胃火旺吃什么药| 水当当是什么意思| 急性肠胃炎吃什么食物| 吃什么对心脏最好| 朝什么暮什么| qt是什么| 原生家庭是什么意思| 人中跳动是什么原因| 闭经和绝经有什么区别| 什么情况下需要做肠镜| 舌头起泡吃什么药好| 肝占位是什么意思| 11月2日是什么星座| 阴历六月十三是什么日子| 狐臭什么味| 查钙含量做什么检查| 布吉岛什么意思| 角膜塑形镜是什么| 1958年是什么年| 生僻字是什么意思| 牛头不对马嘴是什么意思| 头菜是什么菜| 什么东西可以去口臭呀| 绿野仙踪是什么意思| 狗被蜱虫咬了有什么症状| 笔画最多的字是什么| 什么是宦官| 欧代是什么| 4.12是什么星座| 湘女多情是什么意思| 肚脐眼上面疼是什么原因| 财星是什么意思| 塞飞洛是什么档次的包| 副词是什么| 阅人无数什么意思| 布洛芬起什么作用| outdoor是什么意思| 月亏念什么| 鸡蛋清敷脸有什么好处和坏处| 精神障碍是什么病| 肝功能2项是指什么| 维生素c有什么作用| 什么是阳虚| 手机为什么会发热| 花中隐士是什么花| 豸是什么意思| 长脸适合什么眼镜框| 治鸡眼用什么药最好| 转移酶偏高是什么原因| 头响脑鸣是什么原因引起的| 熬笔是什么意思| 范是什么意思| 宫颈息肉是什么原因引起的| 河北有什么山| 想吐头晕是什么原因| 本垒打是什么意思| bppv是什么病| 91年是什么年| 长期失眠挂什么科| 斐然是什么意思| 百分位是什么意思| 陕西为什么叫三秦大地| 俄罗斯特工组织叫什么| 男人艾灸什么地方壮阳| 烤冷面是什么材料做的| 夜尿次数多是什么原因| 为什么总是想睡觉| 孕吐反应强烈说明什么| 耳廓有痣代表什么| 被子什么材质的好| 吃什么能减肥| 骨结核是什么病| 老年人流鼻血是什么原因| 老年阴道炎用什么药| 乳腺癌什么症状| 腺肌瘤是什么病| 重庆为什么叫雾都| 肚脐眼上方是什么器官| 寻麻疹是什么原因引起的| 骨髓抑制是什么意思| 偏头痛什么症状| 眼睛总有眼屎是什么原因| 澄字五行属什么| 正常高压是什么意思| 身份证上x代表什么| 5月是什么月| 耳朵疼痛吃什么药| twins什么意思| 梦见手机坏了是什么意思| 真好是什么意思| 急性肠胃炎用什么药| 表虚不固是什么意思| 去阴虱用什么药最好| 12378是什么电话| bacon是什么意思| 属蛇是什么命| 前列腺炎不治疗有什么后果| 直女是什么意思| 女人为什么不会怀孕| 胃病看什么科室| 不服是什么意思| 调休是什么意思| 滴虫性阴道炎用什么药效果最好| 肌酐高吃什么水果好| 心阳虚吃什么药| 马太效应是什么意思| 抱大腿什么意思| 一个立一个羽读什么| 小便多是什么原因| 无常是什么意思| 混油皮是什么意思| 什么原因导致脾虚| 熬夜是什么意思| 风花雪月是什么意思| 女人手心脚心发热是什么原因| 吃什么水果可以变白| 退休是什么意思| 小确幸是什么意思| 氪金什么意思| 腋下淋巴结肿大挂什么科| 肥肠炒什么菜好吃| 什么牌子洗衣机好| 月经两个月没来是什么原因| 籽骨出现意味着什么| 关羽使用的武器是什么| 什么烟贵| 旅长是什么级别| 脱肛是什么症状| 宫腔镜是什么意思| 肺部占位性的病变指什么| 肺结节吃什么药| 君主是什么意思| 肾结石吃什么药能化石| 鸡的守护神是什么菩萨| 什么是天葬| 跑业务是什么工作| 半夜是什么时辰| 微信英文名叫什么| 梦见老婆出轨是什么预兆| 毛戈平化妆品什么档次| 初级中学是什么意思| 什么飞什么跳| 佛爷是什么意思| 低血糖和贫血有什么区别| 土豆粉是什么做的| 辣椒炭疽病用什么药| 衣带渐宽终不悔是什么意思| 百度
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >搞懂数据最终一致性

【美丽江西秀天下】“互联网+农产品销售”,江西大有可为

原创
作者头像
写bug的高哈哈
发布于 2025-08-07 21:08:44
发布于 2025-08-07 21:08:44
百度 是否有这么多佛舍利塔被建,不得而知,但是,此后无论在印度大陆,还是远在东方的中国,都将发现的佛舍利归之于阿育王。 1840
举报

今天我们来讨论一下数据最终一致性的相关问题。这个问题在分布式环境下非常典型,我们可以通过一个具体的业务场景来进行说明,下面是这个业务场景的示例图:

设想以下业务场景:系统中同时运行着两个关键服务——订单服务和积分服务。用户完成一笔订单后,订单信息需被记录到订单数据库中,同时,系统会根据订单金额给用户增加对应的积分。这一系列操作横跨了订单数据库和积分数据库,因此确保这两个服务间数据的一致性变得尤为重要。

因为这里的订单服务和积分服务是两个独立的微服务,所以保存订单信息和积分信息的实现过程伴随着一个典型的问题,也就是如何确保订单数据与用户积分数据的一致性。

虽然通过分布式事务,我们可以在一定程度上实现这一目标,但分布式事务提供的是一种强一致性方案,缺乏系统弹性和扩展性。为了更好地处理这一场景,我们将探讨数据最终一致性的三种实现模式,也就是可靠事件模式、补偿模式和TCC模式。

可靠事件模式

我们先来看可靠事件模式。就像这个模式的名称所表明的,这个模式依赖于事件,可以认为是一种事件驱动架构的具体应用方式。但为了更好地保证数据在不同服务之间的一致性,我们还需要引入一些特定的实现技巧。

针对事件驱动架构,我们首先想到的实现方案是引入消息中间件。在可靠事件模式中,当订单服务和积分服务之间的数据需要进行统一管理时,我们引入消息中间件来完成数据的传递。接下来,我们看一下具体的操作流程。

流程的第一步,是用户进行订单付款流程。成功付款后,订单服务会首先保存这个订单信息,这是本地数据库操作,不涉及分布式场景。在这之后,订单服务会生成一条“订单支付完成消息”并发送到消息中间件。这一操作流程可以用下图加以表示:

第二步是,当消息中间件接收到“订单支付完成消息”之后,把这条消息发送到积分服务。作为消息的消费者,积分服务会根据这条消息进行积分计算,并最终保存到本地数据库中。

请注意,因为消息发送和消费过程都可能出现异常,所以这时候积分服务需要发送一条“回执消息”给到消息中间件,这一过程可以用下图表示:

在流程的第三步,我们再次来到订单服务,该服务收到积分服务发送的“回执消息”之后同样也会执行一定的业务逻辑,比方说设置订单的状态等。

在整个流程中,很显然的一点是:我们需要确保消息发送和接收过程的可靠性,这也是“可靠事件”这一名称的由来。目前,诸如RabbitMQ、Kafka等主流的消息中间件都支持消息持久化操作,同时也具备消息至少被投递一次的功能特性,这在一定程度上能够确保消息的可靠传递。

补偿模式

我们要介绍的第二种模式是补偿模式。所谓补偿,是指对所有已生成的数据来说,都具备一种类似“撤销”的能力。在整个数据处理链路中,如果某一个环节出现了异常,那么我们就可以通过补偿机制恢复那些已经保存的数据。

让我们回到前面的案例。显然,如果在积分服务中针对用户积分的处理过程发生了异常,为了保证数据一致性,那么就应该同时取消原先的订单所生成的数据。为了达到这种效果,订单服务和积分服务都需要提供额外的补偿操作入口,而系统中也应该存在一个独立的补偿服务来根据业务运行结果统一调用这些入口。

显然,如果想要实现补偿操作,我们需要明确补偿的对象。所以,通常的做法都是在各个微服务中保存详细的操作日志和对应的业务数据。

就今天讨论的案例而言,当用户发起一次操作时,系统需要为对应的请求生成全局唯一的操作编号,该编号会在整个调用链路中进行传递。同时,对于订单服务而言,需要根据这个唯一编号来更新业务状态。而在积分服务中,同样需要记录用户积分相关的流水信息和业务状态。

一旦发生异常,例如用户积分计算失败,那么补偿服务就会执行补偿过程,它可以从操作日志和业务状态中知道补偿的范围以及对应的业务数据。

TCC模式

讲完补偿模式,我们接着来看TCC模式。所谓的TCC,实际上是三个操作的组合,即Try(尝试)、Confirm(确认)和Cancel(取消),它的基本结构如下图所示:

在上图中,我们对TCC模式中的三个操作做一个展开。其中,Try操作用于完成所有业务规则检查,对业务数据进行预先的处理;Confirm操作则用来执行具体的业务操作;而Cancel操作实际上就是一种补偿操作,用户补偿Try阶段被占用的业务数据。

我们还是通过案例分析进一步理解TCC模式的设计思路,下图展示了基于TCC模式的用户操作流程。

请注意,在上图中,Try、Confirm和Cancel这三个操作具备严格的时序性,开发人员需要按顺序来依次执行这三个操作。接下来,我们同样结合具体的业务场景来分析各个操作的具体内容。

  • Try阶段:进行业务规则检查,预留必要的业务资源。例如,检查订单金额是否足够,以及预扣库存等。
  • Confirm阶段:若Try阶段成功,则执行实际的业务操作,如完成订单处理并正式扣除库存,同时向积分服务发送积分发放请求。
  • Cancel阶段:若发生异常,则释放Try阶段预留的资源,并执行相应的补偿操作,如撤销订单并恢复库存,同时通知积分服务撤销积分的发放。

讲到这里,我们可以把TCC模式看作是对补偿模式的一种优化。一方面,在TCC模式中,我们把如何对数据进行补偿这一过程进行了拆分,从而能够让开发人员更好地完成补偿数据的管理,业务系统和补偿服务之间的分工也更加明确。另一方面,正如上面图中所示的那样,基于TCC模式,补偿服务通常被设计成一种平台化的框架,这种框架能够协调各个服务中Try、Confirm和Cancel操作的时序,典型的例子就是阿里巴巴开源的Seata TCC框架。

总结

数据一致性是一个重要且复杂的话题。今天,我们基于典型的案例,对如何实现分布式环境下的数据最终一致性的思路和方案做了分析,并提供了业界具有代表性的几种实现模式,包括可靠事件模式、补偿模式和TCC模式。

对于可靠事件模式来说,它依赖于事件,可以认为是一种事件驱动架构的具体应用方式;对于补偿模式来说,它侧重于通过补偿机制恢复那些已经保存的数据处理链路中的数据;对于TCC模式来说,我们可以把它看作是对补偿模式的一种优化,这些模式各都有各的设计思想和功能特性。

当然,无论采用哪一种模式,想要实现最终数据一致性,开发人员还需要准备一种最基础的处理机制,即人工干预机制。可以认为基于业务数据进行人工的补偿就是一种兜底方案,这也是在使用这些数据最终一致性模式时同时需要考虑的重要一点。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可靠事件模式
  • 补偿模式
  • TCC模式
  • 总结
相关产品与服务
消息队列
腾讯云消息队列 TDMQ 是腾讯云自主研发的消息中间件产品系列,作为分布式系统中的关键组件,具备稳定可靠、高弹性、低成本的特性,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。兼容开源主流协议,包含 CKafka、RocketMQ、RabbitMQ、Pulsar、MQTT 五大子产品,覆盖在线(电商交易、社交直播等)和离线场景(大数据、日志监控等),满足金融、互联网、教育、物流、能源等不同行业和场景的需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
发现新大陆是什么意思 女生右手中指戴戒指什么意思 梦见换房子是什么预兆 桃代表什么生肖 打九价是什么意思
lv是什么意思 亦的意思是什么 什么样的伤口需要缝针 什么人不宜吃海参 被紫外线灯照到有什么后果呀
梦见孩子拉粑粑是什么意思 点映什么意思 突然长胖很多是什么原因 梅毒查血查什么项目 5个月宝宝可以吃什么水果
四个鱼念什么 泉字五行属什么 08年是什么年 嗓子疼吃什么水果 怀孕20天有什么症状
猩红热是什么症状hcv8jop2ns6r.cn 为什么射出来的精子是黄色的hcv9jop6ns5r.cn naomi什么意思520myf.com 感冒咳嗽吃什么药止咳效果好onlinewuye.com gi值是什么naasee.com
什么品牌蓝牙耳机好hcv8jop7ns2r.cn jordan是什么牌子shenchushe.com 蚂蚁长什么样子hcv7jop6ns2r.cn 一什么棉花糖hcv8jop8ns5r.cn nt是什么检查hcv8jop5ns6r.cn
1956年是什么年hcv9jop1ns1r.cn 吃什么可以提高代谢hcv8jop7ns4r.cn 粘鞋子用什么胶水最好hcv8jop9ns8r.cn 肠炎是什么症状hcv9jop2ns8r.cn 楷字五行属什么hcv8jop8ns6r.cn
kipling是什么牌子hcv9jop6ns3r.cn 铁棍山药和普通山药有什么区别hcv8jop7ns5r.cn 功夫是什么意思hcv9jop4ns9r.cn 囊内可见卵黄囊是什么意思gysmod.com 国防部是干什么的hcv8jop5ns7r.cn
百度