PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。PolarDB实现了三项创新:第一,业内首次实现内存与计算、存储的三层解耦,实现内存池化,使得弹性能力呈数量级提升,同时大幅度降低成本;第二,上线多主架构,进一步提升可用性、并发处理、弹性能力,高效应对像“双11”一样的流量洪峰;第三,成为真正的HTAP数据库系统,可同时处理OLTP和OLAP型混合负载。菜鸟基于PolarDB,在物流场景下也做一些实战的尝试,目前取得的效果也非常的不错。
PolarDB(这里指PolarDB For MySQL)是一个基于共享存储技术的云原生数据库。


架构思路:共享存储架构
通过 RDMA 快速网络让上层的数据库内核看起来像是在使用本地的磁盘,实际上是分布式存储。上面可以有多个独立计算节点,一般是一写多读,也可以做多写多读,计算和存储分离,这就是共享存储架构。
POLARDB 有一个 PolarProxy,也就是前面的网关代理,PolarProxy 会对客户需求做分发,将写请求分配到主节点,而对于读请求而言,则会根据负载均衡以及读节点的状态实现请求分配,这样就能够尽可能地实现资源的最大化利用以及性能的提升。
高性能:
1:PolarDB-MySQL深度优化数据库内核,同时采用物理复制、RDMA高速网络和分布式共享存储,大幅提高性能。
链接
https://ata.alibaba-inc.com/articles/253137
2:PolarDB支持秒级加列&并行执行,减少停机窗口

高可用:
1:计算高可用: 主节点和只读节点之间采用 Active-Active 的 Failover 方式,提供 DB 的高可用服务。

注:节点5-10秒完成切换,在途事务不中断;POLARDB 突破了 MySQL、PG 等数据库对于单节点规格和可扩展性的限定,能够实现 100TB 存储容量以及每个节点100万 QPS 的性能。
相关文档:https://ata.alibaba-inc.com/articles/90561
2:存储高可用:在存储层,每个数据块都采用三副本高可用技术,同时对于 Raft 协议进行了修改,通过实现并行式的 Raft 协议保证了三副本数据块之间的数据一致性,提供了金融级高可用。备份可做到秒级。
3:双机房容灾

极致弹性:
在一写多读的情况下,POLARDB 能够实现快速伸缩。存储和计算分离能够带来的另一大好处是降低成本,因为存储和计算节点可以独立地进行弹性伸缩,充分体现成本优势。

注:polardb最多支持15个读节点;垂直升降配5分钟即可完成,水平扩缩节点2-4分钟即可完成
生态兼容
PolarDB 100%兼容MySQL协议及SQL语法及函数。

注:精卫已经支持了,TDDL客户端已经能够支持,TDDL配置流在2月底,TT现在不支持,需要推动ODPS兼容,12月底已经提需求,需要推动TT排期,预期2月底可以上线。
适用场景
场景1:TP场景,单库单表替代分库分表

带来的收益:
1.
天然支持跨表、跨行事务
2.
可以通过指定任意二级索引进行自由检索,而分库分表的每个检索都必须指定分片键
3.
拥有严格趋势递增的主键功能,写入性能优于分库分表,在数据行比较大的情况下更明显
(在单行大小0.8kb的场景下,单节点有2.5倍的写入性能提升)
实现原理:
底层的存储模型就是用的mysql的单表模型,使用起来的“体感”就跟mysql单表一样
当前的不足:
1.每个只读节点的buffer pool都是独立的,内存中的数据存在冗余,比“分库分表”费内存
(当前已经有了“分布式内存池”技术来解决这个问题,但没有被大规模验证)
2.innodb引擎还未增加压缩功能(正在开发中)
新特性

1:行级并发写入,多个master节点的行级并发写入,突破单点写入瓶颈
2:polarFusion实现事务、锁、缓存信息的全局协调
3:高度融合RDMA,实现高速的跨节点信息协调
场景2:HTAP一体化



带来的收益:
1.
同时支持高并发点查、“中等量级”的OLAP查询,在绝大多数情况下可以实现TP、多维检索、AP查询一体化。
2.
一体化后数据同步问题、同步一致性问题都不存在了,额外的开发与维护成本也没了
实现原理:
1:单机并行

2:跨机并行

3:行列混存

