NFS和iSCSI,孰优孰劣?

  其实像之前大家热议的许多IT话题一样,对于在任何两种流行的竞争技术之间做一个选择,其关键不是比较哪一种技术在整体上更佳,而是要看哪一种技术最适合解决所面临的挑战。NFS和iSCSI也不例外,它们各自都有优缺点,究竟选择哪一种,这要具体情况具体分析。不过,选择哪一种协议对存储的未来(这将使地理位置分散的存储集群成为现实)大有影响。

  文件VS.数据块

  无论是从实现方法还是发展历史看,NFS和iSCSI都有着天壤之别。NFS由Sun公司在上世纪80年代初开发,当时作为一种通用的文件共享协议,让网络客户端可以通过网络从服务器读取文件,或将文件写入到服务器。而iSCSI的问世要晚得多,它出现在2000年年初,作为光纤通道之外的一种基于IP的替代协议,与光纤通道一样,iSCSI对数据块级的SCSI命令进行封装,然后通过网络发送。

  两者的区别主要在于文件系统在哪里加以实现和管理。对于像NFS这样的文件级协议而言,服务器或存储阵列托管文件系统,客户端读取文件,并将文件写入到该文件系统中。而对于像iSCSI和光纤通道这样的数据块级协议而言,存储阵列为客户端提供数据块集合,然后客户端根据它决定所使用的任何一种文件系统,对该原始存储数据进行格式化。

  虽然这种区别具有许多影响,但最重要的影响可能在于,在像iSCSI和光纤通道这些数据块级协议中,存储阵列通常并不明白自己在存储什么内容,它只知道自己分配了数据块集合,哪个或哪些iSCSI客户端可能访问它们。反之,在像NFS这些基于文件的协议中,存储阵列完全了解存储在其上面的应用数据,无论这是一般的文件共享数据,还是组成虚拟机集合的文件。

  从实际的角度来看,由于存储阵列端了解存储在基于NFS的部署环境中的数据,因而存储阵列更容易跟踪实际的存储使用情况,在自动精简配置场合下,就能够拍摄快照或备份单个虚拟机,甚至可以在阵列端对主存储数据进行重复数据删除。

  但是,VMware的阵列集成vSphere应用编程接口(VAAI)最近进行了SCSI T10方面的改进,通过支持UNMAP SCSI原始命令,为基于数据块的存储增添了类似功能,这改进了虚拟化堆栈释放未使用数据块(因而让阵列可以回收这些数据块)的功能,还改进了阵列端副本卸载功能,因而加快了虚拟机克隆等任务。从某种意义上说,通过针对SCSI协议的扩展,使用NFS的文件级系统中已经实现的虚拟机管理程序与阵列的智能化集成一部分移植到了数据块级实现的环境中。

  文件与数据块之间的区别还不止这些。尽管添加这些SCSI原始命令让基于SCSI的存储协议可以具有与NFS同样的一些本领,但是在其他情形下,文件级协议还是有其优势,延伸集群(stretched clusters)就是一个例子。在这种同步复制的、地理位置分散的存储实现环境中,让存储层能够把每个虚拟机视做单独的存储资源,以便可以单个移动和故障切换,而非作为巨大的不透明群组。这极其重要,这可能也是使用基于数据块的存储协议很难实现的。

  网络上各异

  从网络的角度来看,NFS和iSCSI也大不一样。如果使用NFS,额外的吞吐量和冗余性主要通过两种方法来实现,一个是基于网络的链路汇聚,另一个是格外注意在多个阵列端的IP地址别名上均衡存储连接,确保负载均衡卓有成效。另一方面,iSCSI拥有内置的多路径功能,如果与支持该功能的厂商的技术配合使用,可以提供更高级的负载均衡算法,从而在多条服务器和阵列端存储路径上智能化地均衡存储流量。

  在这两种情况下,使用万兆以太网可以减轻出于存储性能的原因而采用多路径的重要性,因为对绝大多数企业来说,接近千兆的吞吐量都是完全不可想像的,至少今天是这样。不过,iSCSI在这方面仍比NFS更有优势,尤其是在汇聚多条千兆以太网链路时。

  从网络安全的角度看,iSCSI也具有优势。除了NFS和iSCSI都支持的基于源IP的安全限制外,iSCSI还内置了对双向的质询握手验证协议(CHAP)的支持,该协议可以防止未经授权的服务器连接至存储资源,并让服务器可以验证它们所连接的存储阵列的真实性。

  关于现代NFS实现机制的一个常见误解是,误以为它们是基于UDP/IP的。这种误解往往源自NFS版本2完全基于UDP这个事实,少数几种定制的实现除外。虽然UDP是一种延迟比较低的IP传输协议,但是它缺少TCP/IP具有的状态连接跟踪功能所提供的安全性和传输有保障等优点。从NFS版本3开始,TCP成了一种得到支持的传输协议。这也是目前大多数基于NFS的存储阵列和虚拟机管理程序(如VMware vSphere)采用的传输协议,使NFS与基于TCP/IP的iSCSI不相上下。

  明天赢输未知

  如今,iSCSI似乎是赢家,至少从网络角度来看是这样,因为它提供了更好的多路径支持和更高级别的端到端的安全性。不过,如果在阵列端得到适当的利用,NFS仍然有相当大的优势,因为它让阵列能够清楚地了解虚拟化堆栈是如何处理存储资源,还能智能化地参与针对该存储资源执行的加速、快照和重复数据删除等操作。从长远来看,那些基于阵列的智能化优点,以及未来NFS 4.1问世后对NFS客户端进行的多路径和安全性方面的改进,想必最后会使天平向NFS这边倾斜。

  不要相信哪一种协议会完全击败另一种。两者有区别反而是件好事,因为这使我们找到满足自己特定要求的基于IP的解决方案的可能性大增,这两种协议发展史的最后篇章目前还是未知数。

  SymQuest集团系统和网络架构师Matt Prigge

……
关注读览天下微信, 100万篇深度好文, 等你来看……
阅读完整内容请先登录:
帐户:
密码: