写点什么

高 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:005525
用户头像

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

关注

评论

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

JS词法环境和执行上下文

hellocoder2029

JavaScript 前端

Jmeter安装配置详细教程

Jmeter 性能测试 接口测试

打造江西数智产业高地,百度飞桨人工智能产业赋能中心落户南昌青山湖

飞桨PaddlePaddle

飞桨 PaddlePaddle

前端监控之性能与异常

京东科技开发者

监控 服务端 页面 企业号 2 月 PK 榜 js代码

python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(优化版)

Python 单元测试 自动化测试 unittest 测试框架

秒懂算法 | 基于朴素贝叶斯算法的垃圾信息的识别

TiAmo

机器学习 算法 过滤算法

中移链结合CA证书实现节点准入控制

BSN研习社

前端一面必会面试题(边面边更)

coder2028

JavaScript 前端

手把手教你为基于Netty的IM生成自签名SSL/TLS证书

JackJiang

一文详解 Netty 组件

京东科技开发者

Java 架构 Netty nio 企业号 2 月 PK 榜

最佳实践|用腾讯云智能文字识别实现网约车信息管理

牵着蜗牛去散步

人工智能 腾讯云 腾讯 最佳实践 文字识别

2023年关于身份安全的4 个预测

HummerCloud

“四维一体”,银行数据使用安全新姿势|盾见

极盾科技

数据安全

龙蜥开发者说:为爱发电!当一个龙蜥社区打包 Contributor 是怎样的体验?| 第16期

OpenAnolis小助手

Linux 开源 rpm 龙蜥社区 贡献

Node.js实现大文件断点续传

coder2028

JavaScript 前端

2023年:我成了半个外包

Java 架构

基于selenium的UI自动化实践

Python 自动化测试 selenium

集度汽车 Flink on native k8s 的应用与实践

Apache Flink

大数据 flink 实时计算

Selenium启动IE11常见问题解决方法

自动化测试 selenium IE

Python基础知识入门(一)

漫步桔田

2023 最新 Java 中高级1000道面试题目汇总解答

架构师之道

java面试

MySQL事务的12连问,你顶得了嘛

采菊东篱下

MySQL java面试

Serverless Kubernetes的思考与征程

阿里技术

Kubernetes Serverless

ChatGPT“狂飙”出圈,快来分享你眼中的ChatGPT吧!

InfoQ写作社区官方

热门活动 ChatGPT

CDR2023新功能抢先看

茶色酒

cdr2023

Corel VideoStudio会声会影2023中文语言版本

茶色酒

会声会影2023

春季3月 · CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum

ScrumMaster CSM

Flink CDC+Kafka 加速业务实时化

Apache Flink

大数据 flink 实时计算

Pycharm+PyQt5+Python3.5开发环境配置(详细教程)

Python pycharm 环境安装 PyQt PyQt5

春季3月 · CSPO认证周末班【提前报名特惠】“价值交付课程” | 全国招生

ShineScrum

产品经理 PO Product Owner 产品负责人 产品愿景

BSN-DDC基础网络详解(三):注册门户账号和业务开通(2)

BSN研习社

BSN-DDC

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