PolarDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库。在兼容传统数据库生态的同时,突破了传统单机硬件的限制,为用户提供大容量、高性能、高弹性的数据库服务。
PolarDB采用了共享存储(Share Storage)的整体架构,采用远程直接数据存取(RDMA)高速网络互连的众多区块服务器(Chunk Server)一起向上层计算节点提供块设备服务。一个集群可以支持一个主(Primary)节点和多个二级(Secondary)节点,分别以读写和只读的挂载模式通过RDMA挂载在Chunk Server上。
PolarDB的计算节点通过libpfs挂载在PolarStores上,数据按照Chunk为单位拆分,再通过本机的PolarSwitch分发到对应的Chunk Server。每个Chunk Server维护一组Chunk副本,并通过ParallelRaft保证副本间的一致性。PolarCtl则负责维护和更新整个集群的元信息。
PolarDB采用了大量的Bypass Kernel的设计。首先是新硬件NVME和RDMA的使用,摆脱了IO访问过程中的用户态内核态交互。在绑定CPU,非阻塞IO的模式下,通过状态机代替操作系统的线程调度,达到Bypass Kernel的目的。
PolarStore中采用三副本的方式来保证数据的高可用,需要保证副本间的一致性。为了获得更好的访问速度,PolarStore提出了ParallelRaft协议,在Raft协议的框架下,利用块设备访问模式中方便判定访问冲突的特点,允许一定程度的乱序确认和乱序提交。
PolarDB采用物理复制的方式,使得Secondary上依然需要从Primary上的复制逻辑来刷新内存结构,包括Buffer Pool以及各种Cache。由于读写节点和只读节点访问的是同一份数据,传统的基于Binlog的逻辑复制方式不再可用。物理复制由于最终执行顺序的变化,导致主从之间出现不同的物理数据结构。
总的来说,PolarDB作为阿里巴巴自主研发的下一代关系型分布式云原生数据库,具有大容量、高性能、高弹性的特点,能够满足现代业务场景对可扩展性和可靠性的需求,同时兼容传统数据库生态,具有广泛的应用前景。