6倍性能差100TB容量,阿里云POLARDB如何实现?

  • 时间:
  • 浏览:1
  • 来源:大发5分排列5_极速5分排列3

三、为有哪些POLARDB能做到远低于商业数据库的成本

二、为有哪些POLARDB能做到6倍于MySQL的性能?

group commit优化:POLARDB里一次group commit都都能不能产生写入几百KB的单个大IO。对于单个SSD,延迟和IO的大小是呈线性的,而POLARDB从文件系统到存储节点都进行一系列优化来保证这一类型的IO能尽快刷下去,针对redolog文件进行条带化,将四个多上百KB的大IO切割为一批16KB的较小IO,下发到多个存储节点和不同的磁盘上去执行,进一步的降低关键IO路径的延迟。

同時 由RDMA网卡和NVMe控制器完成数据传输和持久化,CPU仅做情形机的维护,在一致性协议的协调下,把网卡和存储卡两块硬件串起来,存储节点之间数据同步采用并发Raft(Parallel Raft)协议,和Raft协议一样,决议在leader节点上是串行生成和提交的,但并发Raft协议都都能不能允许主从之间乱序同步,简单的说,允许follower节点在漏掉若干条日志的情形先commit并apply底下过来的日志,并异步的去补前一天漏掉的日志,数据同步的性能和稳定性都显著优于Raft协议。

本文讲的是6倍性能差5000TB容量,阿里云POLARDB咋样实现,

点此免费试用云数据库POLARDB

2.POLARDB的计算引擎性能优化





图为POLARDB的第三代分布式共享存储架构



首先,受益于第三代分布式共享存储架构,使POLARDB实现了计算节点(主要做SQL解析以及存储引擎计算的服务器)与存储节点(主要做数据块存储,数据库快照的服务器)的分离,提供了即时生效的可扩展能力和运维能力。



POLARDB是未来云数据库的雏形(All in one),四个多数据库即可满足现时多类数据库混合使用效果。阿里云发挥自身自研能力优势,以POLARDB为产品契机,实现数据库OLTP与OLAP的一体化设计,为企业的数字化升级所需的IT设施架构实现革命性进化。

double write优化:POLARDB存储节点原生支持1MB的原子写,为什么会么会让都都能不能安全关闭double write,从而节省了近一倍的IO开销。

网络也是例如的情形。过去传统的以太网,网卡发四个多报文到另一台机器,底下通过一跳交换机,大约才能 一百到两百微秒。POLARDB支持ROCE以太网,应用多线程 通过RDMA网络,直接将本机的内存写入另一台机器的内存地址,为什么会么会让从另一台机器的内存读一块数据到本机,底下的通讯协议编解码、重传机制都由RDMA网卡来完成,不才能 CPU参与,使性能获得极大提升,传输四个多4k大小报文只才能 6、7微秒的时间。如同内核的IO协议栈跟不上高速存储设备能力,再一次的,内核的TCP/IP协议栈跟不上高速网络设备能力,被POLARDB的用户态网络协议栈代替。

而在PolarDB架构中,这一个多现象图片都得到防止,一方面新增只读实例不才能 拷贝数据,不管数据量有多大都都都能不能在2分钟内创建出来;此人 面,主实例和只读实例共享同一份存储资源,通过这一架构去增加只读副本,都都能不能做到零新增存储成本,用户只才能 支付只读实例消耗的CPU和内存的费用。

本文作者:阿里云资深技术专家曹伟、林晓斌

一、POLARDB产品架构简介

POLARDB采用了领先的硬件技术:包括使用3DXpoint存储介质的Optane存储卡、NVMe SSD和RoCE RDMA网络。同時 面向新硬件架构实现软硬一体优化:从数据库、文件系统到网络通讯协议、分布式存储系统和设备驱动,POLARDB实现纵贯软件栈各层次的整个IO链条的强度优化。

POLARDB用户态协议栈防止了内核IO协议栈慢的现象图片。用户多线程 在用户态直接通过DMA操作硬件设备,通过轮询的最好的措施监听硬件设备完成IO事件,消除了上下文切换生和熟断的开销。用户多线程 还都都能不能将IO防止线程 和cpu进行一一映射,每个IO防止线程 独占CPU,相互之间防止不同的IO请求,绑定不同的IO设备硬件队列,四个多IO请求生命周期从头到尾都会四个多线程 一颗CPU上防止,不才能 锁进行互斥。这一技术实现最大化的和高速设备进行性能交互,实现一颗CPU达每秒约30万次IO防止的能力,为什么会么会让保持线性的扩展能力,也就愿因分析分析4颗CPU都都能不能达到每秒500万次IO防止的能力,在性能和经济型上远高于内核。

