共计 3381 个字符,预计需要花费 9 分钟才能阅读完成。
Latency 指标对于存储系统性能的重要性
咱们剖析一套分布式存储系统,次要从可靠性、易用性和性能三个维度着手剖析。
可靠性: 是存储系统的基石,一款存储系统至多须要提供 99.99% 的数据可靠性,数据失落或者错乱对于存储系统是致命的,对大数据、云存储这样大规模的分布式集群
易用性: 是系统管理员最关怀的问题,次要体现产品设计、故障解决和零碎的扩展性
性能: 如果可靠性是存储系统的基石,那么性能是存储系统的灵魂,对一款优良存储系统,高牢靠与高性能缺一不可
本文将从性能的维度剖析分布式存储系统,那么如何剖析一款分布式存储系统的性能呢?
让咱们先理解评测存储系统的主要参数:IO Type、IO Mode、IO Size 和 IO Concurrency;这些参数的值的不同组合对应了不同的业务模型,场景的模型如下表所示:
表一:罕用业务类型
注 1:SPC-1,次要掂量存储系统在随机小 IO 负荷下的 IOPS,而 SPC- 2 则次要掂量在各种高负荷间断读写利用场合下存储系统的带宽。
注 2:SPC- 1 将测试区域形象为 ASU,ASU 分为三类:ASU1 长期数据区域,ASU2 用户数据区域和 ASU3 日志区域。
依据上表可知,因为业务类型是多种多样的,很难做到全面笼罩,通常应用三个性能指标:IOPS、Throughput 和 Latency 来测评一款存储系统。通常,大 IO 应用指标 Throughput 来评测零碎性能;小 IO 应用 IOPS 来评测零碎性能。那么,性能指标:Latency 的作用是什么?并且 Latency 指标往往容易在性能评测中被忽视。在这里介绍一下性能指标 Latency 的作用,用户评测一款存储系统之前,测试零碎的 IOPS 和 Throughput 都很称心,但上线后,反映业务零碎卡顿,其外围便是 Latency 过高。
上面援用一段网络博文:“即便供应商新型的存储系统在 60/40 混合读写条件下能奇迹般地实现 1,000,000 4K 随机 IOPS,我还是想晓得它的提早是多少。Dimitris Krekoukias 在最近的一篇对于 IOPS 和提早的博客中写道:某供应商的零碎能实现 15000 的 IOPS,均匀提早为 25ms。然而数据库引擎还是提醒高水平 I / O 等待时间。
一位批评家在 Krekoukias’s Ruptured Monkey 博客中具体叙述了只有在提早小于 4ms 的状况下,信用卡处理器才不会减慢防欺骗或提款受权等过程。”同样,冬瓜哥在博文中解说了如何了解时延,这里简略复述下:“每秒执行 1000 个 IO,均匀每个 IO 的执行消耗了 1000ms/1000IOPS=1ms,所以每个 IO 的均匀时延就是 1ms,这有什么不对呢?”下面的计算疏忽了并发度这个因素。对于异步、高并发的业务,这个存储系统能够满足业务需要。但基于 OLTP 和 OLAP 的业务个别是同步的且低并发的业务,这款存储系统是否满足业务需要,这仍是一个问号。
通过下面的材料咱们得出:实现高性能的要害是高 IOPS 和低 Latency 的联合。当存储系统提供更高的 IOPS 时,单 IO 的时延不应同步进步过多,否则将影响业务零碎的性能。比方 JetStress 倡议均匀时延应小于 20ms,最大值应小于 100ms。
分布式存储中的 Latency 问题
咱们先看下传统存储的时延,在传统存储系统中,其 IO 时延有着人造的劣势。劣势一是物理 IO 门路较短,通常为机头控制器后端再挂载 JBOD;劣势二是应用 Raid5、RAID10 或者 RAID 2.0 等数据保护算法,这些算法是基于 Disk 或者 Chunk,比基于故障域的正本模式开销小很多。
图一:传统 SAN IO 架构
图二:Raid 2.0 原理
在分布式存储中,由多台或者上百台的服务器组成,且应用正本模式。所以一个 IO 通过网络,在多个正本服务器上解决,且每个正本都有数据一致性查看算法,这些操作都将减少 IO 的时延。
图三:分布式集群 IO 流
从上图可知,三正本的分布式存储系统,一个写 IO,须要从写 Leader 和写两个 Follower 实现后才返回给 user;
分布式存储的正本模式对性能的影响到底有多大呢?为了理性的意识,咱们先看两个性能比照:
图四:在本地存储跑 OLTP 业务
图五:在分布式存储上跑 OLTP 业务
依据下面两图的性能数据,分布式存储的 IO 时延确实很高。
分布式存储系统的另一个性能问题是 IO 的抖动,体现在时延上是均匀时延与最小时延和最大时延偏离值很大,呈现这个问题的次要起因是散布零碎的架构原理与 IO 申请处理不当引起;比方,正本之间的强一致性,只有有一个正本响应稍慢,整个 IO 的时延将减少或者一致性算法引起 IO 短暂沉积,IO 都发送到雷同的存储节点。
焱融自研分布式存储 cache 引擎
对于如何升高分布式存储 Latency,其实是一个零碎又简单的事件,牵一发而动全身,让咱们先来看看阿里云云存储和华为的闪存阵列都做了哪些工作:
阿里云 ESSD
硬件降级:服务器、SSD、网络(40GB/s, 25GB/s)、网络交换机、RDMA 协定
网络通信框架:Luna,RDMA+ 用户态驱动 + 公有 I / O 协定
线程模型改良:用户态驱动,退出 co-routine 协程,加 run to completion 模式
数据布局:采纳追加写,批改元数据模式(元数据记录数据的地位)
更粗疏的分层和形象;针对不同的 IO 属性,提供更定制化的策略模块,满足不同的 IO Profile 需要
华为闪存 OceanStor Dorado V3
硬件优化,硬盘框采纳 12Gbps 的 SAS 直连管制框模式;精简 NVMe SSD 协定
对时延敏感的要害解决不被频繁打断、不被其余工作阻塞
处理器分组技术,将处理器中的各个核依照业务需要划分成不同的分区,要害业务在各个分区上运行,不被打断
为了保障申请的稳固低时延,读申请和写入 cache 的写申请能够在存储系统内优先领有各种要害的解决资源,包含:cpu、内存、访盘并发等;cache 异步刷盘的申请优先级低
无效聚合,保障大块程序写入 SSD,实现申请解决效率最优
冷热数据分区,缩小写放大,晋升性能
充分发挥 SSD 的垃圾回收机制,在擦除块时缩小数据搬移量,较少对 SSD 的性能和寿命的影响
等等。。。
可见通常进步性能,优化时延的次要办法概括起来有以下几个方面:
- 硬件降级,诸如 NVMe,RDMA
- 优化 IO 门路,通信框架
- 优化每个模块的解决工夫
- 优化磁盘布局
- 减少数据缓存层
以 NVMe 为例,NVMe 驱动层间接透过 SCSI 协定栈,由驱动层与通用块层间接交互,以达到升高 IO 时延的指标,同时应用通用块层的多队列机制,进一步的晋升性能。不过这种形式的弊病是对于客户的成本上升较高。
图七:通用存储设备协定栈与 NVMe 协定栈
个别存储厂商的通用无效形式是利用减少数据缓存层来升高提早,即利用在存储节点给多块 HDD 配置一块 SSD,再应用开源 BCache 计划,此种计划是一种通用的经济实惠解决方案。如下图所示,不过这种计划对性能晋升无限,次要起因还是 IO 门路过长,分布式存储核心层逻辑过于简单,同时采纳开源 BCache 计划也存在着很多问题诸如:BCache 尽管开源,但如果呈现问题,根本没有保护的能力;BCache 减少运维难度;BCache 对成员盘的故障解决能力较弱。
图八:后端缓存原理
焱融科技存储研发团队,依据多年的技术教训及参考国内外厂商的设计思路,在最后设计焱融分布式存储软件时,针对如何晋升性能升高 IO 提早的方案设计上,自主设计实现了前后两端的缓存引擎即在后端缓存的根底上减少客户端缓存层,分拆存储核心层的局部性能,在网络层与存储核心层之间实现一个分布式缓存读写层,在网络收到申请后,将数据写入到缓存层中,实现分布式缓存读写,同时可保证数据的可靠性。整体设计思路如下:
图九:分布式读写缓存
通过这种实现形式,焱融分布式存储软件在性能上绝对其余只有后端缓存计划有着显著的性能晋升,在 IOPS 上晋升近 30%,可能达到裸盘 SSD 性能的 85% 以上,提早升高近 3 倍,具体比照数据如下:
图十:性能比拟
目前焱融研发团队,依据现有设计的根底,继续迭代,打算在下个版本的产品 release 中整体 cache 引擎架构如下,即通过本地缓存读、分布式缓存读写和后端缓存读写多层次的缓存,满足不同业务对性能高且安稳的总体需要。在 IO 门路上多层次的缓存,整个集群的 IO 将更加安稳,从 IO 解决的层面上升高 IO 稳定。预计性能达到裸盘 SSD 90% 以上。
图十一:分布式层级缓存