云数据库POLARDB产品解读之二:如何做到高性价比
现在做任何事情都要看投入产出比,对应到数据库上其实就是性价比。POLARDB作为一款阿里自研数据库,经常被问的问题是:性能怎么样?能不能支撑我的业务?价格贵不贵?很显然,在早期调研阶段,对稳定性、可靠性很难有量化的指标时,性能的好快就成了一个非常关键的决策因子。
POLARDB在一开始设计时就把性能作为一项关键的需求指标列入产品需求说明书,从架构设计到新硬件选型,再到代码实现,从驱动到分布式块存储,再到分布式文件系统和数据库引擎,打通整个技术栈做协同优化,最终才能保证性能上有数量级的提升。
高性能背后的技术

在2018杭州云栖大会上分享的这张架构图展示了POLARDB的内部细节。自下而上来看,POLARDB由__共享分布式存储PolarStore__,__分布式文件系统PolarFS__,__多节点的数据库集群PolarDB__和__提供统一入口的代理PolarProxy__这四部分组成。
PolarFS
PolarFS设计中采用了如下技术以充分发挥I/O性能:
- PolarFS采用了绑定CPU的单线程有限状态机的方式处理I/O,避免了多线程I/O pipeline方式的上下文切换开销。
- PolarFS优化了内存的分配,采用MemoryPool减少内存对象构造和析构的开销,采用巨页来降低分页和TLB更新的开销。
- PolarFS通过中心加局部自治的结构,所有元数据均缓存在系统各部件的内存中,基本完全避免了额外的元数据I/O。
- PolarFS采用了全用户空间I/O栈,包括RDMA和SPDK,避免了内核网络栈和存储栈的开销。
在相同硬件环境下的对比测试,PolarFS中数据块3副本写入性能接近于单副本本地SSD的延迟性能。从而在保障数据可靠性的同时,极大地提升POLARDB的单实例TPS性能。
PolarDB
在数据库PolarDB中开创性地引入了物理日志(Redo Log)代替了传统的逻辑日志,不仅极大地提升了复制的效率和准确性,还节省了50%的 I/O 操作,对于有频繁写入或更新的数据库,性能可提升50%以上。

