南大通用GBase 8c数据库事务状态保持技术解析与实践-2技术实现
在分布式数据库中,事务状态保持是确保数据一致性和系统可靠性的重要特性之一,主要依靠关键技术:
️分布式事务协议:GBase 8c采用先进的分布式事务协议,确保跨多个节点的事务操作能够保证ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
️数据多副本:为了提高数据的可用性和耐故障能力,GBase 8c支持数据多副本策略。数据可以存储在多个节点上,即使部分节点发生故障,也能通过其他副本继续提供服务。
️故障恢复机制:当系统中的节点发生故障时,GBase 8c能够利用其他节点的数据副本进行故障恢复,保证事务的完成。
️2PC(Two Phase Commitment Protocol)两阶段提交协议:实现分布式事务的关键就是两阶段提交协议。
传统2PC事务在全局提交阶段可能出现失败,例如协调器宕机,这会造成集群内各节点的提交状态不一致,破坏事务的原子性。并且2PC事务持续占有已申请的锁,可能造成其它事务因无法获取锁而不能继续执行,严重时可能导致整个集群卡住,因此,需要检查这类事务的存在,并尽快推进2PC的完成(提交或回滚)。
针对上述问题,GBase 8c优化了2PC的执行流程,设计了2PC事务状态保持功能,确保集群能够持续提供服务。
当协调器宕机之后,系统会立即检测到该问题,并自动选出一个健康的协调器,由后者接管故障协调器上所有未完成的2PC事务。新的协调器会收集所有未完成的2PC事务,检查各个2PC事务所处阶段,并决定每个2PC事务应当提交或者回滚,然后发送相应指令到各个参与者,完成全部2PC流程,确保系统不被阻塞。
如上图所示两阶段提交事务处理过程中:
a.CN2节点正常下发事务Prepare状态;
b.三个DN节点正常返回事务Prepare OK状态;
c.CN2节点正常下发事务Commit状态;
d.DN1节点返回Commit OK状态且DN2、DN3还未完成Commit OK状态提交时,CN2节点宕机;
e.此时CN3节点检测到CN2节点宕机,会自动接管CN2未完成的事务和状态;
f.DN2、DN3节点重新提交Commit OK状态至CN3节点,并完成该两阶段提交过程。
CN3节点接管事务后,无需重复前面已经成功提交的事务状态,可以继续完成宕机的CN2节点未完成的状态来完成本次事务。整个过程对上层业务无感知,数据库集群内任意节点宕机均不会造成死锁或异常等待情况。