随着互联网和云计算的飞速发展,数据库也正在加速向云服务方向演进。云数据库服务在数据库整体市场中的占比越来越大云原生以及分布式技术正在重塑数据库整个技术栈。

阿里云在自身互联网业务和云数据库服务有丰富的实践经验,在高可用,分布式,云原生,存储与计算分离等技术上有深厚积累,为了更进一步促进整个数据库产业的变革,现在将这些关键技术组件和系统包括内部MySQL分支AliSQL(目前RDS服务的内核),分布式一致性协议库X-Paxos,高性价比存储引擎X-Engine,基于PostgreSQL开源数据库打造的分布式数据库产品PolarDB for PostgreSQL一起开源,与社区一起共建云原生分布式数据库生态。

阿里云数据库秉承组件模块化,兼容标准化协议的方式,可以灵活组合和复用这些技术,打造更多的系统解决方案,不断完善和丰富云原生分布式数据库的形态,满足更多样化的用户需求。

%title插图%num

AliSQL 8.0

2018年初,我们预见到MySQL 8.0的数据字典、实时加列、Hash Join和CTE等功能对各种业务场景的重要性,便将研发重心转向AliSQL 8.0的研发,也是这一次开源的核心版本。

AliSQL 8.0已经过集团内部和公共云场景的考验,在功能、性能、稳定性和安全性上都有非常扎实的技术创新和功能积累。全网开启的Thread Pool支撑了海量的并发和连接数,内核级的秒杀和并发控制技术支撑了瞬间业务流量冲击,Faster DDL保障了高峰时期DDL操作的稳定性,各种增强的性能统计指标和信息加快了问题分析和排查的速度,存储层和通信层的加密功能保障了数据的安全。更多详情可访问阿里云官网AliSQL内核功能介绍(https://help.aliyun.com/document_detail/129925.html?spm=a2c4g.11174283.6.585.48044c22wfWYOe),强劲的数据库内核是支持和服务好关键业务场景的基础。

X-Paxos

X-Paxos是C++编写的Paxos分布式一致性协议库,在阿里集团内部已经广泛用户诸多分布式系统来保证数据强一致性下的高可用能力,是一个得到充分验证的Paxos协议工程实现。X-Paxos会自动探测网络环境,根据传输延时来自适应调整发包的频率和批量聚合的大小,在跨数据中心长传链路上也同样保证吞吐能力。

X-Engine

阿里自研的高压缩及冷热存储分离的存储引擎,基于LSM架构之上做了大量优化,求取性能与成本之间的*佳平衡(详见SIGMOD’19论文(https://dl.acm.org/doi/pdf/10.1145/3299869.3314041)),兼容MySQL,适用于大数据量的TP数据库,目前已经集成在自研产品PolarDB中实现了存储计算分离与一写多读,未来也会将这一技术在AliSQL下开源。

PolarDB for PostgreSQL

基于PostgreSQL开源数据库打造的分布式数据库产品PolarDB for PostgreSQL,蕴含了多项阿里云数据库技术,这些核心技术在公有云和混合云场景下都已经得到了广泛应用。

PolarDB for PostgreSQL率先开源的三节点高可用版本是PostgreSQL原生WAL复制协议与阿里自研的Paxos一致性协议算法库X-Paxos的一次完美结合,Logger节点的*小化资源成本、Learner节点的跨域只读、Leader节点的多模式选举等特征也让PolarDB for PostgreSQL独具特色。

PolarDB for PostgreSQL紧随其后开源的分布式插件版,具有很好的规模化扩展能力和性能。这得益于全局强一致性所采用混合逻辑时钟(HLC)实现,MVCC和2PC协议结合算法实现的分布式事务。基于PostgreSQL独有的插件化技术实现分布式Sharding功能,*大限度的保证了分布式SQL计算对单机SQL的兼容能力。

%title插图%num

开源社区

在开源社区方面,我们一直保持与MySQL&PostgreSQL社区的密切沟通,每年发现并反馈数十个重要问题和缺限给社区,员工也经常获得社区Award*项,但我们发现很难将一些侧重场景的好需求提交给上游社区,比如著名的秒杀补丁,始终未能合并入上游社区。深觉我们不仅要有自己的开源MySQL&PostgreSQL分支,更需要建立自己的开源社区,好集中更多的力量和以更快的响应速度来解决更多业务问题和需求,从而进一步推动开源数据库在国内的快速发展,并在国际开源社区上发挥更大的国内技术影响力。

阿里云数据库对开源社区的投入力度会越来越大,期望更多的开源社区爱好者能够参与进来,与我们一起共建生态,服务用户,推动技术变革。

源码开放地址:

https://github.com/alibaba/PolarDB-for-PostgreSQL