PolarProxy
PolarProxy存在的意义是可以把底层的多个计算节点的资源整合到一起,提供一个统一的入口,让应用程序访问,极大地降低了应用程序使用数据库的成本,也方便了从老系统到POLARDB的迁移和切换。本质上,PolarProxy是一个容量自适应的分布式无状态数据库代理集群,动态的横向扩展能力,可以将POLARDB快速增减读节点的优势发挥到极致,提升整个数据库集群的吞吐,访问它的ECS越多,并发越高,优势越明显。
关于成本
抛开成本谈性能,都是耍流氓。
首先,POLARDB存储与计算分离的架构,可以让CPU、内存和磁盘摆脱互相制约的困扰,让计算和存储作为单独的资源池进行管理和分配,大幅降低资源碎片,提升整体的资源利用率。计算和存储的机型不同,我们还可以更有针对性地做定制和优化,降低单位资源的成本。
通用意义上,规模效应带来的边际成本递减这件事,会一直发生。在阿里巴巴超大规模的基础设施的基础上,我们可以持续不断地从全球供应链、低能耗数据中心、服务器研发等多个维度来降低我们的成本。
性价比
不管技术上有多先进,成本上有多低,最终还是需要用户认可。
所以,我们从用户角度来看,最关心的其实还是性价比,即同样的费用,是否可以获取更好的性能。
我们简单算笔账,来看一下POLARDB和RDS MySQL的性价比。
公平起见,我们使用同样的数据库配置,测试数据集和测试方法,然后分别计算出二者的价格和性能。
其中,
- 数据库配置采用生产环境常见的『8核 32G ,500G存储』的配置
- 数据集和测试方法采用通用的sysbench OLTP测试用例(--oltp-tables-count=10 --oltp-table-size=500000)
- 性能指标我们取QPS(Query per Second 每秒钟处理请求数)和TPS( Transaction per Second 每秒钟处理事务数)
此外,不管是RDS MySQL还是POLARDB,都具备了通过增加只读节点来达到横向扩展读(Scale out)的能力,不同的是,POLARDB随着节点数的增加,并不需要额外的存储费用,因此,我们需要多对比几种架构,从1个读节点到3个读节点,具体如下:
| 集群架构 | POLARDB 月价(计算规格+存储) | RDS MYSQL 月价 | POLARDB比RDS贵 | POLARDB 性能(QPS) | RDS MySQL性能(QPS) | POLARDB性能提升 | 千元性能指标(RDS vs. POLARDB) |
|---|---|---|---|---|---|---|---|
| 1主1备 | 2000*2 +1575=5575 | 4100+400=4500 | +24% | 53879.46 | 18625.49 | +190% | 4139 vs. 9664 |
| 1主2备 | 2000*3+1575=7575 | (4100+400)+(5.13+0.001*400)*24*30=8481 | -10% | 66626.63 | 26357.94 | +150% | 3107 vs. 8795 |
| 1主3备 | 2000*4+1575=9575 | 400) | -23% | 80268.27 | 43087.33 | +86% | 3457 vs. 8383 |
表中的一些基础价格(以2018.11.8 当天价格为例):
- POLARDB存储月价:1575元/月 = 500GB * 3.5元/GB/月
- POLARDB 1个节点的月价是2000元
- MySQL高可用版实例(双节点)的月价是4100元
- MySQL高可用版实例存储月价:400元/月 = 500GB * 0.8元/GB/月
- MySQL只读实例小时价:5.13元/小时
- MySQL只读实例存储小时价:0.001元/GB/小时
用下图展示会更清晰一些,其中灰色的『备库』不对外提供服务。由此可见,POLARDB的性价比非常高,所有节点都提供服务,因此资源利用率也较RDS高。

彩蛋——免费使用的复杂SQL查询加速
在实际应用中,客户的业务是复杂的,很多时候业务访问会掺杂着大量的统计分析类的复杂SQL(Ad-hoc query),这时候MySQL的单线程模型处理起来就会捉襟见肘。
POLARDB为了应对这种场景,内置了并行查询引擎,针对大表复杂查询(比如TCP-H基准测试)性能可提升8倍,特别适用于执行时长超过1分钟的慢SQL(比如报表查询)。同时还支持了集合运算、WITH、窗口函数OVER等高级语法。该功能目前已经公测,免费使用,详细参考『SQL加速』。
以下图表是我们做了一个对比测试,在使用SQL加速的情况下,查询效率是不使用SQL加速直接查询的8倍以上,具体的测试用例包括,
- Point query on non-indexed column(无索引列的单行查询)
- Aggregate query(聚合查询)
- TPC-H

目前SQL加速功能,提供了额外的连接地址,提供非事务的复杂查询服务。底层的计算节点和存储复用POLARDB现有的资源,一份数据多种访问方式,省去了数据迁移的烦恼,也不需要额外的成本投入。
技术实现上,包括以下几点,
- 插件式计算引擎,负责分布式算子计算
- 单表计算下推到数据库引擎
- 大SQL并行计算

