难以做出的抉择:NFS或iSCSI哪个更好?

与NFS和iSCSI是虚拟化所使用的两大IP存储协议。而与很多引起热烈争论的IT话题一样,NFS或iSCSI,哪个更好?

要在任何两种流行的竞争技术之间进行选择,关注其整体更优的人并不多,更多的人关注的是它们能否最好地解决面前的挑战。这两种协议根据应用场合的不同,各自都存在优缺点。但是存储的未来发展将会成为做出最终选择的重要依据。

文件 vs 块

我之前曾经说过,NFS和iSCSI两者无论就实施状况还是历史发展来看,都不存在很大的差异。NFS是由Sun公司在上世纪80年代初开发的,当时是作为通用的文件共享协议,允许网络用户到网络上的一台文件服务器上去读写文件。iSCSI出现的较晚,最初是在2000年初,作为光纤通道(FC)的一种IP替代方案出现的,它和FC类似,都是将块级SCSI命令进行封装,然后在网络上发送。

两者间的主要差别在于文件系统的实施和管理上。NFS使用文件级别的实施,服务器或存储阵列托管整个文件系统,客户到文件系统上读写文件。而iSCSI和FC则使用数据块,存储阵列向客户提供数据块集合,赋予原始存储数据一定的格式化,而不去管文件系统究竟如何使用。

虽然这种差异产生了诸多的后果,但最重要的后果可能在于,在诸如iSCSI和FC的块级协议中,存储阵列一般不会去管它存储的内容是什么。它只知道分配块集合给需要访问的客户。相反地,在诸如NFS的文件级协议中,存储阵列对存储在其中的应用数据具有充分的可视性。

从实用角度来看,对存储在NFS系统上数据的这种阵列端感知能力可以让存储阵列更容易跟踪实际的存储使用情况——例如在精简配置场合,它可以拍摄快照,或者对单个虚拟机做备份,甚至可以在阵列端对主存储数据进行重复数据删除。

不过最近在VMware的VAAI(vSphere API for Array Integration)中实现的SCSI T10增强功能为块存储也增加了类似的感知功能,通过支持UNMAP SCSI原始,可对空闲块增加虚拟化堆栈能力(因而允许阵列回收这些块)和阵列端副本卸载能力,可以加速虚拟机克隆等任务。从某种意义上说,一些智能化的 hypervisor与阵列的集成也使得使用NFS的文件级系统可以移植到采用SCSI协议的块级系统中去。

但我不能因此而肯定文件与块的竞争是否已经结束。尽管增加了这些SCSI原始可允许基于SCSI存储协议的系统执行某些类似NFS的功能,但在其他情形下,文件级协议依然拥有某些领先之处——延伸集群就是一个很好的例子。在此类可同步复制、地理分布不同的存储系统中,存储层具备将每个虚拟机视作单独存储资源的能力——可以单独对其进行删除和故障处理——这一点极其重要,也是使用块存储协议的系统所无法实现的。

在网络上

从网络角度看,NFS和iSCSI也存在明显的差异。采用NFS,额外所需的吞吐量和冗余主要是通过网络链路汇聚来获得,还需小心注意去平衡阵列端 多个IP地址别名上的存储连接,以确保负载均衡能够生效。而另一方面,iSCSI内置了多路径能力,可提供更多的高级负载均衡算法,在多条服务器和阵列端 存储路径上智能化地平衡存储流量。

在这两种情形下,10G以太网的使用可以减轻为提高存储性能而采用多路径的必要性,理由是绝大多数组织的吞吐量要接近1Gbps都是不可想象的(至少今天还是如此)。不过在这方面,iSCSI要略胜NFS一筹,尤其当汇聚多个1Gbps以太网链路时。

从网络安全的角度看,iSCSI也有一定优势。除了NFS和iSCSI都支持的源IP安全限制以外,iSCSI还内置了对双向挑战握手认证协议(CHAP)的支持,该协议可防止未经认证的服务器连接存储资源,允许服务器去验证他们准备连接的存储阵列是否经过了认证。

关于现代NFS实施的一个常见误区是,认为其实施是基于UDP/IP的。这一误解通常来自NFS v2完全基于UDP这一事实。尽管UDP是一个相对低延迟的IP传输协议,但它缺少安全和交付机制,在跟踪目前的TCP/IP网络时难以保障状态连接所带来的好处。而从NFS v3开始,TCP成了它所支持的一个传输协议。这也是目前大多数NFS存储阵列和hypervisor,如VMware vSphere所采用的办法,把NFS放在了和基于TCP/IP的iSCSI同等的位置上。

未来前景

今天来看,iSCSI似乎更具赢家风范,至少从网络角度看是这样,因为它可提供更好的多路径支持,更高程度的端到端安全。不过NFS仍然保有相当的 优势,尤其是在阵列端的适当使用,因为它能让阵列拥有对虚拟化堆栈的可视性,可智能化地参与加速、快照和重复删除等存储流程。正是这些阵列端的智能优势, 再结合上多路径与安全提升,有可能在NFS 4.1发布时有望实现NFS客户端,最终刺激对NFS需求的长期规模增长。

不要让自己轻易相信哪一种协议会彻底击败另一种。事实上两者间存在差异是一件好事,因为当你在寻找一种可以满足特定需求的IP解决方案时就有了两次机会。请务必记住:这些协议发展史的最后一章尚未写完。