PolarDB采用Shard Everything架构,利用分布式共享存储实现存储和计算的分离。技术架构

计算节点与存储节点分离的架构设计给PolarDB带来了实时的水平扩展能力。由于单个数据库实例的计算能力有限,传统的做法是通过搭建多个数据库副本来分担压力,从而提供数据库Scale out的扩展能力。然而,这种做法需要存储多份全量数据,并且频繁同步日志数据造成了过高的网络开销。此外,在传统数据库集群上,增加副本需要同步所有增量数据,这带来了同步延迟上涨的问题。PolarDB将数据库文件以及Redo log等日志文件存放在共享存储设备上,确保主节点和所有副本共享同一份全量数据和增量日志数据。节点间只需要同步内存里的元数据信息,通过MVCC机制的保证,就能支持跨节点读取数据的一致性,非常巧妙地解决了主实例和副本之间的数据同步问题,大大节约了跨节点的网络开销,降低副本间的同步延迟。

PolarDB的计算节点,主要实现了SQL解析和优化、以及查询并行执行与无锁高性能事务处理,计算节点之间通过高吞吐的物理复制协议同步内存状态。数据库节点最多可以扩容到16个,其中1个读写节点,其他均为只读节点。利用上述的实时扩展能力,PolarDB可以在5分钟内快速拉起一个新的只读节点,挂载同一块存储数据卷,不需要复制拷贝数据即可对外提供服务。

计算节点与存储节点之间通过理解数据库语义的智能互联协议将filter和projection等算子从计算层下推到存储层执行。为了保证事务和查询语句的低延迟,同时降低计算节点之间状态同步的延迟,计算节点和存储节点之间使用25Gb高速RDMA网络互联,采用Bypass kernel的用户态网络协议层进行通讯。

PolarDB最高支持100TB存储空间,按实际使用的容量动态扩容,不影响业务的正常使用,同时也按照实际用量进行计费,只需要为实际使用的空间大小付费。PolarDB的存储层采用的是阿里云自主研制的分布式文件系统PolarFS。PolarFS是国内首款面向DB应用设计的采用了全用户空间I/O栈的低延迟高性能分布式存储系统(参见VLDB 2018 上的文章 PolarFS: An Ultra-low Latency and Failure Resilient Distributed FileSystem for Shared Storage Cloud Database),其具备与本地SSD硬盘架构相当的低延迟高性能I/O能力,同时也以分布式集群的方式提供了优异的存储容量与存储性能的扩展能力。PolarFS作为一款与PolarDB深度协同的存储基础设施,其最核心的竞争力不仅体现在性能和扩展性方面,更深层次的则是在面临有许多挑战性的PolarDB客户业务需求和规模化的公有云研发运维过程中而长期积累形成的一系列高可靠、高可用、与数据库协同设计的存储技术。

PolarDB中内置的数据库智能代理可以对应用程序提供一个统一的入口地址,屏蔽底层的多个计算节点的设计,在故障切换、增减节点时,对应用程序透明,无需跟着修改数据库的连接地址。同时这层数据库代理在应用程序和数据库中间,也起到了基于会话或请求的缓冲、合并、复用和负载均衡等流量上的管控,可以更好地处理诸如高并发等特殊场景。