4.SQL Parser/优化器:面向行列混合存储的CBO优化器,可以根据代价自动选择行存或者列存执行查询请求
当前的不足:
1.在“超重”的AP查询方面有所不足。比如对几千万行甚至几亿行的数据集进行聚合查询。
2.列查询能力跟ADB差不多
3:与传统OLAP数据库ClickHouse相比:PolarDB MySQL开启列存索引后,与ClickHouse性能相比各有优劣。其中PolarDB MySQL在单表Scan/AGG、Join等场景中表现突出。未来PolarDB MySQL的列存索引特性将在聚合加速、窗口函数等方面持续优化和突破。
成本对比
常用TP数据库成本对比
存储成本
假设基于ESSD架构的polardb跟cddc一样,都是按照硬件成本价收费
| 磁盘规格 | 数据压缩 | 存放1T mysql裸数据存储费用/月 | 是否按需付费 |
cddc | PL0 | 无压缩功能 | 443元 | 接近按需付费 |
cddc | PL1 | 886元 | ||
基于polarFS的polardb,innodb引擎 | - | 弹内无压缩功能 (弹外有基于FPGA的压缩) | 1333元 | 按需付费 |
基于polarFS的polardb,x-engin引擎 | ZSTD | 1333元 * 压缩率 | ||
基于ESSD的polardb,innodb引擎 | PL0 | 功能在开发中 (假设已经可用) | 443元 * 压缩率 | 接近按需付费 |
基于ESSD的polardb,innodb引擎 | PL1 | 886元 * 压缩率 | ||
基于ESSD的polardb,x-engin引擎 | PL0 | ZSTD | 443元 * 压缩率 | |
基于ESSD的polardb,x-engin引擎 | PL1 | 886元 * 压缩率 | ||
****(诺曼底申请模式) | - | ZSTD | 1002 * 压缩率 | 按总包付费 |
计算成本
cddc,polardb收取的是阿里云ecs的成本价
oceanbase收取的是阿里云ecs的成本价+liscence费用(按核收取)
polardb存计分离,扩缩容很轻量,计算资源可以按需申请,非常灵活。
库 | 收费参考 | 扩缩容时长 |
cddc | mysql.z2.2xlarge.25c(16core 32G) 的实例 1044元/月 一个实例由三个节点组成,收费按实例收 裹裹实操库用了8个这样的实例, (高峰期cpu30%,内存69%)。 计算费用8352元/月 | 提工单人工处理 , 整个流程达数小时 |
polardb | 单个polar.mysql.x8.2xlarge(16core 128G)节点 3600元/月 梧桐项目用了1个主节点+1个只读节点,总计算费用7200元/月 | 支持自助扩缩、预设阈值自动扩缩。分钟级完成。 |
实战场景
控制塔

实战结果 一句话成果:在控制塔的数据链路场景下,用PolarDB替换mysql+精卫+ob,性能无损,成本下降91.4%
性能指标
原数据链路 | 迁移到TAB数据服务 | |||||
平均RT | 平均QPS | 主要服务名称 | 平均RT | 平均QPS | ||
约3.7 | 6900 读:约4000 写:约2900 | cainiao-ecc.transient_update_by_primary_key_selective | 6.0991 | 3.7529 | 1494.65 | 6928.1999 |
cainiao-ecc.transient_delete_by_primary_key | 5.187 | 866.0333 | ||||
cainiao-ecc.transient_insert_selective | 6.1933 | 725.9833 | ||||
cainiao-ecc.transient_get_by_id | 2.0638 | 1511.2333 | ||||
cainiao-ecc.transient_get_by_biz_id | 2.1809 | 2330.3 | ||||
M2C裹配-商家服务(微信沉睡粉丝唤醒)(已落地)
菜鸟裹裹商家寄件维护了30个公众号,共1600W+粉丝。虽然公众号粉丝众多,但是大部分都是沉睡粉丝(即近30天无寄件行为)。为了能增加粉丝活跃度,提供寄件转化单量,业务急需对1600W粉丝进行触达,将优惠、活动等信息及时传递给微信粉丝。微信目前提供不限次数的给粉丝发送模板消息的能力,业务希望使用此免费通道达到最大范围的粉丝触达。在触达完成后,根据触达成功率、消息点开率、菜单打开率、优惠券领取等行为数据以及下单单量这一目标数据来分析触达文案、优惠方式的效果,进一步优化触达的内容,达到更好的效果。
1、PolarDB单表方案,天然支持以公众号进行统计分析。
2、8亿数据量,存储成本预计300/ 月
PolarDB成本
成本 | 数据量 | 金额 |
存储成本 | 8亿 | 预计300/ 月 |
接入成本
事项 | 是否需要人工介入 | 成本 |
数据库申请 | 自助申请,自动生成实例 | 0.5人日 |
DMS配置 | 一键同步 | 0 |
数据库表结构设计 | 与Mysql操作一致,使用DMS操作 | 无新增成本 |
Java代码 | 新增数据库配置 | 0.5人日 |
sql | 与mysql语法一致 | 无新增成本 |
总计 | | 1人日 |
数据库性能表现
数据库QPS最高到2000, CPU使用率最高到30%,表现平稳






