《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

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

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

关注

评论

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

EXCEL数据如何去重? Python:这事我比你熟

智分析

Python

关于自己的一个梦(飞翔)

Yuchen

托管节点池助力用户构建稳定自愈的 Kubernetes 集群

阿里巴巴云原生

Docker 容器 运维 云原生 k8s

《我想进大厂》之Zookeeper夺命连环9问

艾小仙

zookeeper

Linux-Lab 入门:使用开发板

贾献华

嵌入式 Linux Kenel 开发板 arm boot

anyRTC2020年 年终总结

anyRTC开发者

音视频 WebRTC RTC sdk

SpringCloud 从入门到精通15---Sentinel搭建和服务监控

Felix

Idea工具的各种查找快捷键

小马哥

IntelliJ IDEA 七日更 2月春节不断更

程序员成长第一篇:机会与趋势

石云升

28天写作 2月春节不断更 机会与趋势

即日起 Jira、Confluence 正式停售本地版,中国客户将无法购买

万事ONES

项目管理 开发者 研发管理 团队协作 CTO

最高法规范区块链证据,司法链将走向全国统一

CECBC

区块链

玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定

YourBatman

Module IntelliJ IDEA Project Structure

极客时间产品训练营第三周作业

云随心

产品 作业 产品训练营

MySQL安装教程&问题解决

Mars

MySQL 运维

即构自研海量有序数据网络MSDN,构建全球可靠的多云通讯链路

ZEGO即构

华为18A架构师共享:Netty+Redis+zookeeper+高并发技术栈

996小迁

redis zookeeper 架构 Netty 高并发

【mybatis】- MyBatis基础篇

双木之林

2021年云计算面临的5大网络安全威胁

云计算 云安全

新思科技:以DevOps的速度打造安全的软件

InfoQ_434670063458

DevSecOps 新思科技

产品训练营作业三

胡小湖

ICE暴雪正悄悄崛起

DT极客

你的网站上还在用图片验证码来刁难用户么?一招教你彻底去除图片验证码!

香芋味的猫丶

短信验证码 短信防轰炸 短信防火墙 图片验证码 风控防火墙

区块链与安全随想

CECBC

区块链

HTTPS是怎么保证数据安全传输的?

面试 HTTP

数据库表数据量大读写缓慢如何优化(4)【分库分表】

我爱娃哈哈😍

数据库 架构

后疫情时代,企业如何实现数字化增长?

字节跳动 Kubernetes 容器 云原生

第三周产品经理训练营总结

产品经理训练营

产品训练营第三周作业

朱航

利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?

JackTian

Python 数据分析 数据可视化 化妆品 2月春节不断更

Kafka基础简介

架构精进之路

kafka 七日更 28天写作 2月春节不断更

使用pgBackRest并行归档解决wal堆积问题

PostgreSQLChina

数据库 postgresql 开源 开源社区

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