全闪存阵列:革命or回归?

如果说2008年年初,EMC宣布在其Symmetrix DMX-4高端存储系统中引入固态盘(SSD),率先将闪存带进企业级存储市场,并捧红了STEC;2010年Fusion-io借势Facebook和Apple,2011年年中成功IPO,引发PCIe闪存卡市场混战;那么,2013年是否将成为全闪存阵列高光的一年?Violin Memory会成为下一个FIO吗?

2013年2月下半,NetApp发布了其首款全闪存阵列EF540,而专为全闪存存储构建的FlashRay(去年底透露的“火星项目”)将在2013年中期推出有限试用版,计划于2014年推出正式版本。不到两周之后,EMC发布了新的Xtrem闪存产品家族,包括已开始向精选客户交付XtremIO全闪存阵列。两大独立存储厂商相继出手,对去年就已开始升温的全闪存阵列,不啻是火上浇油…

服务器大厂也来凑热闹:4月中旬,IBM推出基于去年收购的Texas Memory System公司(TMS)技术的IBM FlashSystem全闪存阵列,包括IBM FlashSystem 820和720。IBM同时宣布投入10亿美元研发资金,用于设计和创建新的闪存解决方案,并将其集成到日益增多的服务器、存储系统和中间件中。

仅仅就这三个发布拿出来的“现货”而言,产品技术上新意不足,市场行为的成分更多一些。但是,由此延伸开去(包括未能兑现和值得期待的“期货”),却没有这么简单。

阵列之磁盘立场:加入SSD并优化就够了?

2012年第四季度,NetApp先是悄然收购了NAS闪存加速厂商CacheIQ(其RapidCache NAS加速设备在DRAM和SSD中缓存应用数据),而后又传出开发全闪存陈列的“火星项目”。CacheIQ技术的整合非一日之功,火星项目也被证明即FlashRay,为它们争取时间应是EF540的使命之一。

从全闪存阵列的角度来看,EF540属于一款过渡产品。不难看出,EF540与NetApp已有的中端磁盘阵列产品E5400家族的关系,多出来的字母F显然代表Flash。

更确切的说,EF540沿用了E5424的硬件架构。两者都是2U机箱24个2.5英寸驱动器的设计,E5424还是E5400系列三款控制器中唯一支持SSD的型号,容量也与EF540同为800GB。

NetApp E540支持19.2TB或9.6TB配置,也就是24(满配)或12个(半配)800GB SSD,本图中的EF540样机即半配,从露出的SSD开始向左是12个

区别在于,EF540支持多达24个2.5英寸SAS SSD——虽然它也保留了SAS扩展接口(连磁盘柜),但我认为,主要是留着比去掉更省事。因为至少到目前为止,EF540支持SSD的数量为12个(半配)或24个(满配),不可扩充。E5424呢?支持的驱动器数量可达384个,高一个数量级还多,并能解释两者型号上一位数字之差,蛮科学的嘛。

EF540样机的控制器,配备4个8Gb FC主机端口,6Gb SAS扩展端口纯属摆设

就一款中端磁盘阵列来看,E5400的架构很高效实际输出带宽超过6GB/s,但在24个SSD面前,算不了什么,甚至24个高速的15K RPM SAS硬盘也能接近这一水平。

当然,堆叠数百个硬盘可以录得更高的IOPS,但就E5400系列而言也很难超过10万。至于EF540,官方数据是30万IOPS,以我见到的SanDisk LB 806M(原属Pilant)而言,单盘指标读10万IOPS,读写混合(数据库典型七三开)亦在2万以上,就是下降到1万出头,24个已经够多的了。如果扩充SSD数量得到的只是容量,那不如再接点硬盘驱动器啦——那还能叫全闪存阵列么?

EF540采用的800GB Pilant Lightning系列6Gb/s SAS企业级SSD(现属于SanDisk,型号仍为LB 806M),但也支持Intel等知名厂商的产品

