POLARDB云数据库分布式存储引擎揭秘

2017云栖大会POLARDB专场,阿里云资深技术专家曹伟带来POLARDB云数据库分布式存储引擎揭秘的演讲。本文主要从计算和存储分离的优点谈起,而后说明控制平面与数据平面分离,接着分享了划时代的技术,包括零拷贝、并行副本等,最后解释了面向数据库优化的智能存储。数据库

如下是精彩内容整理:markdown

 

计算和存储分离的优点网络

如何把过去MySQL从单机磁盘数据库,演进成基于共享存储、集成数据库的核心组建Polar store。咱们把三副本分布式的存储系统,作得延迟和本地SSD磁盘同样快,这就是核心的武器。那么,咱们怎么作一个又快又稳定的分布式存储系统。并发

为何作POLARDB时会选择把MySQL本地SSD单机数据库改形成一个基于共享存储集成数据库,在作了七年RDS以后选择作这件事。怎么去作一个高性能的分布式存储系统,同时让它稳定,咱们为何不用已有分布式存储系统,由于咱们要在稳定系统和存储系统当中加入对数据库的理解优化,让它成为一个为数据库定制和优化的智能存储。分布式

咱们过去单机作数据库有一个很头疼的问题,怎么先作容量的预测,每台机器SSD容量的预测和迁移。在“双11”以前,咱们通常会把核心用户的机器、数据库打散操做,把每一个用户买每台数据库容量下降到60%如下,咱们很担忧“双11”那天大量数据进来,把机器塞满以后弄不出去。我须要预留40%-50%的SSD容量在那儿放着,存不了数据,就是为了不忽然的流量高峰把机器用满了,而后就要开始作迁移。微服务

存储池化性能

在存储池化以后,我能用好每一块盘,为何呢?由于今天的池子再也不是单机十几T、几T,拥有的是几PB的大池子。在大池子当中加机器就OK了,整个大池子能够保持85%,90%左右。把存储池化以后,咱们有一个大盘子了,就能把资源用得更好,TCO会降低。优化

计算存储硬件分离优化阿里云

过去作数据库的时候,每一年很头疼的一件事情是定义明年新机型是什么,内存和存储的平易怎么控制,权衡之间的比例一直是很头疼的事情。spa

当我把计算的机型、数据库机型和存储机型分离以后,就能很好的进行优化。数据库的机型不须要再带SSD,存储机型不须要很好的CPU,也不须要很大的内存,但会有不少盘,单机存储力度能够很高。

数据库快速迁移能力

没有不坏的硬件,包括供电、机器、风扇、温度,硬件坏了以后,咱们怎么把恢复时间指标往降低,保证用户可用时间往上走。在机器坏了的时候怎么能快速恢复,把数据库弄到一个好的机器上去跑,这个能力很重要,RDS的SLA是99.95%,这个时间很难保证。今天一份存储的成本给多个数据库节点也是咱们得到的关键能力。

软件定义存储能力更强

为何过去不这么作呢?过去分布式存储太慢,分布式存储都还停留在HTD的延时,你获得的延迟是几个毫秒,咱们接受不了。由于数据库是很是敏感的。软件定义存储和普通机器上硬件SSD相比拥有更强的能力,好比单个盘能够任意扩容,能够从10TB扩容到100TB,100TB对于本级SSD来讲很难达到,由于SSD的制造工艺也有瓶颈,可以放下的颗粒也是有限的,随机而来的单机SSD密度是有限的。

还有数据快照技术,咱们在存储引入了分布式数据库快照技术作数据库的备份,完美解决了数据库备份。我能够在5分钟以内对100T数据库完成备份,还能够一个备份在5分钟以内挂载上去,成为一个新的实例,这些技术用传统的单机数据库是没法解决的。咱们今天存储层作了一个Thin-provisioning技术,按需分配,拥有它后,有可能就能够按你使用的存储资源付钱了。

 

控制平面与数据平面分离

26bb0980c8a1af48eb1761c8b6cc399bd24d3289

这样一个强大的分布式存储系统是怎么构建的呢?咱们借鉴了SDN的经验,用控制平面与数据平面分离的思想在设计系统。简单来讲,存储全部的复杂逻辑,好比故障怎么处理,副本策略如何,全都会在微服务实现的控制集群当中,数据平面很是高效的实现。

 

划时代技术,超高性能、超低延迟

5e18bcfd57a46403305ae92af89b35154ea85887

咱们一些核心技术点如图,首先直接操做裸的RDMA网卡,本身实现一套完整网络协议栈和OR协议栈。零拷贝技术RDMA&SPDK、用户态文件系统和并行同步技术,咱们紧贴着RDMA,在RDMA网络栈基础上实现了ParallelRaft。

咱们是真正的零拷贝,别人的不是零拷贝。当RDMA网卡收到请求以后,会直接把请求操做写到物理机内存地址上去,直接用了很大的区域作这件事。网卡一旦写入内存以后,这个内存就一直使用下去,永远不拷贝,这就是零拷贝。启动系统时会把物理内存注册到网卡当中去,网卡会直接操做物理内存到CPU说知道有这个物理内存到了以后,咱们就一直拿物理内存用DMA发给磁盘,用RDMA再发给远程网卡一直使用下去,再也没有拷贝过了。这件事情若是不是本身写RO协议栈或者网络协议栈不可能办到。

af418c1301587288538f65ecaa437f498cbba791

POLARDB当中使用的文件系统是PolarFS文件系统。这个文件系统是一个libpfs形式直接嵌入到数据库当中,数据库拿着lib操做后面的存储。也会在文件系统内部维护,让整个硬件在最合理的模式下工做,这是咱们的设计思想。

ParallelRaft并行副本技术是传统的复制协议。咱们的思路就是乱序带来并发,乱序带来极高的性能,乱序作正确就是咱们的挑战,提出了一套专业的ParallelRaft技术解决这个问题。

 

面向数据库优化的智能存储

面向数据库优化的智能存储,包括防止DB脑裂写坏数据、Group Commit批量I/O写入优化、保证Page原子写入,避免doubleWrite开销、RedoLog高优先级写入。数据库的配置是大于10k的,一个16kb的页面若是出现部分显示成功,部分显示失败,就会出现数据损坏。

MySQL当中怎么作呢,它是用了DoubleWrite的方法作,先写到一个正确的地方,而后再放回来。至关于I/O带宽高了2倍,咱们支持Page原子写入。脑裂问题,假如两个节点,一个在杭州,一个在上海。杭州和上海之间网络断开以后,两个节点都认为本身是主节点,通常作法是一主一备,两个节点都会写坏数据。咱们一般作法是必定要写进去合并,再恢复到单机状态。咱们在Polar store当中对数据库作了写保护,防止DB写入时脑裂,假如出现脑裂,存储借助三副本技术,能够随时受权进行仲裁,只保证一我的写的。