SPDK+NVMe SSD对接Virtio支撑红包场景性能

原文链接:http://mp.weixin.qq.com/s/nP62NpX0NAo4BZhpkAWaQg


本文转载自云栖社区,原文标题《红包场景下,高性能本地存储技术将硬件性能发挥到极致》。链接:https://yq.aliyun.com/articles/71655


编者注:本文介绍的高性能本地存储,应该没有针对可靠性方面的设计,因为在数据库层面有复制做为保护手段。


红包是最近兴起的全民参与的活动,2017年新春红包在参与人数和业务峰值上都到达了历史新高,其中红包除夕开奖峰值达到90W/s。在云栖社区2017红包技术峰会上,阿里云系统和块存储负责人、资深专家马涛从高性能本地存储架构设计、高性能本地存储要点分享、高性能本地存储性能数据等方面分享了阿里云在高性能本地存储方面的实战经验。


以下内容根据现场分享和幻灯片整理而成。



红包业务特点

SPDK+NVMe SSD对接Virtio支撑红包场景性能_第1张图片

支付宝红包的大致业务架构包括单元化部署、统一接入、网关、DAO、数据库以及在线\离线数据处理,整体流程很长。其中数据库在整理的交易链路中起到承上启下的作用。在红包业务中,数据库具有三大特点:


(1)峰值压力大。除夕夜开奖峰值达到90W/s,但这仅仅是从业务层面考虑,由于业务对数据库不仅仅是一次事务的压力,所以开奖峰值时数据库面临的压力可达百万之多。


(2)延迟要求苛刻。数据库单位时间内能承受的事务是有严格要求的,数据库延迟降低后,会大幅降低对数据库数目的需求,进而降低所需物理机配置,对整体的业务压力也会大幅度降低。


(3)自带容灾。对于大型互联网公司,他们的数据库业务实际上是有非常完善的容灾机制,数据库具备主从复制;业务层也会有本身的容灾机制。从存储来看,上层的容灾业务做得很全面。


针对红包业务,数据库的需求可以概括为两点:一是延迟要非常低,延迟要低于100us;二是IOPS一定要高,需要达到20W以上。


现有块存储产品


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第2张图片

目前阿里提供了三种不同的块存储产品,分别是SSD云盘、高效云盘和普通云盘。三者详细的对比如上图所示,可以看到:三种块存储的产品都具有高可靠的优点,它们的数据可靠性都达到了99.9999999%;它们的缺点也非常明显,IOPS和延迟不达标,IOPS最高的SSD云盘也只有20000,延迟最低的SSD云盘也有500us之久,距离20w IOPS和100us延迟的要求还存在很大的差距,这就需要设计一款新的存储产品来满足双十一以及红包业务的要求。


因此,高性能本地存储应运而生。


高性能本地存储


高性能本地存储的设计目标是为了满足高性能数据库的要求,设计要点一是超高的IOPS;另一点是超低延迟。


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第3张图片

通用的云本地存储常规架构如上图所示。以MySQL数据库为例,它通过POSIX API与云主机内核交互,云主机内核包括一个标准文件系统和标准的块设备接口;云主机内核下面是云物理机内核,它自上而下由标准文件系统、标准块设备接口、硬件驱动和硬件组成。当数据库发起IO访问时,要经过7个模块才能到达硬件;请求完成后,再经过7个模块才能返回给应用层,路径相当之长。云主机内核和云物理机内核中都包括标准文件系统和块设备层,也就是说同样的模块可能在云主机内跑了一遍,还需要在云物理机上再运行一遍,功能上重叠,实现方式上也基本类似;重叠的模块导致请求访问时的路径很长,对于业务和数据库性能造成的的直观影响是延迟高、性能差。


因此,采用通用的云本地存储常规架构是无法解决红包业务的需求,也不能设计出高性能的存储产品。那该如何将云本地存储的性能发挥到极致呢?我们的切入点是高性能存储架构。


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第4张图片

上图是高性能存储架构,图中左侧是标准物理机情况下存储性能达到极致的框架:它的层次比较少,数据库经过POSIX API直接就到标准文件系统、块设备层、硬件驱动、硬件,请求所经过的模块比上文提到的云本地存储常规架构少2-3个,性能也相对有所提升。


那么如何在云主机的环境下搭建一个类似物理机的环境呢?首先云主机的必要模块是必须保留的,应该尽可能精简云物理机内核中的模块,进而达到性能的最佳值。如上图右侧所示,首先必须保留云主机内的标准文件系统和块设备层,因为它们和业务数据库是息息相关的,标准文件系统提供了标准的Open、Creat、Write之类的接口,如果省去该模块,业务是无法适配这种修改的。


对用户而言,云物理机内所有的修改都是透明的,因此在云物理机上只保留硬件驱动,从而达到最佳性能。


高性能本地存储关键组件


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第5张图片

在云主机内,标准文件系统是不能变化的,因为它是存储与数据库、业务交互的地方。因此,想要进行性能优化,只能考虑在块设备层、硬件驱动、硬件三个模块入手加速本地存储的性能。


经过一系列的调研与研发测试,最终在块设备层使用了标准virtio blk驱动;硬件驱动使用了SPDK工具集;硬件使用了NVMe SSD。下面对这三个模块进行详细的解读与分析。


Virtio-blk


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第6张图片

