在软件定义一切的时代,存在非常多的概念,很容易混淆。在市场上客户会经常听到“软件定义存储”、“软件定义闪存”等概念,那么本文中所提到的软件定义闪存系统和上面这些概念之间存在什么差别呢?特别是“软件定义闪存系统”和“软件定义闪存”之间有何差别呢?在此我试图通过技术的角度和大家一起分享一下“软件定义闪存系统”的精华所在。

 

在今年5月份召开的中国云计算大会上,我做了一个主题为“软件定义闪存系统关键技术”的报告,在这个报告中和大家一起分享了“软件定义闪存系统”这个概念背后的关键技术。软件定义闪存系统强调的是在通用的硬件平台上通过软件的方式实现存储,一句话概括为闪存存储系统就是软件。软件定义闪存系统是软件定义存储中的一大类。软件定义闪存应该是百度的一篇论文中提到的概念,其目的是想通过Host端软件的方式在Nand Flash的基础上构建一套Nand Flash存储系统(SSD盘)。其更加类似于Host based SSD。软件定义闪存系统是一种闪存存储系统的组建方式,例如通过这种方式组建一套全闪阵列系统。下图说明在通用硬件的基础上,通过软件定义闪存系统的方法构建了全闪阵列。

 

wKioL1XTLCXhH7zaAAExuY870_8155.jpg


在几年前由于硬件水平的限制,在通用硬件的基础上实现存储无法达到应用所需的性能或者数据可靠性的要求,例如:

1,  在磁盘存储系统中,如果需要达到更高的IOPS性能,那么需要连接大量的磁盘。大量磁盘的连接需要大量HBA连接卡的支持,为了满足这种需求,那么在一台服务器中需要插入大量的HBA卡。在PCI/PCIe总线插槽数量受限的年代,这是很难满足需求的。所以,在一台普通硬件平台上无法很容易的扩充磁盘存储的IOPS性能。

2,  传统的磁盘存储系统需要大量的内存作为数据缓存/Cache,但是以前的服务器无法提供大量的内存资源,需要通过定制化的方式改进系统,通过NUMA的方式来实现大内存系统。因此,诸如EMCDataDomain系统就需要通过定制NUMA服务器来满足数据去重的需求。

3,  几年前如果需要实现存储系统的高可用,需要通过后端存储网络实现节点之间的互连。为了达成这种互连需求,在存储系统设计的时候通常需要实现复杂的互连网络,例如采用RapidIO或者IB进行系统互连。在系统互连的过程中都需要特定硬件的支持。在几年前的服务器中如果实现系统内部互连、大量磁盘的连接以及前端IO的互连,那么需要占用大量的PCI资源。这种系统无法采用通用服务器来实现,只能通过定制化硬件的方式达到存储系统要求。

4,  以前的处理器性能相对较弱,在实现数据冗余的过程中如果采用CPU来完成数据的编解码,那么很难做到极高的IO性能。为了能够达到高性能,需要特殊硬件的支持。例如采用硬RAID卡或者特殊的ASIC芯片来实现RAID的编解码运算。一旦采用这种特殊硬件,就需要定制服务器或者软件层给予特殊支持。

 

服务器技术发展到今天,一个普通的X86服务器可以轻而易举的实现1TB左右的内存容量;一个普通的Intel处理器可以支持12个以上的物理CPU核;一个普通的Intel处理器就可以支持SSE/AVX指令集,轻松实现数据的编解码;一个普通的主板可以支持两路CPU,组成NUMA体系结构;一个普通的主板可以对外导出多个PCIe系统互连插槽,每个插槽可以支持8Gbps的数据传输率;一个普通的SSD存储盘可以轻易达到上万的IOPS;一个SAS HBA上的SAS接口可以达到12Gbps的数据率,通过SAS可以构建后端存储网络。因此,今天通用硬件完全可以满足存储系统的需求。软件定义闪存系统有了通用硬件的良好支持。在这种情况下,软件定义闪存系统简化了系统的实现,成了技术发展的必然。

 

更为可喜的是IntelCPU还向着多核化、众核化的方向进一步发展。存储系统本身是一种IO密集型的应用,多核化的发展满足了存储技术的需求。另外,NVDIMM的技术正在成为服务器的标准,而这个标准可以进一步降低存储软件技术的复杂度,提升数据存储的可靠性。对于闪存存储而言,NVDIMM可以正好填补闪存SSD与内存之间的性能鸿沟,并且弥补SSD在小写方面的不足。

 

在服务器硬件强有力的支撑下,软件定义存储开始落地,并且可以成为存储系统的主流。随着闪存SSD技术的发展,全闪存系统在未来会替代现有磁盘存储的很大一部分市场。可以说软件定义闪存系统是软件定义存储的一个子类。和软件定义存储相比,软件定义闪存系统可以取得更好的性能和数据可靠性,因此具有更加广阔的应用客户群和实际的价值。在全闪存存储中,不可否认仍然会存在一部分通过硬件定制的全闪存系统,该类系统未来可能会存在更高的性能,并且可能在高性能下获取更好的数据可靠性。但是,绝大部分产品也许都可以在通用硬件平台的基础上采用软件定义的形态存在(如下图所示)。


wKiom1XTKmHwMH_6AACXg6JkWWc719.jpg

软件定义闪存系统是技术发展的必然,通过通用硬件来构建存储系统的平台,在这个平台之上部署核心的灵魂,通过灵魂软件来完成存储功能。采用这种方式可以降低价格、简化系统研发、收敛产品可靠性。但是,需要注意的是通用硬件不如专用硬件可靠,如何在不可靠硬件平台上构建可靠存储系统是系统设计需要考虑的问题。从这一点上来讲,软件定义闪存系统中的软件需要具有更强的容错性。


(来自存储老吴的博客——存储之道)