对分布式事务的理解--简单

本文深入解析了事务的ACID特性:原子性、一致性、隔离性和持久性,并探讨了分布式事务的常见解决方案,如基于XA协议的两阶段提交、消息事务+最终一致性和TCC模式,以及它们在业务场景中的应用。

事务的ACID特性
1.原子性: such as:
通俗的说原子性就是:在整个事务中的所有操作,要么全部完成要么全部不做,没有中间的做或者不做做了一半等。(没有) 事务再执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样.
一致性
事务再执行必须保证系统的一致性, 比如转账, 我有500, 你有500,如果再一个事务里我成功的转账给你100,不管并发是多少,不管出现什么情况,只要执行成功了,那么我得账户肯定是是少了一百,你的账户就是600了.
隔离性
隔离性就是一个事务和另一个事务之间不会被影响,一个事务的中间状态不会被其他事务感知.所影响
持久性
持久性就是指:一旦事务完成了,那么事务对数据的变更就完全的保存在了数据库里,即使发生停电,系统宕机也是如此.
CP 经常见的分布式事务解决的方案
基于XA协议的两个阶段提交
消息事务+最终一致性
总和:分布式事务,本质上是对多个数据库的事务进行统一控制,按照控制力度可以分为:不控制、部分控制和完全控制。不控制就是不引入分布式事务,部分控制就是各种变种的两阶段提交,包括上面提到的消息事务+最终一致性、TCC模式,而完全控制就是完全实现两阶段提交。部分控制的好处是并发量和性能很好,缺点是数据一致性减弱了,完全控制则是牺牲了性能,保障了一致性,具体用哪种方式,最终还是取决于业务场景。作为技术人员,一定不能忘了技术是为业务服务的,不要为了技术而技术,针对不同业务进行技术选型也是一种很重要的能力
————————————————
版权声明:本文为优快云博主「liaomingwu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/liaomingwu/article/details/85371325

分布式事务,本质上是对多个数据库的事务进行统一控制,按照控制力度可以分为:不控制、部分控制和完全控制。不控制就是不引入分布式事务,部分控制就是各种变种的两阶段提交,包括上面提到的消息事务+最终一致性、TCC模式,而完全控制就是完全实现两阶段提交。部分控制的好处是并发量和性能很好,缺点是数据一致性减弱了,完全控制则是牺牲了性能,保障了一致性,具体用哪种方式,最终还是取决于业务场景。作为技术人员,一定不能忘了技术是为业务服务的,不要为了技术而技术,针对不同业务进行技术选型也是一种很重要的能力

分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说,一次大的操作由不同的小操作组成,这些小操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败,本质是保证不同数据库数据的一致性和完整性[^1]。 对分布式事务的控制按照力度可分为不控制、部分控制和完全控制。不控制即不引入分布式事务;部分控制包括各种变种的两阶段提交,如消息事务 + 最终一致性、TCC 模式,其并发量和性能较好,但数据一致性减弱;完全控制则是完全实现两阶段提交,牺牲了性能,保障了一致性,具体选择取决于业务场景[^2]。 基于消息队列的最终一致性是实现分布式事务的一种方案,将事务执行过程分为事务发起阶段和事务补偿阶段。在事务发起阶段,事务发起者将事务操作封装成消息发送到消息队列,消息消费者获取消息并执行事务操作。若操作成功,消费者向消息队列发送确认消息,发起者认为事务成功;若失败,消费者发送回滚消息,发起者进行事务补偿操作。该方案性能较好,不存在单点故障问题,但实现相对复杂,需保证消息的可靠性和顺序性[^4]。 在电商系统订单处理和银行转账系统等场景中,分布式事务有具体应用。在电商系统中,用户下单涉及订单服务、库存服务和支付服务等多个操作,若某个服务出现问题,需通过分布式事务机制协调回滚以保证数据一致性;在银行转账系统中,从一个账户向另一个账户转账涉及多个数据库操作,可使用两阶段提交保证事务一致性[^4]。 ```python # 简单示例,模拟基于消息队列的事务发起阶段 import time import random # 模拟消息队列 message_queue = [] # 事务发起者 def transaction_initiator(): transaction_message = "事务操作消息" message_queue.append(transaction_message) print("事务发起者发送消息到消息队列") # 消息消费者 def message_consumer(): if message_queue: message = message_queue.pop(0) print("消息消费者获取到消息:", message) # 模拟事务操作 success = random.choice([True, False]) if success: print("事务操作执行成功,发送确认消息") else: print("事务操作执行失败,发送回滚消息") # 模拟流程 transaction_initiator() time.sleep(1) message_consumer() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值