下一代Linux文件系统将如何发展?

GNU/Linux在支持文件系统创新方面已经取得了极大的成功,目前已支持超过50种文件系统,毫无疑问,这一成功与Linux一向的开源策略是密不可分的。随着数据的爆炸式增长,存储行业已经发生了翻天覆地的变化,文件系统如何才能紧跟时代步伐,满足越来越高要求的存储需要呢?

硬盘的成本/容量曲线趋势继续遵守著名的摩尔定律,与此同时,我们也看到固态硬盘增长势头喜人,它因消除了机械硬盘固有的性能限制得到了厂商和消费者的重视,虚拟化也在改变存储架构设计,应用程序也开始向基于FC的HTTP存储协议转移。

存储容量几乎每年以40%的速度递增,现在市场上已经可以看到容量为2TB的机械硬盘,但它们的性能却没有按比例提高,固态硬盘的出现解决了传统机械硬盘的许多弊病,因此未来几年势必会引发一场存储革命,文件系统也需要为存储革命做好准备,未来的文件系统必需解决扩展,并行处理和满足新工作负载类型方面的问题。

POSIX API标准制约了创新

IDE和SCSI已经逐渐被SAS取代,终于超越了6Gbps的门槛,Infiniband和10GbE通过远程直接内容访问(Remote Direct Memory Access ,RDMA)和TCP卸载引擎提高了网络I/O,iSCSI大有取代FC SAN的趋势,和传统的使用NFS和CIFS协议应用程序不同,基于Internet的程序通常是使用HTTP/HTTPS访问地理分散的存储。

我们已经使用POSIX API访问文件系统的历史已经长达30年,它是一个标准,但它也是弱点,是它遏制了创新,应用程序开发人员需要新的API标准执行对象存储和key-value存储。

诸如卷管理,全局命名空间,压缩,加密,克隆/快照,重复数据删除,RAID和远程站点复制技术都应该由文件系统实现,由于历史原因,这些功能都是在文件系统之外实现的,因此效率低下,复杂程度较高。

文件系统不应局限于在内核空间实现

关于内核空间和用户空间性能问题的争论应该歇歇了,上下文切换不再是什么大问题,因为堆栈和网络中的其它部分造成的延迟才是真正的限制因素。在用户空间中实现的新兴文件系统应该受到重视。原来大家都认为底层组件,如磁盘设备驱动和磁盘文件系统应该驻留在内核中,但现在是时候让大部分代码在用户空间中实现了。例如,Hadoop和GlusterFS就是完全在用户空间中实现的。有关Hadoop的使用可参考51CTO之前发布的使用Linux 和Hadoop进行分布式计算一文。

变革和创新

1、适合于直接附加存储(Direct Attached Storag,DAS)的文件系统

Linux文件系统Ext3是迄今为止最稳定的Linux文件系统,但现在是时候考虑Ext4(内核2.6.31或更高才支持)了,因为它解决了诸如文件和目录大小限制的局限性,基于延伸区(extent)分配机制能够有效地存储大文件,更快地执行fsck(文件系统检查)和日志校验和检查,但Ext4只是一个暂时的解决方案。

Linux社区希望Linux支持ZFS和Btrfs(B-tree文件系统),Btrfs将类似ZFS的功能引入到Linux内核中,Btrfs不仅仅是一个磁盘文件系统,它还具有软RAID管理,卷管理,克隆/快照和压缩功能,它支持跨多块磁盘动态增大或收缩卷。

Btrfs RAID可以从一个故障阵列快速重构,其速度比硬件RAID控制器还快,因为它只重新条带化使用了的数据块,执行快照需要的空间和时间也更少,Btrfs的目标是取代Linux默认文件系统Ext4,来自Oracle的Chris Mason是该项目的主要贡献者。

2、网络文件系统(NFS)

NFS于1995年推出,NFS v3是目前应用最广泛的NAS协议,所有服务器操作系统(除微软Windows外)和存储厂商都支持它,2000年发布的NFS v4在许多方面都做了改进,但没有取得广泛应用。NFS v4.1(pNFS)应该会出现转机,因为它带来了人们迫切需要的并行I/O架构,并为低延迟高带宽I/O增加了RDMA支持。

这是NFS的一个重大进步,允许用户转移到可横向扩展的架构,但它的设计是基于一个统一的元数据服务器,这可能会限制扩展能力,并且存在一个潜在的单点故障,因此要想成为主流应用尚需时日,这期间需要解决NFS v3/4的扩展性问题,通过在集群文件系统上集成NFS,利用虚拟IP和循环DNS技术,可以构建一个可扩展的NAS解决方案。

3、集群/分布式文件系统

集群或分布式文件系统允许跨多个存储服务器使用一个全局命名空间,并实现了智能分散I/O和数据,以克服NFS(和CIFS)的扩展性限制,每个厂商都有他们自己的内部协议,但对于应用程序是透明的,因为共享存储是通过标准的POSIX接口访问的。

这样的文件系统有Oracle Lustre,IBM GPFS和GlusterFS,它们之间的主要区别是处理元数据的方式有所不同,Lustre使用的是中央控制元数据服务器,GPFS使用的是分布式元数据服务器模型,GlusterFS使用的是无元数据模型。在选择集群文件系统时,关键就是要了解元数据的处理方式。

另一个不同点是Lustre和GPFS是在内核中实现的,GlusterFS是在用户空间实现的,这些集群文件系统都实现了前面谈到的关键存储堆栈功能,它们都可以扩展到PB级存储容量。

4、分布式对象存储/key-value存储

许多现代应用程序需要简单对象API访问诸如get/put,get/put属性和lock/unlock这样成对出现的数据,对象访问允许将内存和磁盘看作是通过序列化的信息持久化块。

大多数数据处理功能(如XML解析,哈希表,全文检索等)都开始转向更高级的应用程序库,对象存储API也适合构建NoSQL规模的数据库。很多Web 2.0应用正在逐渐转向Cassendra等NoSQL式存储,比如前日的Digg和Twitter。

目前对象存储还没有标准化,虽然WebDAV,Hadoop,Apache Cassandra和Amazon S3都遵循这个模型,如果是构建一个新应用程序,它们也是很好的选择,但在未标准化之前,POSIX API将是必需的。(参考阅读:详解NoSQL数据库Apache Cassandra的配置)

小结

预计到2012年,数据存储增长将会超过1800EB,要应对这种增长势头,文件系统的关键挑战是要解决扩展能力,并行处理能力,以及支持新的工作负载类型。新兴Linux文件系统技术值得认真考虑,因为它们的定位就是要解决这些问题。