硬件没变化,软件呢?EF540推出时采用的操作系统是SANtricity 10.84,与E5400系列的最新版本一样。有何不同?NetApp公司产品市场高级总监Mark Welke在接受我们采访时表示,EF540在四个方面对SSD进行了优化:

  1. 四倍于原来的队列深度;
  2. 针对SSD优化双活(Active-Active)控制器
  3. 为保证SSD的高可用性和可靠性做的针对性优化(如主动跟踪SSD磨损寿命,在达到阈值时报警;背景介质扫描识别奇偶不一致,重写可能非正常写入的扇区;驱动器重建遭遇不可读扇区仍能继续进行的专利技术)——我们都知道闪存的不靠谱多与写入有关
  4. 三年的SSD盘保障期限,磨损过度给予更换服务

前三个都属于SANtricity操作系统的功能,算不算升级还不好说,因为E5424支持SSD Cache功能已有一段时间。I/O性能是SSD相对硬盘驱动器的最大优势,支持更大的队列深度实属正常(单个SAS HDD在队列深度超过64之后,I/O性能就很难提高了,256基本是个摆设);倒是EF540作为全闪存阵列,需要较长期的保留数据,对SSD的可用性和可靠性有很高的要求。

总之这些优化都可视为在阵列操作系统(固件)上打的“补丁”,往简单里说,无论磁盘驱动器还是固态盘,EF540就提供一个版本的OS,如果判断出用的是固态盘,开启相应的设置就可以了。很多闪存相关的底层功能(如FTL等),由SAS/SATA SSD上的控制器实现,交给了Intel、SANdisk、Seagate、SMART Modular Technologies、STEC、Toshiba等SSD供应商。譬如质保方面,在EF540的SSD列表中的希捷Pulsar.2,就提供了5年的有限保障。

从这个角度来说,EF540与之前的HP P4900或EMC全闪存配置的VNX类似,是在传统磁盘阵列的基础上,为一种特殊的驱动器(SSD)做优化而已。这样的所谓全闪存阵列,侧重点在“阵列”上——整体而言,无论硬件架构,还是软件功能,长期的积累都围绕磁盘展开。虽然也对闪存不耐写等特性加以调整,但能做的终归有限……

那么,是不是从一开始就完全围绕闪存设计,没有考虑过磁盘的全闪存阵列,就可以说侧重点在“全闪存”上呢?

传统的存储系统也被称为“磁盘阵列”,众所周知是因为RAID的缘故。与单个驱动器/模块相比,RAID可以提高性能(并发访问)和可用性(避免单点故障),这对闪存也是有价值的,所以能有“全闪存阵列”这个对应的概念。由于闪存与磁盘的特性非常不同,一款真正围绕闪存设计的全闪存阵列,肯定不能简单照搬基于磁盘的RAID技术,但是否完全与磁盘时代的积累(如SAS)“划清界限”,就是正确的选择呢?

Violin Memory的vRAID技术,RAID控制器与VIMM的组合,与常规的磁盘RAID类似,差异在于RAID算法和VIMM

我们不妨先来看看,全闪存阵列代表性厂商Violin Memory在介绍其专用的闪存RAID算法vRAID时,列举了闪存解决方案在算法上面对的一些挑战:

  1. 闪存写比读慢;
  2. 在一个闪存块内(通常128-256KB),闪存写入操作必须是连续的;
  3. 闪存块大于用户数据块,因此需要一个映射系统;
  4. 闪存块在被写入前必须先擦除;
  5. 闪存擦除耗费时间较长(以毫秒计,快与硬盘驱动器的平均访问时间一个量级了),且会阻塞同一芯片上的读或写操作;
  6. 闪存块在物理磨损之前只能被擦除一定次数,且不能再被使用;
  7. 闪存错误随着读取次数而增长;
  8. 闪存经过一段时间会丢失数据,哪怕是没被使用;
  9. 闪存会在块、页或模片级别退化,都要统计下来……