相关文章:
- 云数据库POLARDB优势解读系列文章之①——10分钟入门
- 云数据库POLARDB优势解读系列文章之②——高性价比
- 云数据库POLARDB优势解读系列文章之③——分钟级弹性
- 云数据库POLARDB优势解读系列文章之④——物理复制
- 云数据库POLARDB优势解读系列文章之⑤——会话读一致性
阅读原文
更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight
云数据库POLARDB产品解读之二:如何做到高性价比的更多相关文章
- 云数据库POLARDB优势解读之①——10分钟了解
什么是POLARDB POLARDB 是阿里云自研的下一代关系型分布式数据库,100%兼容MySQL,之前使用MySQL的应用程序不需要修改一行代码,即可使用POLARDB. POLARDB在运行形态 ...
- 深入解读阿里云数据库POLARDB核心功能会话读一致性
POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点.对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把 ...
- 云数据库PolarDB(一)
一.出现的背景及PolarDB简介 阿里云,中国第一家拥有完整云计算能力的企业. 2015年,在计算界的奥运会Sort Benchmark中,阿里云计算100TB数据排序只用了不到7分钟,把Apach ...
- 阿里云云服务器 ECS和云数据库 PolarDB的简单使用
阿里云云服务器 ECS和云数据库 PolarDB的简单使用 仅作为记录自己的操作使用,主要是怕自己太久不用都忘了 登录阿里云以后点击控制台 然后找到云服务器ECS,点击进入 在左侧找到实例,点击进入 ...
- 深入解读阿里云数据库POLARDB核心功能物理复制技术
日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性.稳定性和性能都非常重要. 可靠性方面,在有一个数据文件的基础全量备份后,对运行中的数据库来说, ...
- 阿里云数据库配置学习笔记(二):下载并配置MySQL数据库
参考资料:阿里云官方文档 2018-02-20 一.MySQL数据库的下载 在Ubuntu环境下安装MySQL数据库十分简单 在命令行中输入 sudo apt-get update(更新软件源,预防出 ...
- 什么是云数据库POLARDB
POLARDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库,目前兼容三种数据库引擎:MySQL.Oracle.PostgreSQL.计算能力最高可扩展至1000核以上,存储容量最高可达 100T ...
- 阿里云RDS(云数据库)之产品简介
参考阿里产品文档:https://docs.aliyun.com/?spm=5176.100054.3.1.ywnrMX#/pub/rds/product-introduce/overview& ...
- 重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB
摘要:POLARDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库,其最大的特色是计算节点与存储节点分离,借助优秀的RDMA网络以及最新的块存储技术.POLARDB不但满足 ...
随机推荐
- VS2010提示error TRK0002: Failed to execute command
转自VC错误:http://www.vcerror.com/?p=277 问题描述: windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用V ...
- 108、TensorFlow 类型转换
# 除了维度之外Tensorflow也有数据类型 # 请参考 tf.DataType # 一个张量只能有一个类型 # 可以使用tf.cast,将一个张量从一个数据类型转换到另一个数据类型 # 下面代码 ...
- 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
目录 目录 前文列表 修改 User Model Flask Bcrypt 将 Bcrypt 应用到 User Model 中 创建登陆表单 前文列表 用 Flask 来写个轻博客 (1) - 创建项 ...
- Bash Shell中命令行选项/参数处理
0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home ...
- webbrowser 防止读取 缓存
http://bbs.csdn.net/topics/240011502 引用 3 楼 kelei0017 的回复: Delphi(Pascal) codeprocedure TInformation ...
- 至强E3-1200 系列部分参数
1155 Xeon E3-1275V2(E1) Ivy Bridge 3.5GHz BLK 100MHz 8MB 77W All 1155* Xeon E3-1270V2(E1) Ivy Bridge ...
- Tex与PDF
由Knuth Donald开发的tex.web会生成DVI文件,DVI也是Knuth自己实现的(虽然概念是其他人提出的)一种文件格式,目标是与设备无关. 通过dvips程序可以将DVI格式转化成Pos ...
- Linux系统ubuntu17安装jdk8并配置环境变量
上班多年,一直没有真正在Linux下开发过,没有捣鼓到Linux服务器,成为憾事.最近由于想学习Python,于是开始看书,学习Linux,学习shell编程. 选择Linux,先从最简单的ubunt ...
- Cocos2d-x之Action
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中的Node对象可以有动作,特效和动画等动态特性.因此在Node类中定义了这些动态特性,因此精灵,标签,菜单,地图和粒 ...
- python中变量的命令规制及变量的赋值方式
文章结构: 一.python中变量的命名规则 二.变量赋值的三种方式 三.python的垃圾回收机制 一.Python中变量的 ...