《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL开源路线图(2) https://developer.aliyun.com/article/1232546?spm=a2c6h.13148508.setting.15.5e4f4f0ecmbIFO
开源路线图
(一)开源路线图
基于背景、技术架构等方面的考量,我们最终提出了开源产品的路线图。
首先开源的版本是基于X-Consensus共识协议的高可用集群版本,该版本主打的是高可用特性,让用户可以快速自建一个和阿里集团内能力一样的数据库集群底座。
在实现极高吞吐的情况下,支持Leader跟Follow间的全局一致性,故障时保证数据不丢失,并且Follow能够快速地升为Leader,对外进行服务,该版本解决用户对高可用的一些最根本、最初步的需求。
在第二阶段我们将推出基于混合逻辑时钟HLC的高扩展分布式版,这个版本将实现Shared Nothing架构,支持数据库集群的水平扩展,解决单机存储容量受限问题,并支持高并发和高吞吐的事务处理。
通过分布式事务和分布式时钟HLC做到分布式全局一致,也就是说整个分布式数据库集群对外呈现单机数据库的特性,用户应用像使用单机数据库那样获得ACID的支持。
在第三阶段,我们把前两个阶段积累的大部分能力以插件化的形式改写,包括分布式事务,分布式SQL计算,Sharding和弹性,从而使得我们的工作对社区内核的开发是垂直的,可以互补,这样我们用户就可以快速地升级数据库内核版本,同时保留我们提供的分布式弹性和高可用的特性。路线图简洁地体现了我们对云化数据库的需求的理解,通过开发和社区互补的工作,实现对社区的增强,同时保持社区的
兼容,实现生态统一,最小化用户的使用和升级代价。
(二)X-Consensus 高可用集群版
下面介绍每一个阶段的主要特点。
我们第一期开源出来的项目称为高可用集群版,顾名思义就是围绕高可用打造产品特性。
上图左边显示的是版本架构图,这个架构中包括多个组件,比如Leader、Follower、Logger数据库节点,其内核都是PG。CM集群管理组件,负责系统和节点的启动、停止、集群操作等。
唯一核心的是称为X-Consensus的阿里自研的共识协议。在X-Consensus的支持下,PolarDB实现了节点故障不能恢复的时候,已提交数据不丢失,并且保证对外一致性。
在实践层面上,PolarDB 仍然使用PG自带 Streaming Repliation,而是通过X-Consensus共识协议,保证节点间日志同步的位点的同步。这样做的好处是不改变内核的数据复制协议,减少对内核的侵入性修改,同时维护对工具生态的兼容。
这个选择反映了我们在开源项目中坚持的原则,就是做社区的补充,做的功能最好是垂直于社区的功能和发展,共识协议的稳定性和正确性是其核心能力。我们使用的协议已经被使用在阿里集团内部业务成千上万的后台数据库,经过多年的高压测试和实际负载的打磨,相信其作为一个开源数据库协议被大家接受,肯定也会成为这个方向的一个标杆产品,后续这个协议将会作为独立开源产品被推出。
除了稳定性和正确性的保证,本次开源项目还使用了该协议的多角色能力,支持Leader、Follower和Logger。其中Logger没有数据库,数据只保留一份日志参与选举,但是不能被选举。Logger角色的引入将减少1/3的数据存储,同时保留共识协议在下面一些的能力,比如自动选主,比如网络性能抖动时候对事务提交的影响。Logger可以参与选举,就可以在自动选主时快速找出多数派,当网络性能抖动时,事务提交需要的日志同步,可以在Logger节点和Follower节点间进行选择,避免一些网络抖动的影响。共识协议保证了快速和正确的选举,数据库高可用的一个主要指标RTO(Recovery Time Objective),反映的是从故障发生、用户服务中断到服务恢复的时间长度,所以除了故障检测时间和选主时间外,还包括升主时间和服务恢复时间,二者和数据库的日志回放速度有关。
我们的测试发现,当Leader经受非常大并发的时候,Follower虽然实时地接收到了日志,但是其日志回放是串行的,所以Follower的同步状态经常落后Leader很长时间,当这种压力持续的时候,落后时间将持续增加,甚至超过一个小时。可以想象如果Leader故障不能恢复,那么Follower需要恢复一个小时时间,才能完成升主并对外服务,也就是说RTO可能会达到一个多小时以上,这个是大部分在线数据库应用难以接受的。
所以根据这个需求,我们的项目中实现了Follower的并行日志回放,在保证回放结果正确一致外,实现了Leader即使有很大的并发压力,比如几十万TPMC的 TPCC负载,Follower上的回放落后时间仍然维持在几秒甚至更小的时间范围之内。
所以这个版本的主要特性就是打造高可用的数据库服务,包括共识协议的使用,多复制角色的支持,以及快速和并行的日志回放。
《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL开源路线图(4) https://developer.aliyun.com/article/1232542?spm=a2c6h.13148508.setting.17.5e4f4f0ecmbIFO