最后,借助优秀的RDMA网络以及最新的块存储技术,实现服务器宕机后无需搬运数据重启多线程 即可服务,满足了互联网环境下企业对数据库服务器高可用的需求。

POLARDB的Replica节点,日志目前是一批一批应用的,为什么会么会让当新的一批日志被应用前一天,Replica上的读请求不才能 重复创建新的ReadView,都都能不能使用上次缓存下来的。这一优化才能提高Replica上的读性能。

第三代分布式共享存储架构究竟有有哪些优势?

Redolog的顺序写性能对数据库性能的影响很大,为了减少Redolog切换时对性能的影响,大伙 后台采用例如Fallocate的最好的措施预先分配日志文件,此外,现代的SSD硬盘这麼来越多这麼来越多 都会4K对齐,而MySQL代码还是按照早期磁盘512字节对齐的最好的措施刷日志的,前一天会愿因分析磁盘做这麼来越多这麼来越多 并没能的读操作,没能发挥出SSD盘的性能,大伙 在这方面也做了优化。大伙 对日志提交时Group Commit进行优化,同時 采用Double RedoLog Buffer提升并行度。

众所周知,关系型数据库是IO密集型的应用,IO性能的提高对数据库的性能提升至关重要。过去十年大伙 看得人在数据库领域,SSD替换HDD的过程给数据库数据防止的吞吐能力带来了数量级的提升。

POLARDB将从四个多维度出发,从根本上改进多副本复制。四个多是保证数据库ACID中的D(Durable),把网络、存储硬件提供的DMA能力串起,用硬件通道高性能的把主库的日志数据持久化到四个多存储节点的磁盘中;前一天是实现了高效的只读节点,在主库和只读节点之间通过物理复制同步数据,直接更新到只读节点的内存里。 咋样实现?

其次,与传统云数据库四个多实例一份数据拷贝不同,POLARDB同四个多实例的所有节点(包括读写节点和只读节点)都实现访问存储节点上的同一份数据,使得POLARDB的数据备份耗时实现秒级响应。(备份时间与底层数据量无关)

在主库上,前一天引擎才能 和binlog做XA事务,事务要等到binlog和redolog同時 写盘后才能返回,再加binlog后,XA事务都都能不能再加,事务的执行路径更短,IO开销也更小。在从库上,redolog为什么会么会让是物理复制,仅需比对页面的LSN就都都能不能决定是否回放,纯天然都都能不能多线程 执行,数据的正确性也更有保证,此外,POLARDB的从库收到redolog后只才能 更新缓存里的页面,并非才能 写盘和IO操作,开销远低于传统多副本复制里的从库。





图为阿里云POLARDB性能全景



1. POLARDB的存储引擎性能优化

在POLARDB里,为了追求更高的性能、更低的延迟,阿里云数据库团队大胆的抛弃了Linux内核提供的各种机制,比如块设备、各种文件系统例如ext4,以及TCP/IP协议栈和socket编程接口而确定了另起炉灶。最终,POLARDB实现了一整套在用户态运行的IO和网络协议栈。

POLARDB中物理复制的性能至关重要,大伙 不仅通过基于数据页维度的并行提高了性能,还对复制中的必要流程进行了优化,例如在MTR日志中增加了四个多长度字段,从而减少了日志Parse阶段的CPU开销,这一简单的优化就能减少500%的日志Parse时间。大伙 还通过复用Dummy Index的内存数据形态,减少了其在Malloc/Free上的开销,进一步提高复制性能。

为了将3DXpoint颗粒的高性能和3D NAND颗粒的低成本结合起来,POLARDB创新的在软件层实现对高速的Optane卡和大容量高吞吐的NVMe SSD进行组合,实现四个多名为混合存储层。既保证数据写入的低延迟、高吞吐、高QoS,又使整体方案兼具较高的性价比。

为什么会么会让POLARDB使用共享存储和物理复制,实例的备份恢复也做到完全依赖redolog,为什么会么会让再加了binlog。使得单个事务对io的消耗减少,有效减少一句话响应时间,提升吞吐量。同時 防止了引擎才能 与binlog做的XA事务逻辑,事务一句话的执行路径更短。

IO优先级优化:POLARDB在文件系统和存储节点两层都开了绿色通道,对redolog文件的更新进行优待防止,减少排队,提高IO的优先级。redolog也从512对齐调整为4k对齐,对SSD性能更加友好。

