如今作任何事情都要看投入产出比,对应到数据库上其实就是性价比。POLARDB做为一款阿里自研数据库,常常被问的问题是:性能怎么样?能不能支撑个人业务?价格贵不贵?很显然,在早期调研阶段,对稳定性、可靠性很难有量化的指标时,性能的好快就成了一个很是关键的决策因子。html
POLARDB在一开始设计时就把性能做为一项关键的需求指标列入产品需求说明书,从架构设计到新硬件选型,再到代码实现,从驱动到分布式块存储,再到分布式文件系统和数据库引擎,打通整个技术栈作协同优化,最终才能保证性能上有数量级的提高。数据库
在2018杭州云栖大会上分享的这张架构图展现了POLARDB的内部细节。自下而上来看,POLARDB由__共享分布式存储PolarStore__,__分布式文件系统PolarFS__,__多节点的数据库集群PolarDB__和__提供统一入口的代理PolarProxy__这四部分组成。缓存
PolarFS设计中采用了以下技术以充分发挥I/O性能:服务器
在相同硬件环境下的对比测试,PolarFS中数据块3副本写入性能接近于单副本本地SSD的延迟性能。从而在保障数据可靠性的同时,极大地提高POLARDB的单实例TPS性能。网络
在数据库PolarDB中开创性地引入了物理日志(Redo Log)代替了传统的逻辑日志,不只极大地提高了复制的效率和准确性,还节省了50%的 I/O 操做,对于有频繁写入或更新的数据库,性能可提高50%以上。多线程
PolarProxy存在的意义是能够把底层的多个计算节点的资源整合到一块儿,提供一个统一的入口,让应用程序访问,极大地下降了应用程序使用数据库的成本,也方便了从老系统到POLARDB的迁移和切换。本质上,PolarProxy是一个容量自适应的分布式无状态数据库代理集群,动态的横向扩展能力,能够将POLARDB快速增减读节点的优点发挥到极致,提高整个数据库集群的吞吐,访问它的ECS越多,并发越高,优点越明显。架构
抛开成本谈性能,都是耍流氓。并发
首先,POLARDB存储与计算分离的架构,可让CPU、内存和磁盘摆脱互相制约的困扰,让计算和存储做为单独的资源池进行管理和分配,大幅下降资源碎片,提高总体的资源利用率。计算和存储的机型不一样,咱们还能够更有针对性地作定制和优化,下降单位资源的成本。分布式
通用意义上,规模效应带来的边际成本递减这件事,会一直发生。在阿里巴巴超大规模的基础设施的基础上,咱们能够持续不断地从全球供应链、低能耗数据中心、服务器研发等多个维度来下降咱们的成本。函数
无论技术上有多先进,成本上有多低,最终仍是须要用户承认。
因此,咱们从用户角度来看,最关心的其实仍是性价比,即一样的费用,是否能够获取更好的性能。
咱们简单算笔帐,来看一下POLARDB和RDS MySQL的性价比。
公平起见,咱们使用一样的数据库配置,测试数据集和测试方法,而后分别计算出两者的价格和性能。
其中,
此外,不论是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 | (4100+400)+(5.13+0.001400)24302=12463 | -23% | 80268.27 | 43087.33 | +86% | 3457 vs. 8383 |
表中的一些基础价格(以2018.11.8 当天价格为例):
用下图展现会更清晰一些,其中灰色的『备库』不对外提供服务。因而可知,POLARDB的性价比很是高,全部节点都提供服务,所以资源利用率也较RDS高。
在实际应用中,客户的业务是复杂的,不少时候业务访问会掺杂着大量的统计分析类的复杂SQL(Ad-hoc query),这时候MySQL的单线程模型处理起来就会捉襟见肘。
POLARDB为了应对这种场景,内置了并行查询引擎,针对大表复杂查询(好比TCP-H基准测试)性能可提高8倍,特别适用于执行时长超过1分钟的慢SQL(好比报表查询)。同时还支持了集合运算、WITH、窗口函数OVER等高级语法。该功能目前已经公测,无偿使用,详细参考『SQL加速』。
如下图表是咱们作了一个对比测试,在使用SQL加速的状况下,查询效率是不使用SQL加速直接查询的8倍以上,具体的测试用例包括,
目前SQL加速功能,提供了额外的链接地址,提供非事务的复杂查询服务。底层的计算节点和存储复用POLARDB现有的资源,一份数据多种访问方式,省去了数据迁移的烦恼,也不须要额外的成本投入。
技术实现上,包括如下几点,