双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?

双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?

嘉宾 | 马涛、刘峥、彭亚雄采编 | 木环

2016年双十一期间,阿里的交易额再次刷新历史记录,其中支付宝的支付峰值达到12万笔 / 秒。抛开业务数字,阿里在技术上也是做足了功课,除了使用RocketMQ消息中间件承受万亿级消息容量之外,还启用了上千个高I/O型的本地盘存储实例。

阿里云告诉InfoQ这一举动使得数据库的性能提升近100%、平均响应时间节省了80%。那么让阿里云取得如此效果背后的技术利器是什么呢?为此,InfoQ采访了三位相关负责人。

双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?

阿里云在块存储的基础上,以半虚拟化磁盘接口virtio-blk研发出了高IOPS并发、低IO延迟的本地盘存储实例。

随着硬件技术的发展,硬件自身性能越来越高,存储软件的瓶颈也就越发明显。为了解决I/O性能上的痛点,阿里云开始基于NVMe 协议和英特尔开源项目SPDK研发高IO存储实例。

NVMe SSD与传统SATA SSD的区别  

NVMe的全称是Non-Volatile Memory express,顾名思义是为闪存类存储介质全新设计的协议接口,最早由英特尔于2007年发起,当前已成为基于PCI-E SSD闪存所采用的主流接口协议。而SATA SSD所使用的AHCI(Advance Host Controller Interface)协议,是在80年代后期基于IDE/ATA所发展起来的,面向传统机械硬盘所设计的存储接口协议。随着SSD本身性能的不断增强,面向机械硬盘设计的AHCI协议已经明显成为制约SSD硬盘读写性能进一步提升的最大短板,而NVMe协议则成为了替代AHCI的完美选择。相比于AHCI,NVMe的优势主要体现在以下方面:

  • 低延迟

    AHCI的每个命令都需要读取4个不同的寄存器,而NVMe无需读取寄存器就可以发出命令,延迟降低至AHCI的25%;

  • 多队列和更高的队列深度

    支持多队列让CPU的性能得到更好的释放,单核再也不是IOPS的瓶颈了。队列深度更是从32提升到惊人的64K,能够充分压榨出SSD的IOPS性能。


  • 双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?

SPDK:英特尔针对高性能存储应用开发的开源项目  

NVMe接口标准的固态盘通常为SATA SSD性能的5-8倍,但由于Linux内核驱动实现与调度机制的限制,传统的软件定义存储系统并不能完全释放其性能。为了帮助软件定义存储开发商充分发挥NVMe接口SSD的超高性能,英特尔开发了SPDK(Storage Performance Development Kit),包含一套驱动程序,以及一整套端到端的存储参考架构。SPDK的目标是能够把硬件平台的计算、网络、存储的最新性能进展充分发挥出来,其框架如下: 

双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?

技术创新点  
  1. 借助SPDK实现了用户态高性能存储架构,有效降低了虚拟机存储的IO栈深度

  2. 通过优化NVMe硬件中断的处理,减小因为NVMe硬件中断处理带来的额外IO延迟开销

  3. 通过优化虚拟机驱动程序,降低虚拟机访问NVMe硬件过程中的通信开销

研发中都攻克了哪些难关?  

从项目初始立项到正式上线经历1年2个月,主要使用C语言来开发。研发过程中主要的障碍是使用NVMe以及SPDK等新的存储技术带来的问题:

1 新协议的使用

因为使用了SPDK,此前通过操作系统来管理的磁盘就需要应用程序自己来进行管理,因此不仅需要开发相关的功能,对阿里云整体的运维、管控都提出了新的要求和挑战。

2 软硬件性能同时提升

具体而言,当NVMe设备处理单个IO请求的延迟降低到几十微秒(us)后,硬件设备的中断处理开销以及虚拟机中断的处理就成为了瓶颈。为了降低中断处理的开销,阿里云通过使用轮询方式来消除NVMe硬件中断的处理开销,在使用轮询方式后虚拟机发送IO请求时与物理主机通信的开销也可以进一步降低。

项目的初心与愿景  

该项目起源于拜访客户时,阿里云了解到部分行业客户对于高IOPS并发和稳定低IO延迟有着较高的需求。出于提高单个服务器存储IO性能的初心,阿里云启动了本项目的研发。

项目的研发主要经历了两个大的版本,即集团内部数据库的使用(文中开篇提到的双十一)和本周五正式宣布的公有云对外售卖版本。据悉,目前对外售卖的版本,除采用NVMe SSD磁盘+SPDK存储性能优化架构,还使用了基于Intel Xeon E5-2682 v4 (Broadwell) 处理器,主频为2.5GHz,DDR4内存以及独享型计算架构。

阿里云项目负责人强调:该高IO型本地盘存储实例的目标客户是具备较强开发和运维能力的企业客户,自身的系统架构可以保证业务数据的一致性,并能克服单副本数据丢失对业务造成的影响。具体应用场景主要是对存储IO性能要求较高,读写延时较为敏感,且业务自身具备高可用架构的场景,比如NoSQL、OLTP、分布式日志等,适合网络游戏、互联网电商、在线直播/娱乐类提供在线业务的行业用户。

以下是推荐的使用场景:

(1) 用户将Hadoop/Cassandra/MongoDB等NoSQL业务部署在高IO型本地盘存储实例上,由于这些应用自身已经提供了数据冗余功能,本地盘单盘故障后用户的数据并不会受到影响,同时用户可以享受到更高的IO性能;

(2) 用户在高IO型本地盘存储实例上自建MySQL数据库,建议采用高可用架构(主库+从库同步复制),为了保证用户数据库数据的安全,建议用户通过mysql_dump等备份工具,在业务低峰期定时对MySQL上的数据进行备份,将数据备份到云盘上,并通过云盘快照等技术进行定期备份。

或将MySQL的redolog和binlog等日志文件放在本地盘中,将数据文件放在SSD云盘中,NVMe SSD的低延时性能可以大幅提升MySQL的性能,借助binlog等主从同步方式保证数据安全,同时满足性能和可靠性两方面的需求;

(3) 有大量并发访问需求的用户网站可以将memcached部署到高IO型本地盘存储实例上,通过高IO型实例提供的高IOPS性能,为网站的静态数据提供更高速的缓存;

(4) 用户使用bcache/flashcache等工具使用高IO本地盘和云盘构建混合存储,通过高速本地磁盘作为缓存对云盘进行加速。


项目的下一步工作将重点集中在继续提高单实例的IOPS性能。

当前的高IO型本地盘存储实例单实例规格为2块1.45TB的高性能本地固态盘,后期将考虑提供更多的存储容量,以及更高IOPS并发能力,来满足更高的需求。

作者介绍

马涛,花名伯瑜,阿里云系统和块存储负责人,国内知名Linux内核研发人员,在内核主线有超过300个提交,在文件系统等存储领域为内核主线做出了卓越的贡献,目前带领团队负责阿里巴巴Linux内核以及块存储相关的研发工作。

刘峥,花名文卿,阿里云系统和块存储技术专家,高IO型本地盘存储实例底层研发负责人,专注于Linux内核及存储领域的研发和性能优化等工作。

彭亚雄,花名崆闻,阿里云弹性计算产品专家,高IO型本地盘存储实例产品负责人,专注于块存储领域的产品工作。




上一篇:详解:什么是NVMe?


下一篇:Bootstrap系列 -- 35. 按钮的向下向上三角形