在近期的上海ACE同城会上,阿里云数据库高级产品专家吴林为大家分享了云原生分布式数据库PolarDB-X的技术架构、业务场景以及最佳实践等。
本文内容根据演讲录音及PPT整理而成。
本次分享将主要分为四个方面:
一、数据库简介
二、PolarDB-X 架构
三、PolarDB-X 业务场景
四、PolarDB-X 案例
一、数据库简介
(一)数据库服务的挑战
数据库经过这么多年发展已经非常成熟,阿里云数据库基本是围绕以下三个部分来做的。
首先是数据库安全;其次是如何保障业务连续稳定运行,数据不丢失;最后是随着我们业务发展越来越迅速,业务量是以前的十倍甚至百倍的时候,如何支持业务发展,必须寻找适当的解决方案来解决这个问题。
(二)阿里云数据库提供完整的闭环生态
目前,阿里云在公共云上提供了近三十款数据库服务,涵盖范围很广。大家比较熟知的有关系型数据库RDS、MySQL、SQL Server、PostgreSQL等,也有下面会提到的云原生数据库PolarDB。
PolarDB是一个家族,它里面有云原生的数据库PolarDB,还有云原生分布式数据库PolarDB-X。我们平时会接触到的输出形态是直接上阿里云的官网获取公共云服务,除此之外还有线下输出的企业版和敏捷版。
(三)阿里巴巴 PolarDB产品家族
上文提到PolarDB是一个家族,我们先看云原生分布式数据库PolarDB-X,它其实就是MySQL生态,完全兼容MySQL,但它是Shared Nothing的架构。
对于PolarDB来讲的话,支持三款引擎生态,分别是MySQL、PostgreSQL和Oracle。有些用户以前用的是Oracle数据库,希望能够用云服务,PolarDB高度兼容Oracle协议,可以用这款数据库进行替代Oracle。
(四)阿里巴巴 MySQL 技术和产品发展历程
阿里巴巴在数据库领域有较长的使用经验和发展历史。
刚开始的TDDL在淘宝上有大量应用,后续我们推出RDS、DRDS的服务,DRDS的服务是PolarDB-X的前身。
(五)云原生数据库架构概述和演进
云原生资源解耦池化和分布式水平扩展的能力,可提供资源的独立弹性,是云数据库主要发展方向。
上图是我们整个数据库的架构和演进历程。
刚开始大家用的都是传统的单机数据库,它有一个很明显的弱点,就是扩展性不足。当业务发展的时候,要么是scale up这种扩展,要么就是scale out。
公共云上的PolarDB MySQL生态,用的一项技术是共享存储,共享存储带来的一个好处是快速进行弹性扩展,因为它不涉及到数据搬移,所以弹性非常好。
另外一条路就是我们的PolarDB-X,它是Share Nothing架构,不断地进行横向扩展,能够满足大数据量的诉求。
我们认为未来这两种会进行一个融合,使得分布式数据库也能够应用到共享存储,具备共享存储的能力,实现快速弹性扩展。
二、PolarDB-X 架构
(一)PolarDB-X:整体架构
PolarDB-X架构如上所示,它主要包含以下几个部分:
- 元数据服务(Global Meta Service,GMS)
1)提供全局授时服务(TSO)
2)维护Table/Schema、Statistic等Meta信息
3)维护账号、权限等安全信息
- 计算节点(Compute Node,CN)
1)基于无状态的SQL引擎提供分布式路由和计算
2)处理分布式事务的2PC协调、全局索引维护等
- 存储节点 (Date Node,DN)
1)基于多数派Paxos共识协议的高可靠存储
2)处理分布式MVCC事务的可见性判断
- 日志节点(Change Data Capture,CDC)
1)提供兼容MySQL生态的binlog协议和数据格式
2)提供兼容MySQL Replication主从复制的交互
最上面的GMS提供了一个全局授时服务,因为分布式数据库是Share Nothing架构,每个存储层以前都有自己的时钟和Binlog。当我们有一个全局授时服务的话,我们可以对Binlog进行排序。GMS这里还维护了一些元数据,包括账号权限等信息。
计算CN节点提供了SQL解析、优化、路由等能力,提供分布式的事务。
存储DN节点是用来存储的数据,基于Paxos协议来保障数据的可靠性。
CDC节点,我们对所有的Binlog做了优化排序之后,对外提供的是一个统一的Binlog,带来的好处是方便数据可上可下。
(二)PolarDB-X 整体部署结构
关键词:k8S、多租户、DBPaaS(On-Premise、 On-Demand)
我们现在这套架构是基于K8s架构体系实现的,也提供了对应的Open API。在阿里云上会有一个用户控制台,有些用户如果不想用这个控制台,也可以通过OpenAPI接口,自己进行快捷的操作。
(三)PolarDB-X :计算节点
关键词:MySQL协议兼容、SQL优化器、SQL执行器
计算节点(CN)兼容MySQL协议,上面有SQL优化器和执行器,可以看到支持RBO(Rule-Based Optimization)和CBO(Cost-Based Optimization)的优化,执行层面还支持AP这种数据操作。
(四)PolarDB-X:存储节点
关键词:私有RPC访问、Paxos多副本
可以看到存储节点(DN)我们用的是RPC协议,因为从性能的角度考虑,它是最优选择。
(五)PolarDB-X:GMS节点 + SQL流程
关键点:Catalog、优化器、执行器、私有RPC协议、存储引擎
上图清楚地展示了用户SQL的整个流程,用户的SQL进来后进行SQL解析,接着优化,然后执行。
我们保留了DN节点SQL解析、优化等能力,如果客户希望直接对这个DN节点进行操作的话,它是可以进行一些维护动作。
(六)PolarDB-X:CDC节点
关键点:兼容MySQL binlog/Replication机制,解决数据库上云在数据割接时的数据迁移和回流问题
刚才谈到CDC的节点提供了一个全局的Binlog,我们对Binlog进行了排序,也很好的去兼容了上下游。例如业务系统,希望把数据传输到运营系统去做一些数据分析,这也非常方便。包括把MySQL作为PolarDB-X的备库也是支持的,基于全局的Binlog,我们可以实现主备的复制。
(七)PolarDB-X:核心特性
PolarDB-X的架构有6个非常核心的特性。
首先是高可用性,可以做到RPO为0,数据不丢。其次具备高兼容性,能够和MySQL进行兼容,而且PolarDB-X主流国产操作系统和芯片互认证。然后还有高扩展能力,单实例可以突破256个节点。除此之外还支持HTAP的访问模式和极致的弹性能力。
最后是开放的生态,大家使用阿里云服务可能没有用到数据库引擎这样的服务,但是可能会用到我们的一些生态工具,例如用DTS做数据迁移,用DBS做数据备份等。
三、PolarDB-X 业务场景
(一)分布式数据库PolarDB-X解决的业务痛点
正如前文提到的,如果我们的业务场景能够用单机数据库解决,其实就不需要用分布式数据库,那么什么时候需要用分布式数据库?主要有以下四种场景。
当在线超高并发,扛不住的时候,我们就希望用分布式数据库来分担业务压力,分散到不同的数据库节点上。还有就是数据量非常大的时候,存不下,那么用分布式数据库是非常好的一个选择。以及复杂的分析查询性能会比较慢,或者单表数据量过大,我们曾经见过有些客户的单表数据有几亿条,这种情况查询的速度一定会比较差。
(二)PolarDB-X 2.0 主要适用场景
PolarDB-X 2.0 主要经典适用的场景归纳起来有以下6个。
首先是金融级的数据强一致,当我们用分布式数据库的时候,往往担心数据或者事务没有强一致性, PolarDB-X 2.0能够保证强一致性。
第二个是透明水平扩展的能力,对于客户的业务影响几乎可以做到无感。
之前有很多朋友会用MyCAT的分布式数据库中间件,接自己的数据库来实现分布式数据库,PolarDB-X 2.0 一体化服务能更好的进行替换这种开源场景。除此之外还包括单机平滑的演进,解决单机大表这些痛点。支持HTAP混合负载,以及海量的数据存储。往往我们的很多数据并不是热点数据,但是这个数据有保留期限,可以把它放到历史库里。
(三)典型业务场景:金融级数据强一致
实现金融级数据强一致性的关键点之一是TSO,我们有统一授时,大家用的所有时间都是统一的。
第二个是我们采用了两阶段提交(2PC:Two-Phase Commit)的事务提交模式,这种模式和银行转账的模式非常匹配。例如我们要跟朋友之间进行转账,先从我们的账上进行扣钱,然后把这个金额修改到朋友的账号上,那很显然就会用到这种2PC的交易模式。
(四)典型业务场景:透明水平扩展
另一个典型的业务场景是透明水平扩展,对于CN这一层是无状态的,添加新节点,只需要修改Load Balance的路由即可。
对于数据层,它会做数据迁移,数据迁移对业务影响是比较小的,因为刚开始做全量的迁移,然后再做增量的同步,此时对于原来的业务数据是没有什么影响的。
在实际应用过程中,当真正做切换的那一刻,我们还是建议有一个非常短的业务停机窗口来进行操作,如果业务量访问比较小的话也可以不停机,因为这个切换在秒级可以实现,对业务影响非常小。
(五)典型业务场景:替换开源分库分表
替换开源分库分表的操作可以直接通过DTS服务,把数据从自建数据库迁移过来,需要注意的是我们需要先在目标库手动创建表,然后再进行全量的迁移和增量的迁移。
(六)典型业务场景:单机平滑演进分布式
另一个典型业务场景是单机平滑演进分布式。
从以前的单机到分布式,我们支持用单表,如果用户要进行数据分片,我们也支持实现透明式的分片部署。
在实际的应用过程中,如果大表是超过5000万的,我们建议用户做一个拆分。
(七)典型业务场景:HTAP混合负载
对于HTAP这种混合负载,以前的方式都是通过ETL,是把业务数据从业务数据库里面通过数据抽取ETL的模式,把它抽取到AP类的数据库里面。
对于PolarDB-X分布式数据库,其实是一份数据,业务请求进入到PolarDB-X之后,系统内部会对它的业务请求做一个路由,把请求分发到对应的节点进行操作。有用户担心AP类的业务会影响TP业务,其实我们在内部做了一些隔离,能够保证AP请求不影响到TP业务。
(八)典型业务场景:海量数据大集中
还有一个就是刚才提到海量数据大集中,尤其像比较大的客户企业应用。它做全国大集中的时候,分布式数据库就非常适合这种场景;还有很多历史数据是要保留不能删除的,可以放到历史归档区进行存储,不影响热数据访问。
(九)PolarDB-X 2.0 其他场景
还有一些其他的场景,例如阿里云上有个叫TPS的全链路压测分析,我们进行了兼容一是可以主动检测业务是不是正常的,进行探活,二是做压测的时候也不影响真实的业务场景。
此外还有精细化分片策略,就是我们在数据分布的时候,希望把一类的业务数据放在一起,如果特别分散的话,当某一个节点数据出现问题,可能会在一定时间会影响业务,范围不可控。
另外还有数据安全,我们支持三权分立这种权限管理模式。大规模的数据库链接,线程池管理以及秒杀,我们会把并发的排队进行合并提交,例如秒杀活动,不要出现超卖的情况。
四、PolarDB-X 案例
(一)PolarDB-X 支撑双11集团电商业务
PolarDB-X支撑了阿里集团的双11电商业务,每年双11是狂欢购物节,它的TPS峰值都很高,PolarDB-X完全能够支持这一类高并发大访问量的场景。
(二)PolarDB-X 广泛应用于阿里巴巴集团
除了电商类的业务,阿里巴巴还有很多自营的业务,例如高德,钉钉,飞猪,盒马等,都是使用了PolarDB-X分布式数据库。
(三)PolarDB-X 支撑数字*、核心金融等各行业客户700+
除了在公共云上,PolarDB-X在线下也支持了各行各业的客户,例如数字*,金融行业等,包括今年很多的医保做数据大集中,都是使用了PolarDB-X分布式数据库。
(四)PolarDB-X 混合云多形态统一交付
关键词:基于k8s架构统一多形态交付,最小可支持3台物理机起步
PolarDB-X交付模式有多种,可以满足不同的诉求。
如果想用公有云的话,在公有云页面上可以直接进行购买。有些企业级的客户希望购买阿里云的云平台,数据库服务可以基于飞天平台,对应的我们有企业版的输出,这个规模相对会比较大。除此之外我们也有轻量化的输出,如敏捷版和即将推出的DBStack,最后还有一个支持做POC测试的体验版。