存储系统的 80/20 法则

jopen 9年前

80/20 法则通常被认为是源于意大利经济学家维尔弗雷多·帕累托。帕累托出生于1848年,他是(至少被认为是)占领运动的早期成员之一。他发现意大利国家财富的 80%是掌握在几乎少于20%的人口手中的。由此发散开来看,80/20法则在其他方面的应用同样值得注意,也是很有趣的:因为帕累托观察发现他的园子里的80%的豌豆产自于20%的作物上(他似乎更喜欢数豌豆而不是其他豆子,哈哈)。无论如何,帕累托是不相信均匀分布的理论的。

帕累托原则,以及由此而来的统计学观点“帕累托分布”被看作是统计学幂率的一个实例,它在理解存储器访问模式上也有出人意料的相关性。这就是为什么应用负载、访问磁盘的问题更接近于帕累托分布而不是均匀的随机分布:即大部分的I/O请求访问少量的热门数据,而大量的冷门数据的访问频率远低于此。


我们的系统是由冷数据和热数据混合组成的,这是一个众所周知的事实。混合介质存储系统技术引起了热烈的争议,它也被应用于为非死book这种规模的应用程序设计存储系统。问题就在这里:通过给数据分配不均等的资源可以给类似帕累托分布的结构更好的支持。使用多种存储介质来代替同介质存储系统,这样的分配就可以让我们从那些不经常访问的数据处夺来资源补贴给那些经常被访问的数据。

对帕累托原则的误解导致了构建和度量存储系统时的诸多混乱。例如有些闪存芯片供应商坚持认为在单一、同介质的闪存芯片上构建完全基于闪存的存储系统就能很好的满足工作负荷的要求。从这个角度来看,同介质纯闪存的系统还是高效的“共产主义”存储呢。他们理想化的决定投资这种给所有数据分配均等资源的方案,这导致了资源层面的开支与数据访问层面的开支严重不对等,哎,还是在这里多关注一些吧。

让我们看一下真实的工作数据

为了解释存储的工作负载数据到底有多么的不一致,我们来看一组真实的数据。我们最近对11个开发者桌面存储数据进行了为期一年的跟踪记录。随着时间的推移,对这些数据集的分析变得很有趣,因为它包含了一个很长时间段内的大量数据:存储的轨迹记录,比如 SNIA保存的数据就非常的小(一天内的总小时)或者精确度也很低。总的来说,为期12个月的跟踪记录了大概76亿次的IO操作和在5TB存储数据上进行的超过28TB传输量。

我想通过快速的总结这些数据,指出一些有趣的东西,获取能对你的思考如何规划你的数据存储有些帮助。

上面第一个图表,显示的是所有存储数据在结束trace时的时间。5.1TB的数据被存储在11个桌面,3.1TB的数据在整整一年中没有被访问。因此,可以通过一整年都没有被改变数据来决定那些冷数据被存储在哪个位置。

在另一方面,我们看到仅有627GB,或者大约21%的数据有在一个月内被访问。在更短的时间段里,我们看到类似的级数增长。这个初始容量/时间分析,仅仅是用于验证我们对于访问分布的假设,那么,现在让我们看一个更有趣的现象...

32 GB 4.5 TB (35%) 64 GB 5.9 TB (46%) 128 GB 8.0 TB (62%) 256 GB 10.7 TB (84%) 512 GB 12.6 TB (98%) 1 TB 12.8 TB 缓冲大小... ...对应的请求量.

如上图所示,我把一年来实际的访问量同逐渐递增的“热门”数据进度条对应起来。通过上图,我们对一年来的访问数据有了两个方面的新认知。第一个认知是:这张图罗列出了所访问的数据量,通过它我们可以计算出命中率。如果使用“最近最少访问”(LRU)模型作为填充高速内存方法,那么我们就可以推断图中上半部分(即缓冲)所提供的请求率是多少。如果你把鼠标滚动到上图中,你就能看到命中率是怎样随着系统中高速内存的增加而增长的。

第二个认知是:通过这张图,我们可以计算出数据的一般性访问成本。不是推断每GB存储上我们所花费的费用,而是看看纯粹访问所花费的费用。我完全随意地选择了最小缓冲的大小,即以32GB为高速缓存的最小单位,此时我计算出每访问1GB的数据所花费为1美元。为了提高命中率,我们不断地增加高速存储的数量,现在我们看看这种情况下会出现怎样的情形。为了提高命中率,你不得不一而再再而三成倍地增加高速缓冲的时候,你会发现实际的数据访问量却在相对的减少。因此,你就会很容易地得出访问数据的成本将会更贵。在我们的例子里,要实现100%的命中率所花费的金钱是我们最初使用最小高速缓存实现35%命中率所花费的11倍多。

确定进行不同投入

现在,我们要弄清楚我上面所讨论的事情:我讨论的不是你应当满足35%的命中率。相反,我讨论的是:你花费在访问存储条尾部的资金--即花费在提高根本就没有任何访问的3.1TB性能方面的资金-可能没有花费到正确的地方。我认为资金花费在提高较热门数据访问性能方面会更好一些。

这就是近来我在存储讨论日的第六期或多或少提到的,同时在Coho office的一系列生动的博客日志中提出来的论点。我还说明了当今存储技术方面正在发生的某些显著的技术革新,尤其是现在三种大量使用的固态存储的连接方式(SATA/SAS SSDs,PCIe/NVMe和NVDIMM),它们每一种的费用和性能都差别非常大。

因此,为了获得优异的性能,即便不使用磁盘,存储系统仍然需要使用多种介质,实现混合存储。我发现这就是"混合存储“和"全闪存阵列"(AFA)被误解的原因。对仍然使用磁盘做存储者来说,混合存储系统并不是一个廉价存储系统,它只是一个把更多的钱花费在存放热门数据的高性能存储上的一种存储框架。与此类似,全闪存阵列(AFA)也可以由三个(或者更多)种存储介质组合而成,这也是混合存储。

Coho的存储栈持续不断地监视和描绘工作负载,并适当地分配存储以提高性能,同时汇报你所运行的应用的工作性能。不久前,我们在顶级系统研究会议上发布了令人激动的新算法。如果你想了解更多,(上面链接处)我的存储讨论日展示概要地介绍了工作负载监控和自动分级设计,即分层设计。

非均匀分布无处不在。正是由于帕雷托的观察,各种类型的系统设计才得益于集中力量尽可能高效地做最流行的事情这样的理念。类似这样的设计也使得高速公路和乡间公路设计、中心城市交通系统设计、互联网核心路由设计以及 许多Netflix入门级系列课程设计上都有所不同。存储系统也不例外,而且建设存储系统需要仔细地对工作负载响应进行分析,这样才能正确地确定存储规模,适应存储工作区的特性。

结尾语:

  1. 这篇文章最顶端的图片是一张旧的讽刺斯科特纸巾商业公司的图片。其社交网页上对其的评论。

  2. 非常感谢Jake Wires和Stephen Ingram,他们投入了大量的工作对这篇文章所采用的数据进行跟踪采集、处理和分析。这儿进行的大量分析是对Coho的Counter Stack引擎查询后得到的结果。还要感谢Stephen帮助开发和调试了界面功能,它使用了由Mike Bostock开发的优秀的D3js库