互联网时代下机械硬盘的发展史(下)

Partial Stroking:根据场景提升性能

100 IOPS,难以满足现在互联网海量高并发请求。所以,DB都会将数据存在SSD。

但20年前,没有现在这么便宜的SSD硬盘。DB数据只能存放在HDD。


即便如今数据中心用的HDD,也是7200r,要更快随机访问速度,会选择SSD。但当时,SSD非常贵,还没能商业化。硬盘厂商们在不断研发转得更快的硬盘。数据中心往往用10000转,乃至15000转的硬盘。

直到2010年,SSD开始逐步进入市场,西数还在尝试研发20000转硬盘。转速更高、寻道时间更短的机械硬盘,才能满足实际DB需求。


但10000r,乃至15000r硬盘也更贵,想节约成本,提高性价比,就得想它法。Google早年用家用PC乃至二手硬件,通过软件层面设计解决了可靠性和性能。那有办法提高机械硬盘的IOPS吗?这就是Partial Stroking或者Short Stroking,“缩短行程”技术。

既然访问一次数据的时间:“平均延时+寻道时间”,只要能缩短其一,就能提升IOPS!


一般 硬 盘 的 寻 道 时 间 > 平 均 延 时 硬盘的寻道时间 > 平均延时硬盘的寻道时间>平均延时,如何缩短平均寻道时间?

最极端的:不需要寻道,即将所有数据都放在一个磁道。比如始终把磁头放在最外道磁道。寻道时间就基本为0,访问时间就只剩平均延时。

IOPS就变成:

1s / 4ms = 250 IOPS

但只用一个磁道,能存的数据就很有限了!可能我们还不如把这些数据直接都放到内存呢!

所以,实践可只用1 / 2 1/21/2或1 / 4 1/41/4磁道,即最外面1/4或1/2的磁道。

如此,硬盘可使用的容量可能变成1/2或1/4。但寻道时间也变成1/4或1/2,因为悬臂需移动的“行程”也变成原来1/2或者1/4,IOPS大幅提升!


比如7200r硬盘,正常平均延时4.17ms,寻道时间9ms。原本IOPS:

1s / (4.17ms + 9ms) = 75.9 IOPS

若只用其中1/4磁道,则IOPS变成:

1s / (4.17ms + 9ms/4) = 155.8 IOPS

IOPS提升一倍,和块15000r硬盘性能差不多。但这时硬盘可用空间也只有原1/4。所以,这样通过软件去格式化硬盘,只保留部分磁道让系统可用的情况,可大大提升硬件性价比。

总结

机械硬盘的硬件主要由:盘面、磁头和悬臂组成。

数据在盘面上的位置,可通过磁道、扇区和柱面来定位。

实际的一次对于硬盘的访问,需要把盘面旋转到某一个“几何扇区”,对准悬臂的位置。然后,悬臂通过寻道,把磁头放到我们实际要读取的扇区上。


受制于机械硬盘的结构,对随机数据的访问速度,就要包含旋转盘面的平均延时和移动悬臂的寻道时间。通过这俩时间,能计得机械硬盘IOPS。


7200转机械硬盘的IOPS,只能做到100。早期没有SSD,所以想出Partial Stroking这个浪费存储空间,但能缩短寻道时间以提高硬盘IOPS的方案。


上一篇:业务代码如何才能不再写出大串的if/else?(上)


下一篇:线程方法:sleep( )、wait()、join( )、yield( )的区别