GBase 8c通过2PC协议,提供分布式系统强一致事务的能力,满足金融行业的严苛要求,同时,对于追求性能的新兴业务,也支持可选的最终一致性事务的能力。
目录导航
分布式事务原子性和两阶段提交协议
为了保证分布式事务的原子性,防止出现部分参与者提交、部分参与者回滚的“中间态”事务,GBase 8c采用2PC协议实现跨节点分布式事务。
所谓2PC( Two-Phase Commit)即两阶段提交协议,顾名思义,就是将事务的提交过程分成了两个阶段来进行处理,包括准备阶段P(Prepare phase)、提交阶段C(Commit phase)。在分布式事务中,有两个执行主体,分别是“协调器”和“参与者”,其中“协调器”接受应用的请求,“参与者”执行“协调器”下发的指令,完成数据的持久化操作。在2PC协议中,协调器和参与者相互配合,共同实现事务的ACID特性。
一、准备阶段(prepare phase),在这个阶段,协调器给所有参与者发送Prepare消息,通知每个参与者将提交操作所需要使用到的信息和资源全部写入磁盘,完成持久化,此时事务没有提交。
二、提交阶段(commit phase),协调器通知参与者,执行提交或回滚操作。如果协调理器在准备阶段收到了参与者的执行失败或者超时消息,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息。参与者根据协调器的指令执行提交或者回滚操作,并释放事务处理过程中持有的锁资源。
一旦准备阶段执行成功,那么事务提交需要的所有信息都已完成持久化落盘,即使后续提交阶段某个参与者发生错误,该参与者可以从持久化的信息中尝试再次提交,直至提交成功。最终该分布式事务在所有参与者上的状态一定是相同的:要么所有参与者都提交,要么所有参与者都回滚。因此,对应用来说,该事务的状态变化是原子的。
2PC事务状态保持
传统2PC事务在全局提交阶段可能出现失败,例如协调器宕机,这会造成集群内各节点的提交状态不一致,破坏事务的原子性,且2PC事务持续占有已申请的锁,可能造成其它事务因无法获取锁而不能继续执行,严重时可能导致整个集群卡住,因此,需要检查这类事务的存在,并尽快推进2PC的完成(提交或回滚)。
针对上述问题,GBase 8c优化了2PC的执行流程,设计了2PC事务状态保持功能,确保集群能够持续提供服务。
如图中所示,当协调器宕机之后,系统会立即检测到该问题,并自动选出一个健康的协调器,由后者接管故障协调器上所有未完成的2PC事务。
新的协调器会收集所有未完成的2PC事务,检查各个2PC事务所处阶段,并决定每个2PC事务应当提交或者回滚,然后发送相应指令到各个参与者,完成全部2PC流程,确保系统不被阻塞。
小结
综上所述,GBase 8c通过两阶段提交来实现分布式事务,确保所有跨节点事务的原子性、一致性、隔离性和持久性。两阶段提交可以保证分布式事务要么全部提交成功,要么全部提交失败,不会产生事务在部分节点提交成功,部分节点提交失败的情况。
对于提交成功的分布式事务,GBase 8c确保从任意节点访问都可以获得同样的结果,实现分布式事务的强一致性。
关于 GBase 8c
GBase 8c 是一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态,能灵活应对OLTP、OLAP以及极致性能场景。GBase 8c 具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云,为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。同时,GBase 8c产品支持同城双活、两地三中心等容灾方案,全局无单点,具备高达99.999%的高可用能力;其凭借全局锁管理、事务状态保持等重要特性,保证在系统出现异常的情况下,具备自愈的能力;GBase 8c弹性伸缩的能力,可以灵活应对极端场景下的性能需求;其灰度发布的特性,给应用频繁上下线提供了保障。