一、业界背景与现状

近些年来,有三件事实在业界同时发生:

    1.  业务的发展朝着“生产”和“使用”海量增长数据的方向演进。

    2.  摩尔定律 的失效。

    3.  快速增长的存储和网络带宽需求同时束缚着传统数据中心基础设施。

  这三件事实的影响下,大大限制了为应用程序扩展能力、数据存储和分析扩展容量以及以系统降本增效的能力。这也导致以计算为中心的架构逐渐转变为了以数据为中心的架构,同时对数据库管理员、IT 基础设施管理者甚至采购团队提出了新的挑战。

  随着摩尔定律的失效,计算设备慢慢向着不同的专有领域发展,在算力芯片方面,逐步衍生出了FPGA/GPU/TPU/DPU等专有算力芯片;在互联网络方面,也衍生出了具有高吞吐低延迟的智能网卡等;而在算力和互联网络方面的瓶颈得到缓解之后,存储方面的瓶颈便开始浮现,因此,在存储方面,CSD也随之应运而生(即计算存储驱动器,英文全称 Computational Storage Drives , 通常我们也将其称之为” 计算型固态盘”)。

二、什么是CSD

  简单来讲,CSD 其实就是在普通 NVMe SSD 的基础上,在盘片内部集成一个或多个计算存储引擎的新型 NVMe SSD。与普通 NVMe SSD 相比,CSD 在控制器内集成了计算存储引擎(CSD盘内物理结构如下图所示),因此能够直接在盘内对数据进行相关计算(例如:数据透明压缩/解压、原子写、计算下推等)。

  ScaleFlux 目前的主流产品 CSD 2000就是这样一款新型 NVMe SSD 。其主打的计算特性为透明压缩/解压,那么,CSD 2000能够为应用带来怎样的价值呢?下面我们以普通NVMe SSD为对照,对CSD 2000 的应用价值进行简单介绍。

1.  CSD 2000能够大幅提升应用的性能

  在数据有压缩需求的场景中,相比采用普通 NVMe SSD的方案(如下图左侧所示),压缩/解压引擎是定义在SSD盘外(主机端或者加速卡),这种方案中压缩对应用不透明,且数据的压缩与解压需要占用大量主机总线带宽在CPU或加速卡与SSD之间来回拷贝数据,这会严重影响整体性能,而如果采用CSD 2000(如下图右侧所示),压缩/解压引擎是定义在盘内部的,数据的压缩与解压完全是在盘内进行,数据是完全零拷贝的,不需要占用主机总线资源,从而达到提升性能的目的。

  在数据无压缩需求的场景中,采用普通NVMe SSD方案,应用写入的数据量与SSD NAND中的空间占用大小相等。而采用CSD方案,CSD 2000内置的透明压缩/解压引擎,对数据的压缩与解压完全是在盘内进行,对应用完全透明(就好像数据从未压缩过一样),且能够在大幅降低物理空间占用的同时(如下图所示,假设数据的压缩率为2:1,则使用CSD 2000时实际写入NAND介质中的数据可减少一半),显著提升应用的性能(通常,当SSD NAND介质容量使用率超过60%以上时,SSD盘内的GC会逐渐增多,这会对SSD的性能造成严重影响。而采用CSD 2000方案,实际写入NAND介质的数据量会显著减少,这相当于增加了盘内的OP空间,而OP空间一旦增多便能够显著降低GC,进而能够显著提升性能)。

2.  CSD 2000能够大幅降低存储TCO

  CSD 2000支持LBA(逻辑块地址,它的大小代表OS层面的可用空间大小)到PBA(物理块地址,它的大小代表NAND介质的可用空间大小)之间的变长映射,使得CSD 2000内置透明压缩/解压得以对应用完全透明,在大幅降低SSD物理空间使用率的情况下,还能够大幅提升应用性能。

  也正是由于CSD 2000内置了透明压缩/解压引擎,使得应用数据实际写入到NAND介质中的数据量可能很少(数据压缩率越高,写入NAND介质中的数据量就越少),因而使得SSD物理空间的使用率较低,为了使得SSD的物理空间使用率最大化, CSD 2000支持将LBA进行放大(以数据的实际压缩率作为依据),这样一来,与普通NVMe SSD相比,在同等物理容量的前提下,CSD 2000能够提供给应用更大的可用空间,数据的压缩率越高,CSD 2000能够提供给应用的可用空间越大,从而显著降低存储TCO(总体拥有成本)。如下图所示,左侧代表普通NVMe SSD,由于无内置压缩/解压引擎,无论数据压缩率如何都无法降低存储TCO;右侧代表CSD 2000,这里假设数据压缩率为2:1,根据数据的实际压缩率2:1,CSD 2000支持将应用可用空间从3.2TB放大2倍为6.4TB,从而实现了将TCO成本降低50%的目的。

