我相信随着科技的急速发展,IT也一样。所以说存储更是这样,从技术到用户,再到应用,都在飞一般地变化着。
当几位存储专业人士聚到一起的时候,他们的话题总会转到存储的未来上。比如说我和Henry Newman 在一起录制关于Linux文件系统这一系列的节目时,我们就会被问到,当我们领导着这一领域时,将会发展什么类型的文件系统或存储技术。
我决定写一些关于存储未来发展的趋势,尤其是存储设备和分层软件,因为我觉得这两个主题需要放在一起来说。
7200转与SSD欲分天下 15000转或陷囧境?
我们发现,越来越多的应用的性能是由IOPS性能控制的。在高性能计算(HPC)中,检查应用I/O模式显示小的读写函数调用比之前预估的更为普遍。从典型的程序中可看出,读取GB级数据甚至TB级数据有大量的1k和4k的读写函数调用。所以,通过这些工作负载不难看出,占主导地位的IPOS I/O 模式已深入到操作系统和文件系统中。
有些任务是去帮助操作系统处理以IOPS为主导的工作负载。其中一个方法是在存储服务器中使用大量的缓冲区,允许系统将小的读写函数合并成为大的函数调用中去。因为这样能够减少IOPS的影响,可能会使得工作负载变得更有顺序。然而,这样有时会需要巨大的缓冲区来做这个事情。此外,这还会导致很大的延迟,因为每个被保留在缓冲区的具有I/O功能的数据试图合并到一个单一的请求中。在试着转换IOPS工作负载到连续的工作负载之间有一个分界线,它并没有升级到非常高的延迟。因此实际的结果很大一部分取决于那些特殊的应用以及工作负载。
我们还发现,有比我们预想更多的工作负载使用随机IOPS而不是连续IOPS。连续的IOPS是合适的工作负载,因为许多系统能够接受它们而且能将它们合并到单一的请求中,仅使用极小的缓冲区,因此只有很小的延迟。所以致使所需的IOPS比我们期待的要小。但是如果有足够临近的IOPS功能,你可以将请求转换到单一的更大的I/O请求中。然而,对随机的IOPS来说,没有太多你能够做的事情,除非在存储服务器中做个特别大的缓冲区。
使用这些趋势,应用到存储设备中,能够看出当应用正在运行中时,我们需要更大IOPS能力的设备。我以IOPS的能力来将存储设备按如下归类:
• 7200转SATA/SAS驱动器:100-125 IOPS性能
• 15000转SATA/SAS驱动器:200-300 IOPS性能
• SATA/SAS SSD: 10000-100000 IOPS性能
• PCIe SSD: 100000-1000000 IOPS性能
对第一项来说,这些数字是随机或连续的IOPS,尽管一些设备有很低的随机IOPS性能,你可以看出在旋转磁盘驱动器和固态硬盘之间的IOPS性能有很大的差异。在7200转的SATA硬盘和PCIe SSD的IOPS上有三到四个数量级的差异(从1000到10000)。
与此同时,每GB存储的价格的也有数量级的差异,在7200转的SATA硬盘和PCIe SSD之间大概差2-3个数量级。
最后,从7200转硬盘到PCI SSD或SSD上具有2-20种不同容量的差别。我们知道目前已经有3TB容量的SATA/SAS硬盘了。虽然现在也有更大容量的SSD或PCIe SSD,但他们的价格都贵得出奇。因此,SSD或PCIe SSD的所谓“标准的”容量应该在200GB到1TB之间。
大容量的7200转的硬盘具有非常高的性价比但IOPS性能非常的低。另外,虽然SSD的IOPS性能非常高,但性价比又非常低。
夹在中间进退两难的就是1.5万转的驱动器了。性价比高于SSD,低于7200转的驱动器。然而,当你把SSD也考虑进去做比较时,15000转的驱动器的IOPS性能并没比7200转的好多少。
我认为,1.5万转的驱动器已陷入了一个窘境。我估计它将在几年之内便会消失,只剩下7200转的驱动器和SSD驱动器。毕竟15000转的驱动器集成了旋转驱动器的缺点(低IOPS)和SSD的缺点(低容量与低性价比)。按逻辑想一下就会得知,企业将会在基于SSD的存储器上运行应用,然后将其储存在7200转的驱动器上(或存储在磁带机上)。
分层技术:目标已定 如何实现?
然而,未来根本不是有保证的。为了实现这一目标,我们必须找个好的方法有效地将数据从7200转驱动器中迁移到SSD中。我不认为将固态存储放入旋转存储中作为额外的缓存是一个正确的方法。然而,还是有一些相当有趣的存储系统是使用SSD作为缓存的。
整合这两种类型存储(低成本,大容量的旋转驱动器和SSD)最显著的方法是使用分层技术。分层技术成功的关键就在于能够在两个存储层中快速的迁移数据。比如,你可以从一个应用中拦截open()调用程序一直到开始迁移不同层中的数据。如果结合一系列应用,而且这些应用在运行中使用高速的存储设备,你就可以得到全部效益却不需花费全部费用。为此,存储系统和分层必须识别当何时需要做数据迁移,然后快速地执行。
另外,在一个应用运行之前,数据或从低速存储器中被迁移到高速存储器中。这被称作为“数据迁移升级”(Staging the data)。这种方法能用于HPC中并产生良好的影响,因为应用使用排程器(Job scheduler,也称为资源管理器) 来运行程序,当用户指定一个事件时,它是如何运行的,需要多少处理器来工作,需要多大的内存,哪个文件被用作输入,哪个文件被用作输出。以上这些,用户都能够提交自己的排程器中。排程器能够决定用户指定要求的任务在何时何运行。排程器还能从低速存储器中复制输入文件到高速存储器中,以便为将要运行的应用做准备。当应用运行结束的时候,排程器可将文件从高速存储器中再迁移回低速存储器中来。
但是分层的方法比使用作业调度器更好,因为它们发生在用户不知道的背后。然而,现有的分层软件不见得有能力快速识别数据何时需要迁移到高速存储器并快速实现这一行动,所以它有极限值。大多数的分层软件需要存储了解文件中数据块的使用模式。过一段时间之后,可能会将它们迁移到基于测定的高速存储器中(也可能是预计的)。因此,现在真正需要的是更出色的分层软件,而不是目前这样不给力的软件。
现有磁盘不给力 新老结合才王道
这只是一个预言……我很容易错误的认为我是对的,但是我认为我们有必要思考未来存储的发展方向。我们目前着眼于工作负载,更多的是基于IOPS。但与此同时我们还需要更大的容量。可关键在于,当运行应用的时候,我们真的仅需要高IOPS性能,因此我们可以把一部分存储做成一个基于固态盘的小型系统,在合理价位上具有高IOPS性能,但同时只有较低的存储容量。然后,我们再建一个容量很大但是性能很低的存储池,使用大容量和低成本的7200转驱动器。因此,我认为15000转的驱动器将会于未来几年在市场上消失。
另外,成功的关键还在于将两个存储池通过中间件结合在一起,确保数据能够容易的在两方之间迁移。使用分层软件或许是最好的解决方案。但是现有的软件实在很糟糕。因因此,需要做的就是快速地确定数据在何时必须从低速存储器中迁移到高速存储器然后再迁移回来。由于数据迁移的原因,这不会具有太高的应用性能。
当前的分层软件还做不到这一点,但是我希望厂商能知道这些问题,以便改进它们。