不难看出,这些算法不一定都要在RAID控制器层面解决,闪存控制器就可以做到。不过,那些不提供SAS/SATA SSD的厂商认为不应该引入这两种协议,原因包括SAS/SATA接口最初也主要是为磁盘开发的,带宽不够给力(12Gb/s SAS综合起来与PCIe 3.0有一拼,劣势是刚开始产品化),更重要的是增加了(到PCIe)协议转换的延迟。但是,考虑到要经过FTL(不管这层在哪儿实现)、各种接口(如PCIe)的控制器、RAID(不论磁盘RAID还是所谓vRAID)、主机端口(PCIe、InfiniBand、FC或iSCSI)等多个环节,SAS/SATA的这点延迟,貌似也算不了什么。举例来说,Violin Memory的3000/6000系列全闪存阵列的延迟指标,使用SLC闪存的型号低于250微秒(μs),MLC闪存的型号低于500微秒,与NetApp EF540宣称的“亚毫秒级”(ms,1000微秒)相比并无明显优势。

闪存芯片封装后做在形似内存条的VIMM上,再形成vRAID组

在闪存模块的层面上,Violin Memory全闪存阵列没有选择常见的SAS/SATA SSD,而是采用了专有的VIMM(Violin Intelligent Memory Module)。正如其名称所显示的,VIMM看起来很像内存条,但作用与SAS/SATA SSD相当,其组成部分包括高性能闪存控制器、管理处理器、DRAM(保存元数据)和NAND闪存芯片,完成闪存转换层(Flash Translation Layer,FTL)的工作,充分利用每个闪存芯片并给予精心保护,其板载DRAM保存元数据的做法又降低了vRAID控制器模块的负担(源自Violin Memory的资料)。

Violin认为其vRAID相对基于磁盘的传统RAID优势明显

基于硬件的闪存vRAID以4+1的方式使用VIMM,闪存的容量利用率能够达到80%,据称有类似RAID 6的数据丢失率(4+1像RAID 5,但RAID 6的数据保护更好)。按照Violin Memory的说法,vRAID通过两种途径降低4K块读取的延迟:

  • 条带化4KB块跨5个VIMM分布,允许闪存设备并发读写以提高带宽;
  • vRAID确保长达多个ms的擦除不会阻塞读或写。因为在任意时刻,5个VIMM中有4个需要读,该架构使混合读/写环境中无尖峰延迟。

抛开这些技术细节不论,最终结果如何?Violin Memory宣称其全闪存阵列可以在3U机架的空间内提供高达100万的IOPS,而延迟低至100微秒。指标不错,但与几乎没特别为闪存考虑的EF540相比,并没有拉大到数量级的差距。如果将全闪存阵列分解为阵列控制器(负责RAID)和闪存模块(提供内部接口、FTL和闪存存储)两个部分,那么所谓传统的磁盘阵列硬件架构也完全可以针对闪存而改造:RAID算法充分为闪存优化,加宽内部传输通道,SAS/SATA SSD的控制器实现更好的FTL……除了SAS/SATA协议层不宜过分夸大的延迟,貌似没有什么是无法逾越的。

Violin 6000的VIMM和RAID控制器

Violin Memory不会认同上述推断,或许实际的性能表现也能证明他们仍然是对的。但是在现在这个时代,两倍以内(超出幅度<100%)的硬件性能优势,很容易被成本等方面的劣势所消解——毕竟不计代价追求所谓“极致性能”的用户是少数。不难想见的是,在没有足够用户规模支撑的情况下,Violin Memory要维护其专有的VIMM,硬件成本会很高。

EMC认为,在(写?)延迟的数量级上,PCIe闪存卡的优势没有传说的那么明显

构筑相对于SAS/SATA SSD“优越感”的另一种替代方案是采用PCIe闪存卡来搭建全闪存阵列,譬如EMC去年在推出其PCIe闪存卡VFCache(现已更名为XtremSF,SF代表Server Flash)的同时,也宣布了基于VFCache的全闪存阵列“Thunder项目”(Project Thunder)。

2012年2月EMC公布的“雷电项目”(Project Thunder)的设计概念,“低延迟、高带宽硬件,轻量级软件堆栈”表明这是一款几乎纯硬件的产品

从VFCache到XtremSF,硬件主要都来自Micron(美光)。Micron的RealSSD P320h也是原生PCIe架构,不存在PCIe转SAS/SATA的问题。如果你觉得传统PCIe插卡的形式不够popular、不易维护,P320h也有2.5英寸驱动器外形(接口还是PCIe)的型号。

