1 前言
文件系统是最常用的数据存储形式,所以,常用 Linux 操作系统的用户必然知道 ext4、xfs 等单机文件系统,用 Windows 操作系统的用户也都知道 NTFS 单机文件系统。各种业务场景下,不同的数据都存储于文件系统之上,大量业务逻辑就是基于文件系统而设计和开发的。提供最常用的存储访问方式,这是我们做文件系统的出发点之一。
另一方面,单机文件系统有其明显限制,主要是容量、文件数量限制,以及可靠、可用性限制。单机文件系统毕竟存储空间有限,且掉电或坏盘等故障会带来数据不可达或丢失。通过分布式文件系统解决这些问题,这是我们的出发点之二。
但做分布式文件系统会面临很多挑战,也会面临非常多的选择。
Google GFS 论文面世之后,Hadoop HDFS 随之诞生,HDFS 的选择是处理大文件,面向 MapReduce 这种非在线数据分析业务,重吞吐而非延时,对 HDFS 内部存储的数据进行访问,需要借助其提供的专有命令行和 SDK,意味着它并不是一个通用型的文件系统。它的主要架构是元数据服务(本文统一用 MetaData Service 的缩写 MDS 来指代元数据服务)和数据服务(本文统一用 Data Storage Service 的缩写 DSS 来指代数据服务),其中 MDS 是单点的,单点的 MDS 能做出一致的决策,为了保证 MDS 可靠性,一般会选择再做一个备份。HDFS 的 DSS 则可以是很多个。因为文件大小和形式固定,元数据量不会太大,因而理论上单点 MDS 就可以支撑,不过单 MDS 仍限制了集群的规模。
HDFS 之后,出