50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

高 IO 型本地盘存储实例:双十一中,阿里如何将数据库性能提升 100%、响应时间减少 80%?

  • 2017-02-26
  • 本文字数:2589 字

    阅读完需:约 8 分钟

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

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

阿里云在块存储的基础上,以半虚拟化磁盘接口 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 性能。

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

技术创新点

  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 型本地盘存储实例产品负责人,专注于块存储领域的产品工作。

2017-02-26 18:006008
用户头像

发布了 58 篇内容, 共 47.4 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

BOSS直聘首发半小时被下架!300MB实战SpringBoot笔记爆赞过百万

Java spring Spring Boot 框架

PoseiSwap:合规、隐私与支持更广泛的资产

股市老人

关于 PHP 启动 MongoDb 找不到指定模块问题

北桥苏

php mongodb

干货力荐!京东首席架构师:亿级流量架构的核心技术文档

Java 架构 亿级流量

Logstash同步MySQL一对多关联表到Elasticsearch父子文档

北桥苏

elasticsearch Logstash ELK Stack

简单聊聊Java中线程安全有哪些实现思路?

Java 多线程

浅谈Kafka2.8+在Windows下的搭建与使用

北桥苏

php scala kafka

SocketLog 的基本使用

北桥苏

php thinkphp SocketLog

毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题

Java spring Spring Boot 框架

Logstash如何批量同步MySQL多表到ElasticSearch

北桥苏

elasticsearch Logstash ELK Stack

Logstash同步MySQL关联表到Elasticsearch的嵌套文档中

北桥苏

elasticsearch Logstash ELK Stack

如何通过Logstash将MySQL数据同步到ElasticSearch

北桥苏

php MySQL elasticsearch Logstash

由Elasticsearch7.8评分脚本引起的一个索引迁移解决方法

北桥苏

elasticsearch Logstash ELK Stack

深入解析Java适配器模式:将接口转换为你所需要的形式

Java 适配器

Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册

Java 搜索引擎 elasticsearch ES

平台工程 | 内部开发者门户权威指南

杨振涛

DevOps 平台 平台工程 内部开发者平台 内部开发门户

京东内部疯传的Redis学习笔记,被阿里P7夸爆

小小怪下士

Java redis 程序员

windows下Hive搭建踩坑汇总

北桥苏

hadoop hive hql

最简单的canal 1.1.6服务搭建方法

北桥苏

elasticsearch canal

如何让ESP8266板子像APP开发一样方便

北桥苏

php 物联网 esp8266 mqtt

背废完虐面试官!字节架构师8年心血终成《图解设计模式》手册

Java 设计模式

PoseiSwap:合规、隐私与支持更广泛的资产

鳄鱼视界

独一份,15年经验汇聚而成的《SpringBoot“踩坑”手册》首次开源

Java spring Spring Boot 框架

Windows下hadoop环境搭建之NameNode启动报错

北桥苏

大数据 hadoop

在Inteillj IDEA中使用Spark操作Hive

北桥苏

spark hive Big Data

用扩展的方式在 PHP 中使用 Kafka

北桥苏

php Kakfa

单调栈模板总结及应用

timerring

算法

n-Track Studio 9录音、音频编辑一站式完成!

真大的脸盆

Mac 音频制作 Mac 软件 音频处理 录音工具

如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法

北桥苏

thinkphp 反射调用

高IO型本地盘存储实例:双十一中,阿里如何将数据库性能提升100%、响应时间减少80%?_数据库_木环_InfoQ精选文章