可是,不管哪一种,在相对大量的SAS/SATA SSD面前,PCIe闪存卡/SSD目前仍属小众产品,成本很难降下来。如果你认同(至少)对全闪存阵列而言,在商品化的硬件上,通过软件提供核心价值是发展方向——那么,在各种形式的PCIe闪存产品具有足够的出货量及成本竞争力之前,看不出全闪存阵列有非用其不可的必要。

有了上面的认识,就不难理解,EMC会收购采用“传统”SAS SSD的XtremIO,并放弃Thunder项目是基于怎样的考虑了。

EMC企业存储产品部高级产品经理李君鹏对放弃Thunder项目的解释,基本验证了我的分析。至于XtremIO……

一年前EMC透露Thunder项目时,提到将为其配备“轻量级软件堆栈”。如果你只看重硬件指标,或许会欣赏它的“简洁”,可实际上,Thunder项目毁就毁在这了。不然,EMC随后收购XtremIO干啥?

这个世界存在不少事后看起来很愚蠢的收购,但EMC绝对不傻。他们不是刻意想把全闪存阵列的软件堆栈轻量化,而是缺乏必要的软件积累。既然可以收购XtremIO,也就没必要费力继续开发Thunder这么一个几乎纯硬件的产品了。

从前面板不难看出,XtremIO用的是“传统”SSD

硬件商品化意味着尽可能采用标准化、通用的硬件,在保证基本要求的前提下,标准越普及、通用性越好(譬如企业级SSD领域SAS就比PCIe门槛低,SATA又差点儿意思),则越受欢迎。体现价值的软件呢?维持闪存产品正常运转的底层软件如FTL层,或者驱动程序当然有价值,但它们更倾向于作为必不可少的组成部分而划归硬件范畴。

EMC列出了XtremIO的重要软件功能,包括线内重复数据删除和自动精简配置,没有实时压缩

在充分为闪存优化的阵列应该具备的上层软件功能中,我认为自动精简配置、实时压缩和重复数据删除是排在前三位的。

  • 自动精简配置(Thin Provisioning):在数据写入前才分配相应的存储空间,与传统的超量分配(over-provisioning)相比,可以避免存储空间闲置;
  • 实时压缩(Real-time Compression):数据写入之前先进行压缩,使用的存储空间比实际的数据量更少,达到节省的目的;
  • 线内重复数据删除(In-line Data Deduplication):一种特定的数据压缩技术,在数据写入之前与已经存在的数据进行比对,将重复的数据舍弃,只保留指向唯一副本的指针。在重复数据较多的场合(如备份数据、虚拟机镜像等),消重率可比压缩率高一个量级(能达到几十倍)。如果要让全闪存阵列承载VDI这样有大量重复数据的应用,没有线内消重技术支持,是难以想象的。

这三位不是新技术,乃磁盘阵列时代的成果,通过不同方式节省存储空间。不过,对闪存来说,它们还有其他重要作用——延长寿命。譬如实时压缩和线内重复数据删除都可以减少闪存的写入量,收到延长闪存寿命的效果。需要注意的是,必须是实时(或in-line)处理,有些磁盘备份产品采用后处理(post-process)的方式来去重,即先把数据写入到磁盘上,然后再加以比对,删去重复数据,这对闪存产品来说是不可接受的:非但起不到减少写入量的作用,反而增加了大量擦除的工作。

我想了解一下……实时压缩?

非实时压缩和后处理方式的重复数据删除,很大程度上是当时配置计算能力不够的产物,因为压缩和消重算法都需要大量的计算工作。完整的自动精简配置功能也需要一定的计算资源,像EF540只具备有限的自动精简配置能力,连NetApp自己的人,都认为那不能算自动精简配置——运行Data ONTAP的FAS系列才够格。

EF540的自动精简配置受限于其以ASIC为主的控制器架构。ASIC和PCIe闪存卡中常见的FPGA为特定的简单重复性工作(如搬运数据)而设计,速度快、效率高,缺点是计算能力差,难以胜任多种任务。厂商可以为特定的工作设计特定的电路,譬如3PAR独有的ASIC可以加速自动精简配置,但总不能每种功能都来一个ASIC或FPGA吧?那复杂性和成本就……

