首页 > 编程知识 正文

flink的两阶段提交,zk两阶段提交

时间:2023-05-06 19:04:22 阅读:240953 作者:3286

翻译自:https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txns003.htm#ADMIN12222

不像在本地数据库的事务,分布式数据库涉及到在多个数据库中改变数据,因此,分布式事务处理更加复杂,因为数据库间必须协调保证整个事务的原子性,即要不全部成功,要不全部失败。

事务一旦提交,无法回滚

数据保证数据的完整性的方式是使用两阶段提交(XA Transaction),第一阶段称为准备阶段,事务协调器(也称初始节点)询问参与本次事务的数据库是否保证本次事务中归它们管的部分能够保证原子性,即如果事务失败,它们能够回滚。

所有参与分布式事务的节点执行相同的动作,它们或者全部提交或者全部回滚。数据库能够保证这一点通常不需要应用编写者做任何事情。
Phase Description

阶段描述Prepare phase(准备阶段).全局协调者询问相关节点(除了事务提交点或事务发起者)是否能保证原子性,即使有故障,全局回滚不会在它们那一环节失败。Commit phase(提交阶段)如果所有的参与者都回应全局协调者说能,然后协调者就会让事务发起者提交事务,事务提交后,协调者要求所有参与节点也提交事务。准备阶段

准备阶段参与者节点收到全局协调者的询问,会做如下动作:

日志(redo log)里面记录此次事务元信息,以备回滚锁住表,防止读
当然,参与者节点只是被动地去接收回滚或者成功的请求,而不主动做决定。

当然参与者节点收到询问会给事务协调者响应,分三种,本次事务不涉及本数据库更改返回Read-Only.

提交阶段

事务协调者,全局协调者指的都是一个意思

事务协调者要求提交者节点提交提交者节点提交提交者节点通知事务协调者已经提交全局协调者和本地协调者(提交者节点)要求所有节点提交事务(属于各自部分)所有节点提交属于自己部分的事务并释放表锁

本文所有事务状态信息都记入redo log

记录redo log日志表示事务已经提交 缺点和优点 优点

优点当然是传统DB只支持在单个数据库上执行事务,而XA 2PC协议支持在多个数据库上执行事务

缺点

缺点是2PC是阻塞式的,参与全局事务的数据库被动听从事务管理器的命令,执行或放弃事务,如果运行事务管理器的机器宕机,那整个系统就不能用了。
另外还可能影响其他系统,如果事务管理器挂了,但是这个数据库的表锁还没释放,因为数据库还在等待事务管理器的命令,因此,使用这个数据库的其他应用也会收到影响。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。