前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式(集群)文件系统的设计

分布式(集群)文件系统的设计

作者头像
全栈程序员站长
发布2022-07-12 17:23:59
5290
发布2022-07-12 17:23:59
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

本文讲的分布式文件系统,是通过集群来实现的,因此也是集群文件系统。本文介绍下分布式文件系统中的常见问题及GFS中给出的解决方法。

设计要点:

性能

提高性能的方法就是并行,讲一个任务分解成多个任务,同一时候运行。

GFS中的思路是将文件分块,每一个块是一个chunk,每一个chunk单独保存,保存chunk的节点叫chunkserver。对文件的读写,能够转成对chunk的读写,不同的chunk能够并行运行,提高效率。每一个chunk有唯一的一个chunk handle表示,chunk的大小(chunk size)须要依据应用特点决定。chunk size过大,影响并行度;过小,占用很多其它的metadata空间,很多其它的chunk解析时间。

高可用性(availability)和可靠性(reliability)

可用性指系统平均宕机时间占总使用时间的比例,越小越好。

可控性指系统的平均无故障执行时间,越长越好。

高可用性能够通过硬件冗余(redundency)实现,当一个硬件不能工作的时候,迅速切换到备份系统。缩小切换时间能够添加�系统的可用性。

提高容错性(fault tolerance)能够提高系统的可靠性,一个component失效,不会影响总体的功能。

GFS中採用的就是硬件冗余的方法来实现高可用和高可靠。master和chunkserver都有备份,对于chunkserver,有3个节点互为备份,备份以chunk为单位进行。

master採用主备(master/slave)方式备份。master主节点(primary master)会将自己的状态信息(operation log和checkpoint)同步到备份节点上,当主节点不可用时,备份节点能够新的主节点使用。

chunkserver採用负载均衡(load balance)方式备份。每一个chunk会被保存在3台chunkserver上,每一个chunkserver都会參与处理请求。对于读请求,会选择距离client较近的chunkserver;对于写请求,master会选择一个primary replica,由primary replica负责将client的数据同步到其它的备份节点上。

可扩展性

集群的规模能够依据须要动态扩展,主要指存储能力的扩展性,即添加�chunkserver的能力。为了支持动态扩展,须要做到chunk保存位置的透明性(Location transparency),用户不须要知道每一个chunk保存在哪些机器上,而是由系统动态维护。这样系统中chunkserver的添加�和降低就不会影响client的使用。

GFS中的思路,採用一个master节点来保存全部的元数据(metadata),实现chunk的位置透明性。

master的主要工作:

文件的namespace管理

类似于传统文件系统中的文件夹结构,维护系统中已有的文件。

将文件映射成chunks

每一个文件由若干个chunk组成。从client看来,chunk由0開始编号直到N。master须要将chunk的逻辑编号(0,1,…N)映射为内部的chunk handle(chunk的唯一全局标示符)。

chunk位置管理

记录每一个chunk所属的chunkserver的位置,每一个chunk会保存在多个chunkserver上。依据这个信息,能够实现chunk的位置无关性。master会和每一个chunkserver通信,已得到每一个chunkserver上保存的chunk信息。创建新的chunk时,master也会依据一定的算法来选择chunkserver(默认选择3台,存放3个备份)来保存chunk。

容错处理

系统执行中,可能出现chunkserver损坏的情况。master须要将这台机器上所保存的chunk进行又一次部署(re-replicatoin)。还有随着机器的添加�,还要对chunk存放进行又一次的平衡(rebalancing,chunk migration between chunk servers)。

元数据保存和备份、恢复

上述功能的实现都依赖于metadata,metadata主要保存在内存中。系统中对文件的更改操作(mutation)都会记录操作日志中(operation log,这个日志类似于关系数据库系统中的日志)。内存中的metadata也会以checkpoint的形式存放在磁盘上。依据一个checkpoint和在其上进行的operation log,就能够恢复系统的状态(在checkpoint基础上重放运行过的全部操作就可以)。master就是将checkpoint和operation log备份到其它机器上,来实现备份恢复。

一致性模型(consistency model)

一致性指当一个client更改了文件的内容时,其它的clients是否能看到这些内容,何时看到。

GFS中採用的是强一致性(strong consistency model)模型,这个模型中,当一个client改动完毕后,其它的全部clients都会立马看到改动(无论client是从哪个备份读)。这个和普通的单机文件系统是一致的。GFS中没有提供的文件读写的并发控制,当多个client同一时候进行更改操作时,文件内容是不确定的(undefined)

并发控制(concurrency control)

当有多个client同一时候运行某个操作时,要保证系统的正确性。

GFS中对文件namespace的操作时原子操作,及多个client同一时候使用不会产生问题,内部有一定的并发控制策略(通过锁lock机制实现)。但对文件内容的读写没有提供并发控制。

GFS还提供了还有一种原子操作,附加记录(Atomic Record Appends)。

总结:

这些问题在每一个分布式文件系统中都会出现,不同的系统可能有不同的解决方法。在学习的时候,能够先关注这些点。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118611.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云 HDFS
云 HDFS(Cloud HDFS,CHDFS)为您提供标准 HDFS 访问协议,您无需更改现有代码,即可使用高可用、高可靠、多维度安全、分层命名空间的分布式文件系统。 只需几分钟,您就可以在云端创建和挂载 CHDFS,来实现您大数据存储需求。随着业务需求的变化,您可以实时扩展或缩减存储资源,CHDFS 存储空间无上限,满足您海量大数据存储与分析业务需求。此外,通过 CHDFS,您可以实现计算与存储分离,极大发挥计算资源灵活性,同时实现存储数据永久保存,降低您大数据分析资源成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档