三、CSD 在携程的应用实践

  一直以来,ScaleFlux积极探索在数据库应用领域中可落地的应用场景,在数据库应用领域斩获了良好的应用成果。例如:在MySQL数据库中,在CSD 2000 NVMe SSD产品的"透明压缩"与"原子写"特性加持下,其在数据可压性高、访问并发高、数据量大的应用场景中,与普通NVMe SSD相比,普遍能够节省60%以上存储空间的同时还能够为读写性能带来80%以上的提升。

  从2021年3月份开始,ScaleFlux便与携程展开了一系列的技术交流和测试验证工作,测试结果表明:

  • CSD 2000在携程不同业务类型的生产数据样本中测量到的整盘数据压缩率分别在2.29~2.56之间,这意味着CSD 2000能够帮助携程能够节省56%~61%的存储空间。
  • 在FIO基准测试中,CSD 2000的顺序读、顺序写、随机读性能与普通NVMe SSD性能相当,是2 x SATA SSD RAID0的3倍以上 ;CSD 2000的随机写性能是普通NVMe SSD的3倍以上,是2 x SATA SSD RAID0的6倍以上 ;CSD 2000的随机读写混合性能是普通NVMe SSD的2倍以上,是2 x SATA SSD RAID0的6倍以上。这意味着能够帮助携程大幅缓解业务持续增长、业务请求暴增等场景下磁盘的负载压力。

  目前,CSD 2000已在携程数百台MySQL生产服务器中上线,涉及的业务系统包括:风控,机票,酒店等。在用户使用体验上也非常满意,例如:

  • 在某业务库中,未使用CSD 2000之前,文件系统空间使用率频繁触达90%+告警阈值,使用了CSD 2000之后,在不需要额外业务拓展架构的支持下,能够做到尽可能不影响生产业务的前提下,在线一键扩容500GB+文件系统可用空间,使得空间告警压力瞬间释放。如下图所示

  • 在某业务库中,未使用CSD 2000之前,磁盘IO负载频繁触达告警阈值,使用了CSD 2000之后,磁盘IO负载压力瞬间释放。如下图所示

四、CSD的应用前景展望

  ScaleFlux作为一家可计算型存储厂商,坚信可计算型存储是顺应未来技术发展潮流、是缓解未来数据量爆炸式增长压力的绝佳解决方案之一,在携程良好的实践成果也是对ScaleFlux产品能力的强力应证。在未来,ScaleFlux将会在更多应用领域中积极探索,在不久的将来,相信可计算型存储将会在越来越多的应用场景中落地生根。

  当今时代,我们正处在一个前所未有的数字化转型的进程中,各种新兴技术的产生和使用都会面临着一个共同的问题,那就是数据产生和使用呈爆发性增长,这会给底层的计算和存储的技术带来巨大的挑战。

  在过去的几十年中,存储的技术从卡带、到磁盘、到固态硬盘,从容量和性能上都得到了巨大的提升,但其提升的速度远远赶不上数据增长的需求,如果我们把2020年全球存储的产能加起来,大约20ZB(相当于20亿张10TB的硬盘),这已经是比较惊人的产量,但到了2025年,数据的增长大约会达到125ZB,与此同时,存储的产能只能达到22ZB,可想而知这将是存储面临的一个巨大挑战。

  Intel的创始人提出的摩尔定律在过去的70年代到00年代长期神奇般的有效,CPU的性能每隔18个月翻一倍、价格下降一半。但是在过去的10多年里,由于CPU的性能提升逐渐接近物理极限,摩尔定律已经逐渐失效,CPU的性能每隔18个月的提升已经不足2倍,与此同时数据的增长量却呈爆发式增长,这种情况下算力也将面临一个巨大的挑战。

  当传统的计算与存储的方式难以满足数据增长需求的时候,就必须通过创新来解决计算和存储的效率,要提升计算和存储的效率,最有效的解决方案就是将计算与存储分离,可以将不同的计算类型细分到不同的更加高效的计算引擎里。可计算型存储由此应运而生,将近存储的数据相关的计算(例如:数据的压缩与解压、数据的过滤、数据的加密与解密等)集成到存储设备内部,不需要额外的设备,这就意味着不需要主机CPU参与,不需要在系统总线中来回拷贝数据,不需要额外占用PCIe插槽与额外的供电,同时算力能够随着存储的扩容而线性扩展,甚至能够做到并行计算等等。

  我们完全有理由相信,可计算性存储一定能够很好地为未来5G时代的万物互联、AI、区块链、自动驾驶等新兴技术保驾护航!