利用Virtio blk可以实现云主机和云物理机之间的高性能数据交互。Virtio提供了半虚拟化的接口,所谓半虚拟化就是在虚拟机和物理机之间通过某种方式(修改了虚拟机某些接口),从而使得虚拟机和物理机之间实现高速传输,性能比传统的全虚拟化有所提高。


Virtio blk是标准块设备接口,通过块设备接口可以对块设备进行格式化、分区、创建文件系统等标准操作,对用户完全透明,数据库无需任何更改。Virtio blk另一个优点是采用了Virtio协议,通过共享环交换数据。在上图中,蓝色部分是虚拟机,红色部分是物理机。虚拟机通过Virtio Front End将数据通过Virtio Ring传递到后端的Virtio Back End;Virtio Back End将这些数据处理后再回传给Virtio Front End,完成了一次数据的交互。


SPDK


除了Virtio blk之外,SPDK是另一个重要的组件。SPDK全称是Storage Performance Development Kit,它是一组用来编写高性能、高扩展性的用户态存储应用的工具集。


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第7张图片

相比于SPDK,DPDK可能更为人知,它主要是为了解决网络方面的问题。SPDK在很多模块上是与DPDK共用的,它的核心观点是通过用户态协议加无锁设计加轮询机制达到高性能:


(1)用户态协议是指SPDK实现了用户NVMe协议,让用户可以在旁路内核的情况下去访问设备;其缺点是不支持posix API、不支持标准的文件系统,也没有标准的设备支持,应用性较差。


(2)无锁设计,对于高性能编程而言,无锁设计都是核心的思想,此次不再展开。


(3)轮询机制,SPDK提供了Polling Mode ,它摒弃了内核中常用的中断这类的机制,消除了中断的影响,提高了整体性能。


NVMe SSD


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第8张图片

NVMe SSD有两个核心点:首先SSD是PCI-E的SSD,本身的访问速度是非常快的;采用NVMe之后,速度会更快,NVMe是用来代替SCSI的新协议,它具有高带宽、低延迟的特点,比SCSI协议更简单高效,提高了系统整体的性能。


数据链路


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第9张图片

高性能本地云储存的数据链路如上图所示,在云主机中,核心数据库、POSIX API和标准文件系统保持不变。云数据库通过标准的POSIX API 访问标准文件系统;标准文件系统通过Virtio-Blk和SPDK用户态驱动直接交互,在SPDK用户态驱动中再与NVMe SSD交互,减少了数据链路的长度,同时提高了IO性能。


延迟分布


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第10张图片

高性能本地云储存搭建之后,我们使用了fio磁盘测试工具在CentOS7上对通用虚拟化架构本地盘和阿里云高性能本地存储的随机IO平均延迟进行了对比测试。测试时块设备IO调度器均设置为noop,测试参数为--direct=1--bs=4k--iodepth=1--numjobs=1。


从上图可以看出,在随机读两方面,阿里云高IO本地盘延迟只有70us左右,而通用虚拟化架构本地盘延迟在130us左右;随机写方面,阿里云高IO本地盘的延迟只有30us左右;通用虚拟化架构本地盘延迟在60us左右。


数据库性能对比


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第11张图片

上图是新旧数据库Index-Update性能对比,可以看到:在旧数据库实例的情况下,TPS只有14242.65、RT为8.21ms;新数据库实例下,TPS可以达到26969.81、RT为1.7ms,整体性能大幅度提升。


释放红包技术福利,即将在公有云上线


通过延迟分布和数据库性能的对比,可以看出高本地云存储对性能提升起到了很大的作用,在红包活动中发挥了很大的作用。在完成双十一及红包活动之后,阿里云希望将高性能本地云存储技术推广给其他用户使用。因此,在今年2月底,高性能本地云存储在公共云上线,它的技术架构与支撑支付宝红包的技术架构相同:采用NVMe SSD+SPDK技术,也是全球首家采用该技术的高性能本地盘。


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第12张图片

本地盘2.0性能非常好,容量为3TB、IOPS为50万、延迟为50us、带宽为4GB。具体参数如下表所示:


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第13张图片

可以看出,最优产品读写IOPS单盘可达24000;读带宽达2GBps;写带宽为1.2GBps。


高IO本地存储实例


SPDK+NVMe SSD对接Virtio支撑红包场景性能_第14张图片

有了本地盘作为基础,如果想要实现高性能本地存储实例,还需要在计算性能、存储IO性能、网络性能上进行相应地提升:


(1)为了保证计算性能稳定,采用了Intel Xeon E5-2682 v4(Broadwell)处理器,主频为2.5GHz,DDR4内存。


(2)为了保证存储IO性能稳定,采用了基于NVMe SSD和SPDK技术,提供高达数十万随机IO读写能力的同时,保持在us级别的时延水平。


(3)网络性能方面,实例网络性能与计算规格相对应(实例计算规格越大则网络性能越强)。


综上所述,将SPDK与NVMe SSD技术结合起来,能够让本地盘接近或类似物理机的性能,在双十一以及新春红包这类峰值压力很大的场景下,性能依旧很好。


关于分享者:


马涛,花名伯瑜,阿里云系统和块存储负责人、资深专家、国内知名Linux内核研发人员,10年以上操作系统以及存储研发经验,在块存储,文件系统等领域为Linux内核主线做出了卓越的贡献,在Linux内核主线有超过300个提交,同时对分布式文件系统,分布式存储等领域也有多年深入的研究。目前目前带领团队负责阿里巴巴Linux内核以及分布式块存储等相关的研发工作。



你可能感兴趣的:(云计算)