分布式事务是指在分布式系统中,由多个独立的服务或数据库参与的事务,确保这些分布式节点上的操作能够一致完成或回滚,从而保证数据的一致性。

一、两阶段提交(2PC)

将事务分为准备阶段和提交阶段。各节点在准备阶段确认操作无误后再提交,在遇到错误时会回滚。在2PC中,有两个核心角色,协调者、参与者。

优点:能保证各参与节点数据的一致性,适用于对数据一致性要求高的场景。

缺点:性能开销大(锁定资源时间较长)、可能会出现“协调者单点故障”问题,导致系统阻塞。

准备阶段:

(1)协调者向所有参与者发送commit请求,询问是否可以提交事务,并等待答复。

(2)各参与者开始准备执行事务,将uodo log和redo log记入事务日志中,并不提交事务。

(3)如果参与者执行成功,则向协调者返回yes,否则返回no。

提交阶段:

(1)协调者向所有参与者发送正式提交事务请求(即:commit请求)。

(2)参与者收到协调者的commit请求后,参与者正式执行事务提交操作,并释放整个事务期间占用的资源。

(3)参与者完成事务提交后,向协调者发送ACK消息。

(4)协调者收到所有参与者反馈的ACK消息后,完成事务。

事务回滚:

如果任意一个参与者在第一阶段返回中止信息,或者由于超时协调者无法获取到所有参与者的信息,那么这个事务将会被回滚。

(1)协调者向所有参与者发送回滚请求(即:rollback请求)。

(2)参与者收到协调者发送的回滚请求后,参与者使用第一阶段中的undo log信息执行回滚操作,并释放在整个事务期间占用的资源。

(3)参与者在执行完回滚操作之后,向协调者发送ACK信息。

(4)协调者受到所有参与者反馈的信息后,取消事务。

基于XAResource实现:

XAResource 是 Java Transaction API (JTA) 中的一个接口,用于支持分布式事务处理。在 MySQL 中XAResource 提供了一种管理和协调事务的方法,以便在多个资源(例如数据库、消息队列等)之间实现一致性和原子性。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注