ScaleFlux CSD 2000 在携程的应用实践的更多相关文章

  1. 干货 | 质量保障新手段,携程回归测试平台实践 原创 Sedro 携程技术 2021-01-21

    干货 | 质量保障新手段,携程回归测试平台实践 原创 Sedro 携程技术 2021-01-21

  2. 携程React Native实践

    React Native(下文简称 RN)开源已经一年多时间,国内各大互联网公司都在使用,携程也在今年 5 月份投入资源开始引入,并推广给多个业务团队使用,本文将会分享我们遇到的一些问题以及我们的优化 ...

  3. 敏捷之旅--携程行程&订单团队

    转自本人运营的公众号“ 携程技术中心PMO”(ID:cso_pmo)     关于我们   我们面临的挑战   敏捷开发是以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.先把一个大项目分 ...

  4. 携程Apollo统一配置中心的搭建和使用

    原文链接:https://blog.csdn.net/luhong327/article/details/81453001 一.Apollo配置中心介绍 1.What is Apollo 1.1 Ap ...

  5. 干货 | 数据为王,携程国际火车票的 ShardingSphere 之路

    以下文章来源于携程技术 ,作者瑞华 作者简介 瑞华,携程高级后端开发工程师,关注系统架构.分库分表.微服务.高可用等. 一.前言 随着国际火车票业务的高速发展,订单量快速增长,单数据库瓶颈层面的问题逐 ...

  6. 微信小程序体验(1):携程酒店机票火车票

    在 12 月 28 日微信公开课上,张小龙对微信小程序的形态进行了阐释,小程序有四个特定:无需安装.触手可及.用完即走.无需卸载. 由于携程这种订酒店.火车票和机票等工具性质非常强的服务,非常符合张小 ...

  7. 携程App的网络性能优化实践

    首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...

  8. 实现携程X分钟前有人预定功能

    实现携程X分钟前有人预定功能 原理:利用cookie与计时器两部分: 首先,进入页面,x会被随机数赋值,赋值后x会一分钟加1,直到加到60,再从1开始累加. 页面是否相同是根据页面的url后的id值判 ...

  9. 今天携程出事了:让我们来学习下http的响应码

    就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...

随机推荐

  1. 新装CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64

    1.打开网络配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33(每个机子都可能不一样,但格式会是"ifcfg-e..."). 2. ...

  2. Python中类的变量,一个下划线与两个下划线的区别

    形似       功能 __xx 这是私有变量, 只有内部可以访问,外部不可以访问.但是也不是一定不可以访问,只要以 _类名__xx样式就可以访问 .但最好不要这样做,养成良好编程习惯 _x 这是实例 ...

  3. js 模块化 -- export 时 一个默认和多个默认的写法

    js文件 只有一个  food 类,一般写 export {food} 或者 export {food as default} 那么如果有多个呢? 这样 export {food, food2} 或者 ...

  4. sqlplus -S参数表示什么意思?

    sqlplus -S , -S选项是静默模式,是Silent的缩写.在这种模式下将会以最精简的形式完成SQL*Plus的交互过程. -S模式多用于脚本模式.在命令行sqlplus -S还有可能出现卡住 ...

  5. kubernetes 之部署metrics-server

    Kubernetes 版本是 1.14 # kubectl version --short Client Version: v1.14.3 Server Version: v1.14.2 下载文件 f ...

  6. Linux下Tomcat启动、停止、重新启动

    在Linux系统下,重启Tomcat使用命令操作的! 1.首先,进入Tomcat下的bin目录,${CATALINA_HOME}代表tomcat的安装路径 进入Tomcat安装目录: cd ${CAT ...

  7. react中state与setstate的使用

    我们可以利用state来定义一些变量的初始值 //放在construcor里 this.state = { list: [1, 2, 3] } 要更改state里的值,注意要遵循react里immut ...

  8. layui父表单获取子表单的值完成修改操作

    最近在做项目时,学着用layui开发后台管理系统. 但在做编辑表单时遇到了一个坑. 点击编辑时会出现一个弹窗. 我们需要从父表单传值给子表单.content是传值给子表单 layer.open({ t ...

  9. js对象方法

    Number对象方法 toFixed() 方法 toFixed()方法返回的是具有指定位数小数的数字的字符串表示.例如: var oNumberObject = new Number(68); ale ...

  10. 金融云原生漫谈(三)|银行云原生基础设施构建:裸金属VS虚拟机

    在金融行业数字化转型的驱动下,国有银行.股份制银行和各级商业银行也纷纷步入容器化的进程.   如果以容器云上生产为目标,那么整个容器云平台的设计.建设和优化对于银行来说是一个巨大的挑战.如何更好地利用 ...