基于闪存的固态盘(SSD)正在成为企业存储用户的一个大难题;和我一起工作的很多用户出于很多原因正打 算采用这种新型“Tier 0”数据存储,可能这些原因非常简单,比如每瓦IOPS、每单位成本IOPS、(或者对于某些应用来说)每GB/s存储的带宽。
相比传统磁盘存储来说,固态盘有很多缺点,到目前为止最大的缺点恐怕就是成本了。有人说,因为闪存固态盘的出现,旋转硬盘很快将成为历史,但我认为这在短期内是不太可能发生的,即使发 生了,取代了旋转硬盘的设备也不会是基于闪存的,并且不会在这个十年结束之前出现。厂商们说磁带将走向灭亡已经说了20多年了, 但是磁带至今仍然在数据保护策略中扮演着重要的角色。看上去似乎多层存储将一直存在。
这是关于闪存固态盘部署系列文章的第一篇,将谈到适用于闪存的应用,以及一些用于部署的文件系统和其他等问题。第二篇文章将谈到硬件问题,第三篇将谈一谈固态盘设计和所使用的SAS以及RAID控制器。
适用于固态盘的应用
我们都知道,高IOPS架构有利于数据库等应用,但是当你尝试向架构中引入闪存固态盘的时候你应该考虑些什么?
对于应用来说,固态盘真正的好处包括小块I/O请求的延迟。现在,大多数企业级固态盘很轻松地就可以保持40000的读取IOPS和30000的写入IOPS,而最 快的2.5英寸1.5万转硬盘只能做250个随机IOPS。当然,你需要硬件来实现这一性能,后面的第二篇文章我们将谈到这个问题。
显然使用密集的数据库可以从固态盘技术中获益,最突出的要算数据库索引了,其次是数据库日志文件。这些文件一般要 比表格空间小,而且通常是保存在1.5万转硬盘中的,甚至经常受到性能方面的限制。像iostat这样的性能工具、sar和其他等性能监控工具通常被用于 评估与这些设备相连接的LUN附加存储的延迟。
尽管闪存存储相比旋转磁盘来说仍然是非常昂贵,但是了解闪存所能带来的潜在好处是非常关键的。如果你的设备上有较大型的命令队列,而且每个命令 的延迟较高,那么也许你的数据库比较适合于使用闪存存储。
闪存的文件系统难题
另外一个新出现可利用闪存的潜在领域就是文件系统元数据。现在有很多文件系统是将数据与元数据分离开来的,这样我们就可以把元数据保存在固态盘上。这种类型的文件系统将变得越来越普遍。顺便说一下,当我与文件系统设计者交流,或者我自己设计文件系统的时候,我个人比较推崇这种文件系统。这种方法很有意义,因为元数据通常有不同的访问模式。除了文件系统元数据以外,与数据库一样,对于那些有日志的文件系统来说,这些文件系统的日志也适合保存在固态盘中。
对于大多数闪存固态盘来说,最大的问题之一就是它们的读写限制在4096字节范围内。你可能会认为这 并不算是个问题,因为索引节点大多数是512字节的,而且就我所知文件系统元数据的分配通常是成对的。这时候出现的问题我们通常称之为文件系统超级块(superblock)。超级块包括关于文件系统的基本信息:用于文件系统的卷和位置,配置和可调节的大小,分配映射表和其他关键数据的不同种类。一 些文件系统不会将超级块设定在4096字节。这对于缓存大小固定的RAID控制器来说 显然是一个问题,而且对于闪存设备也是一样的。这并不是说性能十分糟糕,但是对于大多数企业级闪存设备来说,在4096字节的限制基础上进行调整和读写性能降低达50%已经是很不错 的了。这要比磁盘好多了,但是对于一种高成本设备来说,为什么要浪费那50%的性能呢?
对于我们这些有幸拥有足够预算为文件系统购买固态盘的人们来说,你需要考虑文件系统调节参数。有些文件系统的配置是允许超过64KB的,那么使用大型配置对于基于磁盘的文件系统来说是有利的,而且你可以为浪费空间买单。因此,如果你的配置是1MB,在 磁盘上保存了很多大容量文件和一些小容量文件,每个文件的大小都在几MB,那么牺牲小型文件的空间但是有效地配置大型文件,这样你就不需要遵循以往针对大 型文件的常规配置。固态盘能够起到帮助作用,因为元数据的分配开销很小,因此遵循常规分配方式往往不会影 响到性能。尽管固态盘空间的成本很高,但是当你既有大型文件又有小型文件的时候使用大型分配方式并没 有太大意义。按照最小的文件那样进行分配,这样就不会浪费宝贵的固态盘空间。例如,我的笔记本电脑使用了固态盘,我设置NTFS为1024字节,而不是默认的4096字节,因为我知道我有很 多小型文件。
其他固态盘软件问题
当利用闪存固态盘设备满足高IOPS需求的时候,你还要考虑到其他一些软件规划的问题。例如,如 果你在固态盘上将元数据分为文件系统和数据库,那么你的备份和找回程序需要能够访问固态盘。有时候这些程序有一些认证的硬件,那么你需要确保固态盘是支持这些硬件的。
到目前为之最大的问题恐怕就是你需要多大的空间了。如果你使用固态盘来保存文件系统元数据或者日志、数据索引或者日志的话,那么空间计算就会变得极 其复杂。文件系统中的超级块通常很小,不便于计算。往往管理员也不了解目录中的文件数或者目录数。文件系统的不同空间分配也是不同的,你肯定不希望空间被 占满,因为你无法添加更多文件或者完成请求中的文件写入操作。文件系统日志也是一样。在数据库方面也面临和文件系统一样的问题。你不希望空间被占满,但是 用于索引和日志的空间是很容易计算出来的。对于数据库来说,另外一个需要考虑的就是,如果你在文件系统上运行数据库的话,你就需要计算数据库和文件系统的 空间需求。所有这些都会变成一个难题,因为固态盘的成本要远远高于磁盘的成本,因此浪费空间在我看来是非最优的。