最近业内有本很火的书《软件定义存储:原理、实践与生态》,其主要作者叶毓睿(Peter Ye)先生现任VMware存储架构师,曾任职于EMC、Compellent和戴尔公司,在书中撰写了包括VSAN在内的多个VMware相关章节,以及“内存虚拟化与SDS及Dell Fluid Cache”。
从这个技术背景来看,我觉得书中或许可以做些进一步的分析?比如VSAN与Dell SC(Compellent)之间有没有共通之处?软件定义存储与传统阵列之间有哪些互相借鉴等。而恰好我之前对这方面有过一点思考,在此整理下自己的心得,希望能抛砖引玉吧。
去年我们曾经撰写过《存储极客:自动分层存储 PK. SSD缓存》一文,算是个初步的讨论。前不久又看到有同行朋友在评价孰优孰劣,当然技术只是一方面,有时也会存在商业立场的因素。本文我想更多从设计取舍的角度来谈,每种技术都有其不足或者说代价,只看对具体的用户环境哪种更合适罢了。
首先以VSAN为例,在它的SSD+HDD混合存储配置中,默认的读/写缓存比例为7:3。其中SSD写缓存也被称为日志,进入的数据除了被覆盖写入所合并的那些,最终都是要落到HDD层的。
自动分层存储则会有个优先写入位置,比如像Dell SC为了保证写性能,会一直写入高性能Tire1分层的RAID 10区域,然后再生成Replay(快照)后台定期将数据转存为RAID 5/6或者移动到Tier2/3容量分层。
这里还是先讨论SSD+HDD自动分层,Dell SC是个读写分离的设计,一旦数据“下沉”移动到Tier2/3,再有读操作访问就要依赖所在分层的磁盘性能。为了进一步实现冷热数据自动调度的智能,它还包含一个数据回迁的策略,也就是会长期统计页面(数据块)的活跃度。
表面上看SSD缓存的机制相对简单,但也有不足之处——比如闪存容量不计入用户总存储空间,并且通常不能配置太大。自动分层存储在这些方面要好一些,而用户在实践中也有需要注意之处,特别是初次做配置应该听从专业人员的建议,这里也体现出存储顾问经验的重要性。
而到了全闪存时代,有人说不再需要分层存储了,而我却看到自动分层的设计也可以因为All-Flash而变得更加简单高效。
也许有读者朋友会问:一个是软件定义的分布式存储,一个仍属于传统双控阵列,它们之间有可比性吗?
从前我也不这样认为,而在去年撰写的《vForum随笔:全闪存VSAN和Nimble CASL的创新》一文中,可以看出有些变化了。
VSAN的第一个版本随同vSphere 5.5发布,从vSphere 6.0开始,新的VSAN正式支持全闪存配置。所有写入数据一律进入写性能/寿命相对较高的缓存层SSD,然后逐渐“下沉”至相对廉价的容量层SSD;由于两种SSD的读性能并没有明显的差距,因此不再需要专门设计读缓存,容量层的数据直接读就好了。
讲到这里,如果是对Dell SC系列存储比较熟悉的朋友,估计也会有和我一样的感觉,是不是比较相似呢?
上面这张图,冬瓜哥在《浅析固态介质在存储系统中的应用方式》一文中也曾引用,我在这里不做过多讲述,有兴趣的读者可以点击上述文章链接。
Compellent数据分级的精髓在于和Replay(快照)技术紧密集成。当然Dell SC不只支持2个分层,在写密集型 + 读密集型SSD基础上还可以加入磁盘来存储更“冷”的数据。
根据上图中的5种配置文件,在同一台SC阵列当中也可以混合使用不同的自动分层存储策略。比如第三种是比较常用的全闪存SLC+MLC(资料有点老了,现在的写密集型SSD不一定都用SLC);而像Oracle redo log这样的写密集型数据采用第二种配置(或者全硬盘RAID 10)不做数据调度显然更合适一些。
至于VSAN呢,我觉得更多考虑的是简单易用,支持虚拟化环境中的大多数应用即可,因此目前全闪存还只能分层。不过也有同行朋友看了我当初写的这些之后,认为将来VSAN也可能支持“单一分层”的全闪存配置。
类似的情况还出现在Peter在《软件定义存储:原理、实践与生态》一书185页所写:“全闪存配置中的持久化层是SSD,被频繁写的数据(也即热数据)仍然停留在缓存层,而那些较少访问的数据才会被刷进持久化层(也即提供容量的SSD)。”
而就像我在《为什么说全闪存VMAX替代不了XtremIO?》一文中写的,Dell SC全闪存分层的建议是每天业务不繁忙时段执行一次数据迁移(时间和频率可调),将写密集型SSD分层中的数据尽量转移到读密集型SSD,从而保证第二天新的写入获得最好的性能。
这里我们可以看到全闪存阵列与大多数Server SAN/超融合存储之间的设计理念有些不同。同样是数据在不同存储介质之间的“刷盘”动作,VSAN等的执行策略不算积极,这样在长时间持续写入压力后容易出现与后台调度任务的性能争用;而Dell SC则会尽可能避免这种情况,可以说各有侧重吧。
随着时间的发展,在《全闪存专享:VSAN 6.2重复数据删除、纠删码浅析》一文中,我介绍过VSAN 6.2的“近线”重删和压缩设置在disk group这一级别,只在全闪存配置VSAN从缓存分层“下沉”数据到容量分层时执行,并在重复数据删除之后进行压缩。
这一点,又让我想起了Dell SC存储的数据压缩和重删功能。
作为一款“软件定义”的双控存储阵列。戴尔在SCOS存储软件——Storage Center 6.7版本中引入数据压缩:除了单层、RI(读密集型)/ WI(写密集型)SSD分层全闪存阵列之外,在全HDD阵列和混合阵列配置上也可以打开压缩功能,如上图。
而到了前几个月推出的SCOS 7.0软件版本,重复数据删除也成为一个选项。即打开重删时一定有压缩,而压缩则可以单独开启。
除了“智能重复数据删除之外”,SCOS 7的增强特性中还包括Live Migrate – Federation(可以理解为建立在Live Volume双活基础上的存储联邦)、QoS和VVoLs;另外Dell Storage Manager统一管理平台加入了SC(Compellent)和PS(EqualLogic)之间跨产品家族的双向存储复制,而不只是一次性迁移。
VSAN 6.2中的数据缩减特性,和戴尔SC阵列的增强型压缩有些类似,都是通过与自动分层存储(Tier)/缓存分层(Cache)机制相结合,其重删/压缩动作成为定期执行的后台任务,从而有效避免了数据写入高性能分层时的性能影响。
VSAN 6.2为什么只在全闪存配置上支持重删和压缩?除了闪存更需要提高利用率之外,我觉得这个问题从技术原理上不难回答:因为传统SSD+HDD的VSAN配置中闪存和硬盘的容量配比官方建议1:10,由于读写性能都比较依赖SSD,缓存中读/写缓存默认比例又是7:3,此时SSD写缓存只有大约卷容量的3%。一旦占满导致数据向后落硬盘时,如果加入重删/压缩很可能会影响到性能体验。
相比之下,Dell SC存储的配置灵活性要大许多,不同分层的盘数、容量比例可以按需设计,而且Tier1也是优先保证写入数据的。正如我以前表达过的,这些是产品定位和设计理念上的不同,没有绝对的好坏之分。
总之,传统集中式存储也罢,分布式的软件定义存储也罢,为了应对需求而采用类似的技术是很正常的。站在这个角度来就会发现它们之间存在一些有意思的联系。