上一篇我们介绍了文件系统的基本原理,有助于使我们对于文件系统有个基本的认识,如果说的更详细一些,上一篇我们介绍的是单机文件系统的基本原理,而我们最终要实现的是一个分布式文件系统,从单机文件系统到分布式文件系统之间是如何变迁发展的呢?
文件系统的变迁之路
1. 单机文件系统
单机文件系统是所有文件系统的基础,用于操作系统和应用程序的本地存储。比如EXT2,EXT3,EXT4,FAT,FAT32,NTFS等。
在单机时代,最初为用户提供服务的时候,文件一般存储在单台服务器上,依靠操作系统的文件系统来实现文件的存储和管理。
随着互联网的兴起,以及日益增多的存储需求,单机文件系统的缺点逐渐显现出来:
容量问题: 存储规模很容易达到单机存储的极限。
性能问题: 在文件数目达到临界点,大量并发读写,性能会下降。
可靠性问题 没有副本,一旦硬件出现损坏,会极易造成数据丢失。
1. 网络文件系统
可在计算机之间共享文件,俗称NAS,允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问。
网络文件系统应用很广泛,现在出现的云存储,比如网盘的概念也是源于此。
网络文件系统的出现,能解决用户单机存储容量的问题,本地计算机可以使用较少的磁盘空间。
网络文件系统只是文件系统之上的一个网络抽象,没有根本上解决单机文件系统的各项瓶颈。
3. 集群文件系统
集群文件系统使网络上多个节点可以共用文件系统。消除了单机文件系统的各项问题。
最初集群文件系统是NAS的概念发展而来,依旧采用共享式。集群内的节点共同维护文件系统的数据,一个节点做出变更,则需要广播到其他节点。
通俗解释集群文件系统就是多个节点组成一个集群,各个节点上的文件数据都是相同的,一旦其中一个节点的数据发生变更,比如修改,删除等操作,那需要通知集群中的其他节点也做出相应的改变。
虽然解决了单机文件系统的各项问题,但集群文件系统也有不可避免的劣势:
扩展性问题:集群中的节点数量不能太多,因为每个节点都可能同时在进行通信,那系统连接总数为: 节点数量x节点数量。
新的性能瓶颈:一旦集群内的节点发生故障,无法即时响应,影响整个系统的运作,网络开销大。
- 新的可靠性问题:单个节点出现数据操作失误,比如删除元数据,则会波及整个系统。
4. 分布式文件系统
如何解决几千,几万个节点集群的各项问题,比如性能,可靠性等?
这时就诞生了分布式文件系统,比如Hadoop,分布式文件系统基本解决了上述文件系统面临的问题。
分布式文件系统有以下优点:
扩展性: 可以随时增删节点,动态扩容。可使用廉价的服务器构建。
可靠性: 有效避免单点故障。有很强的容错能力。
高性能: 具有较高的吞吐量,性能较高,可满足大量文件的读写。
便捷性: 操作简单,便于集中访问管理。
当然分布式文件系统也有一些缺点,比如不适合低延时应用,海量小文件问题,不适合频繁修改文件数据。
分布式文件系统是如何解决上述集群文件系统的问题呢?
在分布式文件系统中,节点只可以访问自己磁盘上的内容,这样就有效避免的大量的网络开销。
如何知道用户请求的数据在哪个节点呢?
一般元数据会存储在其中的几台节点上,称之为主,主节点之间组成了一个小的集群,可以同步信息,用户访问之时,通过查询主节点上存储的映射信息来确定访问哪个从节点。
主从模式有几种形式:
固定主节点,视情况而定,容易造成单点瓶颈。
随机主节点,典型的例子是选举模式。
当然每个节点上存储的数据也都是冗余备份的,一般都会备份三份,防止单点故障。
这篇文章主要讲一下,文件系统发展过程当中的变迁,以便对为什么需要分布式文件系统有个基础的认识,对分布式文件系统只讲了很少的一部分。
分布式CAP理论以及Paxos和Raft一致性算法,如何设计一个分布式文件系统等等,我们在后续的文章中慢慢介绍。