天天看点

揭秘红包场景下的高性能本地存储架构设计

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

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

红包业务特点

揭秘红包场景下的高性能本地存储架构设计

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

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

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

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

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

现有块存储产品

揭秘红包场景下的高性能本地存储架构设计

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

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

高性能本地存储

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

揭秘红包场景下的高性能本地存储架构设计

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

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

揭秘红包场景下的高性能本地存储架构设计

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

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

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

高性能本地存储关键组件

揭秘红包场景下的高性能本地存储架构设计

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

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

virtio-blk

揭秘红包场景下的高性能本地存储架构设计

利用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,dpdk可能更为人知,它主要是为了解决网络方面的问题。spdk在很多模块上是与dpdk共用的,它的核心观点是通过用户态协议加无锁设计加轮询机制达到高性能:

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

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

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

nvme ssd

揭秘红包场景下的高性能本地存储架构设计

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

数据链路

揭秘红包场景下的高性能本地存储架构设计

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

延迟分布

揭秘红包场景下的高性能本地存储架构设计

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

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

数据库性能对比

揭秘红包场景下的高性能本地存储架构设计

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

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

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

揭秘红包场景下的高性能本地存储架构设计

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

揭秘红包场景下的高性能本地存储架构设计

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

高io本地存储实例

揭秘红包场景下的高性能本地存储架构设计

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

(1)为了保证计算性能稳定,采用了intel xeon e5-2682 v4(broadwell)处理器,主频为2.5ghz,ddr4内存。

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

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

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

<a href="https://mp.weixin.qq.com/s/n9eha8lsy0n7pexqxogqaa">原文链接</a>