如果基于通用但有很强计算能力的商用硬件(如x86),在软件堆栈中加入不同的软件功能,就可以实现不同的用途。而这,不仅是软件定义存储,也是软件定义数据中心(SDDC)的精髓。

从这个角度来说,EMC也可以在Thunder项目中采用x86硬件平台,然后将Data Domain的重复数据删除改造为适合全闪存阵列。不过这需要更多时间来开发,且结果未知,而XtreamIO的线内重复数据删除显然是专门针对闪存开发的,用钱换时间,可谓明智之举。

Greenbytes、Pure Storage、Nimbus、SKyera、SolidFire、Violin Memory和Whiptail等初创多数全闪存阵列都用SSD,只有Violin是独有闪存模块(VIMM,见第二列)。不过,这些全闪存阵列并不都支持重复数据删除,支持的也不全是In-line,但NetApp EF540几乎是软件功能最贫乏的(最右列)

再来看看NetApp计划中的FlashRay都有哪些特性:

  • 采用可扩展架构,集群架构具备跨节点自动平衡功能;
  • 长效低延迟性能、高IOPS以及高数据吞吐量;
  • 高可用性以及快照功能;
  • 集成化数据保护;
  • 全局线内、可变长度的重复数据删除与实时压缩、闪存寿命优化;
  • 文件及分卷管理,多协议访问;
  • 数据管理功能,包括对象粒状数据管理;
  • 应用程序集成;
  • 指向ONTAP阵列及其他FlashRay的复制与备份功能……

除了压缩与去重,文件服务等功能现在也是以x86平台为主流的。对软件功能的需求促使全闪存阵列采用以x86为代表的所谓商用硬件,而x86的快速更新又方便加入更强大的软件功能,形成了良性的互动。

EMC认为企业级闪存产品应该具备的软件功能

需要说明的是,硬件商品化、通过软件体现存储价值,并非始自闪存的引入。在统一存储等风潮推动下,这几年新推出的磁盘阵列已经全面过渡到x86平台,像自动精简配置已经成为标配。正如前面提到的,一定程度上,全闪存阵列继承了之前磁盘阵列发展的成果。但是,在磁盘阵列产品中,采用实时压缩的很少(如IBM Storwize V7000),线内重复数据删除就更没有,部分原因是必要性不够大。闪存则不然,算法对性能的要求可能进一步推进阵列控制器的服务器化,更紧的追赶x86处理器的换代步伐。

我们是不是可以说,既完全围绕闪存设计(全闪存),又具备丰富阵列软件功能,才是合格的“全闪存阵列”呢?

更高层次的轮回:仍混合阵列,以闪存之名

对NetApp来说,除了加紧开发FlashRay,还有一个战略调整的问题需要妥善解决——如何建立一个有效的分级存储体系?

与所谓自动分层存储(可以把阵列内部叫分层,外部或之间叫分级,宏观来说只是维度不同)相比,将闪存作为缓存,具有算法简单、应用中立竿见影等好处。NetApp CEO Tom Georgens很早就宣称分层存储没前途,而到目前为止与NetApp FAS/V系列相关的几种闪存技术如Flash Cache、Flash Pool和Flash Accel,都是将闪存作为缓存(Cache)来使用。

NetApp会建立这么一个庞杂的体系么?

那么,EF540和未来的FlashRay呢?不可能整个阵列就用来给FAS家族做缓存吧?如果要将全闪存阵列纳入整个产品体系而不是飘零在外,那么在全闪存阵列与传统阵列之间建立一个有效的数据移动机制,是很有必要的。

全闪存阵列采用横向扩展架构,更多的是解决性能问题。若纵向扩展的话,控制器很容易成为瓶颈(如EF540、VNX等传统阵列)

在一些全闪存阵列的狂热支持者看来,全闪存阵列很快就会取代磁盘阵列,所以不用考虑分级问题。可这不现实,至少在5年内这一幕不会出现。全闪存阵列如FlashRay、XtremIO都支持横向扩展,能够在一定程度上弥补闪存容量不足的问题,但比磁盘阵列还差得远。成本更不容忽视,一则闪存盘的单位容量价格仍然比大容量SATA/NL SAS盘高很多,二则相当大比例的数据并不需要很高的I/O性能,用闪存未免浪费,保存在硬盘上经济性更好。

