专门代做毕设的网站,网站开发项目成本分析之合理性,上海网站建设友汇网站,flash美食网站论文目录 31.基于Zookeeper如何实现分布式锁#xff1f;
32.什么是ACID#xff1f;
33.什么是分布式的XA协议#xff1f;
34.什么是2PC#xff1f;
35.什么是3PC#xff1f; 31.基于Zookeeper如何实现分布式锁#xff1f;
顺序节点
创建一个用于发号的节点“/test/lock…目录 31.基于Zookeeper如何实现分布式锁
32.什么是ACID
33.什么是分布式的XA协议
34.什么是2PC
35.什么是3PC 31.基于Zookeeper如何实现分布式锁
顺序节点
创建一个用于发号的节点“/test/lock,然后以他为父亲节点的前缀为”/test/lock/seq依次发号
获得最小号得锁
由于序号的递增性可以规定排号最小的那个获得锁。所以每个线程在尝试占用锁之前首先判断自己是排号是不是当前最小如果是则获取锁。
节点监听机制
每个线程抢占锁之前先抢号创建自己的ZNode。同样释放锁的时候就需要删除抢号的Znode。抢号成功后如果不是排号最小的节点就处于等待通知的状态。等谁的通知呢不需要其他人只需要等前一个Znode的通知就可以了。当前一个znode删除的时候就是轮到了自己占用锁的时候。第一个通知第二个第二个通知第三个击鼓传花似的依次向后。
32.什么是ACID
一个事务有四个基本特性也就是我们常说的ACID
Atomicty(原子性事务是一个不可分割的整体事务内所有的操作要么全做成功要么全失败。
Consistency(一致性事务执行前后数据从一个状态到另一个状态必须是一致的A向B转账不能出现A扣了钱B却没收到。
Isolation(隔离性多个并发事务之间相互隔离不能互相干扰。
Durability持久性事务完成后对数据库的更改是永久保存的不能回滚。
33.什么是分布式的XA协议
XA协议是一个基于数据库的分布式事务协议其分为两部分事务管理器和本地资源管理器。事务管理器作为一个全局的调度者负责对各个本地资源管理器统一号令提交或者回滚。二阶段提交协议2PC和三阶段协议3PC就是根据此协议衍生出来而来。主流的诸如OracleMySQL等数据库均已实现了XA接口。
XA接口是双向的系统接口在事务管理器以及一个或者多个资源管理器之间此女工程通信桥梁。也就是说在基于XA的一个事务中我们可以针对多个资源进行事务管理例如一个系统访问多个数据库或即访问数据库又访问像消息中间件直接实现全部提交或全部取消的事务。XA规范不是Java规范而是一种通用的规范。
34.什么是2PC
两段提交顾名思义就是要进行两个阶段的提交
第一阶段准备阶段投票阶段
第二阶段提交阶段执行阶段。
下面还那下单扣库存举例子简单描述一下两段提交2PC的原理
之前说过业务服务化SOA以后一个下单流程就会用到多个服务各个服务都无法保证调用的其他服务的成功与否这个时候就需要一个全局的角色协调者对各个服务参与者进行协调。
一个下单请求过来通过协调者给每一个参与者发送Prepare消息执行本地数据脚本但不提交事务。
如果协调者收到了参与者的失败消息或者超时直接给每个参与者发送回滚Rollback消息否则发送提交Commit消息参与者根据协调者的指令执行提交或者回滚操作释放所有事务处理过程中被占用的资源显然2PC做到了所有操作要么全部成功要么全部失败。
两段提交2PC的缺点
二阶段提交看似能够提供原子性的操作但他存在着严重的缺陷
网络都懂导致的数据不一致第二阶段中协调者向参与者发送Commit命令之后一旦此时发生网络抖动导致一部分参与者接收到了Commit请求并执行可其他未接到Commit请求的参与者无法执行事务提交。进而导致整个分布式系统出现了数据不一致。
超时导致的同步阻塞问题
2PC中的所有的参与者节点都为事务阻塞型当某一个参与者节点出现通信超时其余参与者都会被动阻塞占用资源不能释放。
单点故障的风险
由于严重的依赖协调者一旦协调者发生故障而此时参与者还都处于锁定资源的状态无法完成事务commit操作。虽然协调者出现故障后会重新选举一个协调者可无法解决因前一个协调者宕机导致的参与者处于阻塞状态的问题。
35.什么是3PC
三阶段提交3PC是对两段提交(2PC)的一种升级优化3PC在2PC的第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与者节点的状态都一致。同时在协调者和参与者中都引入超时机制当参与者各种原因未收到协调者的Commit请求后会对本地事务进行Commit不会一直阻塞等待解决了2PC的单点故障问题但3PC还是没能从根本上解决数据一致性的问题。 3PC的三个阶段分别是CanCommit,PreCommit,DoCommit:
CanCommit:协调者向所有参与者发送CanCommit命令询问是否可以执行事务提交操作。如果全部响应YES则进入下一个阶段。
PreCommit:协调者向所有参与者发送PreCommit命令询问是否可以进行事务的预提交操作参与者接收到PreCommit请求后如参与者成功的执行了事务操作则返回YES响应进入最终Commit阶段。一旦参与者中有向协调者发送了NO相应协调者向所有参与者发送abort请求参与者接收abort命令执行事务的中断。
DoCommit:在前两个阶段中所有参与者的响应反馈均是YES后协调者向参与者发送DoCommit命令正是提交事务如协调者没有接收到参与者发送的ACK响应会向所有参与者发送abort请求命令执行事务的中断。