大家不难发现目前市场上出售的全闪存阵列基本都是采用SATA SSD,其中的原因在于NVMe SSD比SATA SSD贵,SATA SSD目前可以满足绝大多数应用的性能需求。除此之外,其实目前的全闪阵列软件并不能对NVMe SSD进行很好的支持。如果需要支持NVMe SSD,阵列软件还需要做较大规模的调整,例如需要考虑如何充分发挥多核处理器的并发效能,从而解决软件堆栈带来的性能瓶颈问题。在SATA SSD上,由于SATA SSD本身的性能并不是很高,因此,软件堆栈不需要做大规模调整就可以满足应用需求。但是在NVMe SSD以及未来性能更高的Xpoint存储介质上,软件栈必须要做深层次的调整才可以充分发挥NVMe SSD的性能。
传统单控阵列在使用的过程中会遇到严重的HA问题。当控制器发生故障的情况下,业务的连续性无法得到保障。在传统存储阵列的设计理念中,为了解决该问题会引入双控制器的设计思路。双控制器通过高速总线进行互连,在HA控制软件的作用下,对外提供双控服务,即使一个控制器出现故障,业务的连续性也能得到保证。在NVMe存储时代,IO性能变得很高,如果采用传统双控互连的方式,那么双控之间的数据同步将会成为严重的性能瓶颈点。因此,个人认为在高速存储时代,松耦合的分布式架构更加适合高性能存储,通过分布式的方式来获取业务的高可用和数据的高可靠性。
松耦合分布式数据保护系统的整体架构如下图所示:
存储服务器节点通过后端高速网络进行互连,将服务器内部的闪存资源进行聚合,形成高性能全局闪存资源池。位于每个存储服务器内部的分布式RAID软件会将数据在多个存储节点上进行冗余布局,当一个系统中无论是节点或者盘发生故障,都可以通过全局资源池中的冗余数据恢复故障数据。与此同时,当存储节点发生故障后,业务IO服务可以在从故障服务器切换到正常服务器节点,从而保证了业务的连续性。
这种分布式数据保护系统的设计理念和EMC Isilon存储系统的设计理念存在很多相似之处,通过后端高性能网络将存储节点进行互连,构建全局存储池。最大的劣势在于成本较高,需要前后端网络的支持。
为了降低成本,市场上主流的分布式系统都会采用一套网络,并且采用多副本的方式在多节点之间进行数据冗余。典型的系统有HDFS和Ceph。在磁盘存储时代,通过部署HDFS或者Ceph可以获得不错的性能,并且系统具有很强的可扩展性。但是,在NVMe存储时代,这样的系统遇到了挑战,如果将磁盘简单切换成NVMe SSD之后,Ceph的性能并没有得到大幅度的提升,而且NVMe SSD不能得到充分的利用。出现这种现象的原因很简单,在Ceph类似的系统中,存在面向磁盘设计的OSD以及文件系统,这种软件栈对NVMe SSD性能影响很大。因此,如果不对Ceph服务器端软件进行改造,那么即使采用性能很强劲的互连网络,性能也不能得到大幅度的提升。因此,目前主流的开源分布式系统都不能很好的使用NVMe SSD,需要进行大刀阔斧的改造。
在分布式文件系统中,有一种曾经在非线编领域经常使用的SANFS可以和单控闪存阵列进行有机结合,从而构建高性能的分布式闪存系统。SANFS是一种基于SAN存储设备的文件系统,其可以在SAN存储设备的基础上构建分布式文件系统。存储架构采用标准的MDS和DS架构。MDS是元数据服务器,提供文件系统元数据服务;DS是数据服务器,提供标准的块设备服务。MDS可以采用独立的服务器,也可以寄生在DS上,并且可以在多台DS上实现多MDS的数据冗余。DS提供标准的SAN服务,可以采用标准的阵列设备作为DS。SANFS需要客户端的支持,客户端在访问数据时,首先通过MDS获取访问数据的实际位置,然后通过带外工作的方式直接从DS上获取数据。客户端与DS以及MDS之间采用标准的块设备接口,通过FC或者iSCSI进行互连。
在闪存存储中,导出接口也是重要的性能瓶颈点,因此,在采用SANFS构建分布式存储时,最好采用RDMA互连技术。采用SANFS构建的分布式闪存系统架构如下图所示:
在高性能NVMe数据保护系统的基础之上,采用第三方提供的SANFS搭建了一套完整的分布式闪存系统,并且对其进行了性能评测。实测结果表明SANFS可以发挥闪存阵列的性能,在带宽等方面表现极佳,但是在随机小数据块访问方面存在比较严重的性能瓶颈。下图是大数据访问情况下的文件系统性能表现。通过该结果我们可以看到在多文件多流情况下可以把FlashRAID的性能跑满。
随着高速存储介质的不断普及,高性能分布式闪存系统的研发势在必行。如何充分的发挥分布式闪存系统的性能,一方面在于网络互连,更重要的还是在于对分布式存储软件栈的优化和重构。