关于存储引擎:PolarDBX-存储引擎核心技术-Paxos-多副本

PolarDB-X作为PolarDB分布式版,是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩大和超高可用的云时代数据库服务。PolarDB-X在架构上能够简略分为CN节点和DN节点。计算节点CN负责SQL的解析和执行,存储节点DN负责数据的分布式事务和高可用存储。本文次要对存储引擎外围中高可用局部具体技术解读。 背景传统的存储引擎高可用次要采纳主备同步的形式,然而主备同步形式人造存在以下限度: 高性能与数据一致性的取舍:主备复制采纳强同步形式会导致主库写入性能升高,采纳异步形式无奈保障主库宕机时备库无损提供一致性保障,半同步形式尽管能无效缓解性能升高,但同样无奈提供严格的一致性保障零碎可用性:主备库形式在面临网络故障或提早较大场景时,可能会存在主库迟迟无奈提交事务,不能及时主备切换,从而影响零碎的可用性针对主备库形式的问题,以后业界次要采纳基于多正本的高可用存储引擎计划。PolarDB-X同样基于该路线,自研了分布式一致性协定模块 X-Paxos,并将其与MySQL引擎深度联合,造成了PolarDB-X的多正本高可用存储引擎。 个性下图是PolarDB-X多正本存储节点的根本架构,展现了一个部署三个正本的PolarDB-X DN集群。PolarDB-X DN集群是一个单点写入,多点可读的集群零碎。在同一时刻,整个集群中至少会有一个Leader节点来承当数据写入的工作。PolarDB-X DN节点的每个实例都是一个单过程的零碎,X-Paxos被深度整合到了数据库内核之中,替换了原有的复制模块。集群节点之间的增量数据同步通过X-Paxos来驱动实现,不再须要内部手动指定复制位点。 总的来说,PolaDB-X多正本存储引擎具备以下个性: 强一致性保障:X-Paxos基于强Leadership的Multi-Paxos实现,大量实践和实际曾经证实了强Leadership的Multi-Paxos,性能好于Multi-Paxos/Basic-Paxos。PolarDB-X在解体复原时的一致性问题上更是做了深刻的保障高性能的数据同步:具备Batching/Pipelining形式的高效日志传输,具备多线程异步的高效数据传输,具备X-Paxos日志和Binlog交融的极致精简对立灵便的运维容灾:在线增加/删除/权重化配置任意节点,具备手动/主动选主的灵便策略低成本的数据存储:翻新引入Logger角色正本,让三正本具备最低两份存储的数据存储开销上面针对以上个性别离进行深刻解读。 原理强一致性保障 强一致性保障次要依赖X-Paxos模块,上图展现的X-Paxos整体架构,整体可分为网络层、服务层、算法模块、日志模块4个局部: 网络层:基于libeasy网络库实现。libeasy的异步框架和线程池十分符合咱们的整体异步化设计,同时咱们对libeasy的重连、日志等逻辑进行了批改,以适应分布式协定的需要服务层:驱动整个Paxos运行的根底,为Paxos提供了事件驱动,定时回调等外围的运行性能。每一个paxos实现都有一个与之严密相干的驱动层,驱动层的架构与性能和稳定性密切相关。算法模块:一致性协定的外围,包含基于强Leadership的Multi-Paxos实现的选主模块,采纳预读缓冲区/热缓冲区的数据管理模块,复用Enhanced Multi-Threaded Slave技术的同步传输利用模块,以及扩大sync_relay_log_info零碎表的集群元数据模块。日志模块,本来是算法模块的一部分,出于对极致性能要求的思考,咱们把日志模块独立进去,并实现了一个默认的高性能的日志模块。如果说算法模块是运行时强一致性的保障,那么日志模块就是容灾时的强一致性保障。 日志模块和Binlog极致耦合,同时也是保护解体复原逻辑的要害局部。Paxos多正本强统一算法网上介绍很多,这里不再论述。咱们重点阐明下PolarDB-X中的日志模块实现。 日志模块在原有的MySQL主备复制模式中,Master节点负责写入binary log,并提交事务。Slave节点通过IO线程从Master节点发动dump协定拉取binary log,并存储到本地的relay log中。最初由Slave节点的SQL线程负责回放relay log。 默认状况Slave节点除了产生relay log,还会依据log-slave-updates有一份冗余的binary log。 PolarDB-X存储节点整合了binary log和relay log,实现了对立的consensus log,节俭了日志存储的老本。当某个节点是Leader的时候,consensus log表演了binary log的角色;同理当某个节点被切换成Follower/Learner时,consensus log表演了relay log的角色。新的consensus log基于一致性协定和State Machine Replication实践,保障了多个节点之间的数据一致性。 日志模块也接管consensus log的同步逻辑,勾销Relay IO线程,复用Relay SQL线程和Relay Worker线程,反对MTS多线程并行回放。同时提供对外的接口来实现日志写入和状态机回放。 依据算法模块和Binlog的依赖,日志模块引入了四种日志类型: Consensus Log Event:标记在每个事务的Anonymous_GTID日志之前,用于记录以后事务对应协定层index、term、flag等元信息Previous Consensus Index Event:写在每个binary log文件的最开始,Format_description events之后,Previous_gtids events之前,用于标记以后文件起始的事务indexConsensus Cluster Info Log Event:记录多正本集群配置变更的信息Consensus Empty Log Event:记录X-Paxos协定选主日志PolarDB-X日志模块同样革新了MySQL原有事务提交的流程。MySQL的Group Commit分为三个阶段:flush stage、sync stage、commit stage。对于多正本的Leader节点,PolarDB-X DN节点在 Binlog 的 Flush 和 Sync 过程中将携带Consensus Log Event的Binlog 内容同时播送到所有 Follower。所有进入commit stage的事务会被对立推送到一个异步队列中,进入quorum决定的断定阶段,期待事务日志同步到少数节点上,满足quorum条件的事务才容许commit,以保证数据的强统一。 ...

September 19, 2023 · 2 min · jiezi