在传统企业应用中,需要高I/O的热点数据,所占容量比例较低。而在互联网行业中,大部分数据产生后,也会迅速变“冷”

既然闪存与磁盘混合存储的局面仍将继续维持相当长的时间,在前面提及的一干全闪存阵列初创企业被NetApp、EMC、IBM的强势杀入掩盖住光芒的同时,Nimble Storage、Tegile与Tintri等新一代混合存储供应商又得到了业内人士的热捧。之所以说是新一代,在于它们无论是像NetApp FAS系列一样将闪存作为磁盘的缓存(Nimble Storage和Tegile),还是像EMC VNX/Symmetrix一样可以在闪存与磁盘间自动分层存储(Tintri),都是从一开始就充分围绕闪存的特性设计,兼顾大容量的NL SAS磁盘(传统混合存储还是建立在磁盘基础上,后加入闪存),并且也全部支持前面提到的实时压缩和线内重复数据删除,自动精简配置更是不在话下。

面对多种闪存相关的产品/解决方案,根据具体应用选择合适的

在混合阵列中,闪存是用作缓存,还是与磁盘分层,我认为不是非此即彼,而要看应用需求。缓存方案固然有相对简单等优越性,但随着闪存容量的不断攀升(增长幅度明显快于磁盘),不分青红皂白地都用作缓存,未免过于浪费,也不符合人们对闪存比重逐渐提升的预期——只用作缓存,而非数据的永久存储,能说足够重视吗?

闪存无处不在,硬盘仍是基石……市场很大,不可轻弃

Fusion-io本周宣布斥资1.19亿美元收购混合存储系统厂商NexGen Storage,可以作为上述观点的注脚。我们知道,Fusion-io最初的宣传,是强调以其插在服务器中的PCIe闪存卡ioDrive,取代外部的磁盘阵列。上市后不久收购了ioTurbine,以及推出的ioCache和directCache,都是将闪存用作缓存。去年推出的ION,则更像是把服务器变成一种闪存阵列。

NexGen的混合存储方案是分层而非缓存,至于重复数据删除……那是——必须的!

NexGen Storage的不同之处在于,采用仅把活动数据存在SSD上的“实时分层”(real-time tiering)技术。换言之,1月中旬其CEO David Flynn还在Open Compute峰会上鼓吹“全闪存数据中心”,仅仅3个月之后,Fusion-io就向现实低头,以实际行动承认,不与磁盘更紧密的协作是不行的。收购消息一出,1月下旬开始便一路走低的Fusion-io股价,上涨幅度接近20%。

看起来,NexGen Storage的方案是在阵列控制器内部使用PCIe闪存卡(如Fusion-io的ioDrive),与控制器外接的大容量硬盘之间“实时分层”。在新兴的混合阵列方案中,几乎都是用闪存和低转速大容量NL SAS/SATA磁盘结合,舍弃了10K/15K RPM高转速磁盘,这也是与传统混合阵列不同之处。2010年初Tom Georgens也持此观点,但当时他否定了分层的价值

当然,NexGen的存储架构中,使用的SSD是PCIe接口,并着力宣扬了较之于接在存储控制器后面的SAS/SATA SSD的“巨大优势”,而我也认为如果在存储控制器中使用闪存,PCIe接口可能更为合适。但是,正如前面已经分析过的,如果控制器一开始就为闪存设计并辅以相应的算法,用SAS也差不到哪里去。NexGen的硬件架构集成ioDrive具备天然优势固然是Fusion-io选择它的重要因素之一,线内重复数据删除和实时分层等软件功能才是更值得关注的。

至于David Flynn在Fusion-io收购ID7之后说要提供开放的解决方案,和不直接销售NexGen产品,而是“把NexGen作为技术平台,允许第三方的集成商来构建系统”的表态,属于商业模式的范畴,这里就不讨论了。

从微观的层面来看,优先围绕闪存来设计阵列,是存储行业已经发生的革命;而从宏观的层面来看,在数据中心的规模上,闪存与磁盘更好的协同,则是更高水平的轮回……