上一期的文章我们讲述了《什么是分布式存储》,接下来这期我们来学习下分布式文件系统。
公司的技术大拿正在给新员工做技术培训:大家都用过电脑,相信都知道什么是文件系统。
什么是文件系统?新员工蛋蛋不合时宜的插嘴道。
小伙伴们被蛋蛋的勇气惊呆了。
▉什么是文件系统?
技术大拿眉头皱了皱,忍住快要爆发的情绪。解释到:
数据是以二进制的方式存储在介质中的,但是我们并不能直接理解这些高低电平的数据代表什么意思,而文件系统就是告诉我们这些二进制的数据要表达的意思。
看着依然紧皱眉头的蛋蛋并不像捣乱的样子,技术大拿打开了自己的电脑。
这些文件大家都见过吧,这些文件是怎么出现的?这就靠文件系统来实现的。文件系统将二进制的数据按照人类可理解的架构来解析出来,我们可以通过这个系统来管理、删除和复制这些文件,从而来控制存储里面的数据。
那么文件系统是什么价值?蛋蛋继续追问到。
▉文件系统的价值是什么?
文件系统是管理磁盘的软件系统,能够简化用户对磁盘空间的使用,降低使用难度,让用户可以更加形象的方式将磁盘中的数据供给我们使用。
打个比方,存储的磁盘就相当于我们的仓库。如下图所示,这是一个很大的空仓库,这就相当于一个没有格式化的磁盘,空间很大,让我们来存储数据使用。
虽然我们可以直接将数据存储到磁盘的空间,但是由于缺少规划,我们数据可能就会毫无规律的存放在磁盘上。不但放的数据比较少,而且当我们想查找的时候也会非常费劲,甚至找不到需要的数据。
因此,文件系统出现了。一方面将数据进行统一管理,另一方面让我们用户能够更好的查到数据。
就好比我们仓库中的货架,我们可以将货物进行统一的规划和管理,这样我们就能按照编号快速的找到我们需要的数据,不仅存放的数据多,而且查找起来也更方便。
文件系统就相当于管理货物的货架和人的集合,让我们不再为存储数据担心,方便我们管理和查找数据。
看着眉头舒展开的蛋蛋,技术大拿知道可以接下往下进行了。
▉本地文件系统和网络文件系统
文件系统早期是本地操作系统管理存储设备的一种方式,早期的管理需求大多基于本地的文件管理,比如Ext4、XFS、FAT32和Btrfs等文件系统,这些文件系统之后能提供本地磁盘格式化并使用。
但是随着传输技术的发展,人们开始有了新的需求,不止限于本地文件的传输I/O技术,人们也开始对远程数据传输有了需求,人们希望通过TCP/IP方式获取数据,就相当于增加了一种可以远距离传输的I/O技术,例如我们的文件共享需求。
目前主流的接入协议有NFS协议为代表的Linux阵营和以CIFS/SMB协议为代表的Windows产品阵营。不过随着技术的发展,基本上可以通用了。
支持远程访问的文件系统解决了资源共享的问题,但是这些文件系统虽然能够支持多个客户端访问,但是毕竟是单机,处理能力有限,因大规模的数据访问领域,例如电商网站,大数据处理,采用NFS这种访问方式就无法满足需求。
于是,为了可以让多台机器上的多用户通过网络分享文件和存储空间,于是就出现了分布式文件系统,该文件系统的服务端通过一个集群来实现,客户端可以并发的访问该集群的多达数万个节点,因此承载能力得到极大的提升。
对应上面的仓库比喻,我们可以简单理解为:在仓库的初期,管理更多的是基于本地的需求,这个时候采用的文件系统是Ext4、XFS、FAT32和Btrfs等,这些系统只支持本地访问。
但是随着传输技术的发展,人们希望通过网络来访问这个存储仓库,于是NFS、CIFS/SMB开始出现。但是这些文件系统在的支持远程访问的个数有限,于是就出现了分布式文件存储。
本地文件系统、网络文件系统和分布式分拣系统这几种文件系统没有本质的差别。只是网络连接的可靠性复杂性等因素,相对于本地总线而言,分布式文件系统接入的存储设备,需要应用层做更多复杂的策略来配合达到相同的效果。
▉主流分布式文件系统
随着数字化转型的深入,海量数据对存储系统提出了新的要求,市场上出现了多种分布式存文件系统。如HDFS、Ceph、GFS、GPFS、Swift等。在实际工作中,为了更好地引入分布式文件系统,我们需了解各种文件系统的特点,以及各种技术的适用场景,下面分别介绍:
中间控制节点架构(HDFS)
HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
HDFS是Hadoop大数据架构中的存储组件。在开始设计的时候,HDFS就已经明确的它的应用场景,就是为大数据服务。主要的应用场景有:
1、对大文件存储的性能比较高,例如几百兆,几个G的大文件;
2、适合低写入,多次读取的业务;
3、HDFS采用多副本数据保护机制,使用普通的X86服务器就可以保障数据的可靠性,不推荐在虚拟化环境中使用;
图HDFS简化架构图示意图
完全无中心架构---计算模式(Ceph)
Ceph是一个开源的存储项目,是目前应用最广泛的开源分布式存储系统,已得到众多厂商的支持,许多超融合系统的分布式存储都是基于Ceph深度定制。而且Ceph已经成为Linux系统和OpenStack的标配,用于支持各自的存储系统。
图Ceph简化架构图示意图
Ceph可以提供对象存储、块设备存储和文件系统存储服务。同时支持三种不同类型的存储服务的特性,在分布式存储系统中,是很少见的。
Ceph没有采用HDFS的元数据寻址的方案,而且采用CRUSH算法,数据分布均衡,并行度高。而且在支持块存储特性上,数据可以具有强一致性,可以获得传统集中式存储的使用体验。
但是目前Ceph支持文件的性能相比其他分布式存储系统,部署稍显复杂,性能也稍弱,一般都将Ceph应用于块和对象存储。
Ceph是去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的能力要求比较高。
完全无中心架构---一致性哈希(Swift)
Swift最初是由Rackspace公司开发的高可用分布式对象存储服务,并于年贡献给OpenStack开源社区作为其最初的核心子项目之一,为其Nova子项目提供虚机镜像存储服务。
Swift构筑在比较便宜的标准硬件存储基础设施之上,无需采用RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
图Swift简化架构图示意图
Swift和Ceph提供的对象存储服务类似。Swift主要用于解决非结构化数据存储问。它和Ceph的对象存储服务的主要区别是:
1、客户端在访问对象存储系统服务时,Swift要求客户端必须访问Swift网关才能获得数据。而Ceph使用一个运行在每个存储节点上的OSD(对象存储设备)获取数据信息,没有一个单独的入口点,比Swift更灵活一些;
2、在数据一致性方面,Swift的数据是最终一致,在海量数据的处理效率上要高一些,但是主要面向对数据一致性要求不高,但是对数据处理效率要求比较高的对象存储业务。而Ceph是始终跨集群强一致性。主要的应用场景,在在OpenStack中,对象存储服务使用的就是Swift,而不是Ceph;
除了上述HDFS、CEPH和Swift等分布式文件系统外,还有GlusterFS、CephFS等很多分布式文件系统,不同的文件系统解决的问题是不同的,因此应用场景也是有很大差异的。因此,大家在工作中如果选型时,也需要考虑这些差异。每种分布式文件系统的细节又有所差异,这个也是与它们所要解决的具体问题相关的。
▉未完待续……
虽然分布式文件系统可以处理高并发访问的问题,但对于同一个文件同时写会存在数据不一致的问题。
为了解决同一个文件被不同客户端的应用并发写的问题,这个时候就出现了集群文件系统。
接下来的文章我们将继续介绍《分布式和集群的区别》
——END——
文章内容部分来源于网络,侵删!