阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 2447|回复: 1

大白话聊聊分布式事务

[复制链接]

4213

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
127401
QQ
发表于 2017-3-9 09:58:49 | 显示全部楼层 |阅读模式
聊聊啥是分布式事务和分布式事务常见的两种实现方式。
什么是分布式事务
简单的来说就是,一个大的操作由两个或者更多的小的操作共同完成。而这些小的操作又分布在不同的网络主机上。这些操作,要么全部成功执行,要么全部不执行。
拿转账的例子来说下什么是分布式事务。张三和李四在不同的城市,存储他们账户信息的服务器也在不同的网络主机上。张三有30元钱,李四有30元钱。张三给李四转账5元就是一个事务。完成这个事务,需要两个操作。首先得从张三账户上扣5元,然后再给李四账户上加5元。事务执行完毕后,必须是两个操作都执行成功,要么都失败。
事务的特性
分布式事务本身就是事务,所以也有事务的特性。事务有四个特征ACID:
A:原子性(Atomicity)
事务中的各个操作单元要么全部做,要么就全部不做。不能事务执行后,处于只做一半的状态。
C:一致性(Consistency)
事务执行后,必须由一个一致状态变为另外一个一致状态。
I:隔离性(Isolation)
事务之间不能相互干扰。
D:持久性(Durability)
一旦事务完成,对于数据的变更是永久的。
分布式事务实现方式
下面我们就以上面转账的例子来说下实现分布式事务的几种方式。
两阶段提交两阶段提交的大概流程:
第一阶段:
正常情况下的操作过程如下:


在第一阶段,主要是事务管理者(经理)发起事务,让各个事务资源方(职员甲乙)确认资源是否满足,并做预处理(冻结)。资源方的操作有可能失败也可能成功。如,张三账户不足5元钱,没办法冻结,就是失败。资源方把操作结果反馈给事务管理者。
异常情况下的操作过程如下:


如果预提交过程中出现任何问题,导致事务不能执行。将会通知资源方进行撤销预提交操作。
第二阶段:
如果是职员甲和职员乙都告诉经理,操作成功了。
正常情况下的操作过程如下:


这个时候,张三账户上的金额是25元。李四账户上的金额是35元。
异常情况下的操作过程如下:


这个时候,张三账户上的金额是30元。李四账户上的金额也是30元。
总而言之,事务的执行会分为预提交和提交两步进行。任何一个小操作出问题,导致事务不能完成,将会进行回滚操作。
两阶段提交需要注意的
两阶段提交,要有一个事务管理者协调各方的操作。各方对资源的占用要到整个事务结束后才能释放。这样会影响事务的效率。当并发量大的时候,系统的性能会严重下滑。
事务管理者和资源方存在通信。有可能存在通信不通畅。如,职员甲接受到扣钱的命令后,职员甲扣完了钱。由于电话故障等原因,导致没办法通知经理已经操作成功。因此,各方还要处理通信超时问题。
整个流程需要事务管理者协调各个资源方进行操作。但是,事务管理者可能出现问题。导致没办法进行协调。如,经理生病了。
注意幂等性问题。可能存在对资源方重复调用的情况。这种情况下,资源方被调用多次和调用一次的效果要一样。如上例中,经理第二次通知职员甲扣5元的时候,职员甲要像上次一样,告诉经理扣款已经完成。但是,职员甲不能再进行扣款的动作。
基于消息实现
基于消息的实现大概过程如下:


基于消息的分布式事务实现中,引入了消息中间件(助理),负责消息的传递和事务执行状态的询问。这样就降低了系统间的耦合度。
为什么职员甲在进行扣款前,要告诉助理?主要是怕自己扣款成功了,又忘记告诉助理。这个时候,助理也就没办法通知职员乙操作了。告诉助理后,如果职员甲忘记了,助理可以询问职员甲,是否执行成功。进而决定是否该通知职员乙进行加钱操作。
如果职员甲扣款失败,则应该通知助理。助理在这种情况下,就不英再通知职员乙加钱。
基于消息实现的问题
基于消息的分布式事务实现,讲究的是最终一致性。也即所有的本地事务执行完毕后,整个状态的一致。
整个事务一般不会有回滚操作。如,当职员乙操作失败的时候,职员应该是再次通知职员乙重试。




捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

0

主题

19

回帖

115

积分

注册会员

Rank: 2

积分
115
发表于 2017-3-10 11:50:33 | 显示全部楼层
登录可见评论
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2025-2-22 16:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表