大家好
我是小王,今天是我分享第1个知识点:2阶段提交。
一共下面几个部分
请看一下 选择哪一个呢?
图片
数据的原子性
在简绍2pc之前,我提到2个基本概念,这是才是分析2pc秘籍
状态机:是有命令和状态组成。
下面3个图说明很清楚
命令:
协调状态:
参与者:
准备提交:已经投票yes,但是没有收到事务提交 处于不确定状态(2) 已经提交:事务提交完成。(4)
图片
假如协调者挂了,参与者没挂
1 准备状态---因为服务器没有做任何判决,直接像参与发送abort指令 2 3 已提交状态 -发起docommi命令 4 完成状态:不需要做任何操作 假如参与者故障
1 准备好状态:没有参与投票,直接放弃 2 不确定状态:发送询问请求,来查询事务的状态 在判断是否放弃还是执行 3 已经提交状态:这是协调者需要做事情。 4 假如协调者和参与同时故障 1 2 3 4 二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。
2阶段提交允许单点故障,但是 故障之后必须恢复,然后业务继续执行。 在局域网效率非常高。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA 接口函数由数据库厂商提供