POLARDB实现日志数据持久化到四个多存储节点的磁盘中。主库通过RDMA将日志数据发送到存储节点的内存中,存储节点之间再通过RDMA互相复制,每个存储节点用SPDK将数据写入NVMe接口的存储介质里,整个过程CPU无需访问被同步的数据块(Payload),实现数据零拷贝。

这里大伙 将分别以存储性能、计算性能来进行解读诠释。

众所周知,在传统数据库上做扩容、备份和迁移等操作,花费的时间和数据库的容量成正比,往往上TB的数据库容量加个只读副本就才能 一到四天时间。POLARDB的存储容量都都能不能实现无缝扩展,不管数据量有多大,2分钟内即可实现只读副本扩容,1分钟内即可实现全量备份,为企业的快速业务发展提供了弹性扩展能力。

而传统的数据库部署模型则是四种 烟囱模型,一台主机既跑数据库又存数据,这带来四个多现象图片。四个多是机型难以确定,CPU和磁盘的配比主要取决于实际业务的需求,没能提前找到最优比例。第二是磁盘碎片现象图片,四个多生产集群里,总有每种机器磁盘使用率是很低的,有的还没能10%,但出于业务稳定性要求,会要求独占主机的CPU,有有哪些机器上的SSD人太好 是被浪费的。通过存储资源池化,这一个多现象图片都能得到防止,SSD的利用率得到提高,成本自然也降低下来。

POLARDB采用了四种 计算和存储分离的架构,DB运行在计算节点,计算节点组成了四个多计算资源池,数据都放上去存储节点上,存储节点组成了四个多存储资源池。为什么会么会让CPU和内存过高 了,就扩充计算资源池,为什么会么会让容量为什么会么会让IOPS过高 了,就扩充存储资源池,四个多池子都会按需扩容。为什么会么会让存储节点和计算节点都都能不能分别向四个多方向优化,存储节点会确定低配的CPU和内存,提高存储密度,而计算节点都都能不能确定小容量、低配的SSD作为操作系统和日志盘,上多路服务器增加CPU的核数。

大伙 都知道关系型数据库的重要形态归纳起来是“ACID”,其中A是原子性,C是约束,I是隔离性,D是持久性。

POLARDB针对高并发场景,对引擎内内外部锁做了絮状优化,比如把latch分解成粒度更小的锁,为什么会么会让把latch改成引用计数的最好的措施从而防止锁竞争,例如Undo segment mutex, log system mutex等等。PolarDB还把每种热点的数据形态改成了Lock Free的形态,例如Server层的MDL锁。

传统数据库做只读实例,实施一写多读方案,是通过搭建只读副本的方案,先拷贝四个多最近的全量备份恢复四个多临时实例,再让这一临时实例连接主库为什么会么会让一点binlog源同步增量数据,增量追上后,把这一临时实例加到线上升级为四个多只读副本。这一最好的措施四个多是耗时,搭建四个多只读实例才能 的时间与数据量成正比;此人 面也很昂贵,才能 增加一份存储成本,比如用户购买四个多主实例再加四个只读实例,才能 付7~8份存储的钱(7份还是8份取决于主实例是两副本还是三副本)。

POLARDB的存储节点除了对ibd文件提供1MB的原子写,消除double write的开销,还支持对ibd文件的数据块进行透明压缩,压缩率都都能不能达到2.4倍,进一步降低了存储成本。

而传统数据库在DB内进行压缩的方案相比,存储节点实现透明压缩不消耗计算节点的CPU,不影响DB的性能,利用QAT卡进行加速,以及在IO路径上用FPGA进行加速。POLARDB的存储节点还支持快照去重(dedup)功能,数据库的相邻快照之间,为什么会么会让页面没能处在修改,会链接到同一份只读页面上,物理上只会存储一份。

POLARDB在主库和只读实例之间的数据流上,放弃了基于binlog的逻辑复制,而是基于innodb的redolog实现了物理复制,从逻辑复制到物理复制对主库和从库性能带来的提升都非常明显。

POLARDB是阿里云数据库团队研发的基于第三代云计算架构下的商用关系型云数据库产品,实现5000%向下兼容MySQL 5.6的同時 ,支持单库容量扩展至上百TB以及计算引擎能力及存储能力的秒级扩展能力,对比MySQL有6倍性能提升及相对于商业数据库实现大幅度降低成本。

POLARDB的存储节点针对数据库的IO workload进行了一点针对性的优化。