2020-07-27:如何设计一个分布式文件系统,如何设计动态扩容和数据定位?

举报
福大大架构师每日一题 发表于 2020/08/19 11:11:18 2020/08/19
【摘要】 此答案来自群成员:使用一致性hash实现添加节点,并进行数据迁移.数据迁移完成之前保留原有的节点路由信息.每次添加节点重新计算key值所在hash,hash到新节点的key可以先复制一份到新的节点,并标记旧节点的key待删除.直到所有的key都计算好迁移完毕,切换新旧节点信息,删除掉所有旧节点多余的key. 节点内的数据定位的话,先根据一致性hash确定所在节点,然后再根据节点自己的查找实现...

此答案来自群成员:
使用一致性hash实现添加节点,并进行数据迁移.数据迁移完成之前保留原有的节点路由信息.每次添加节点重新计算key值所在hash,hash到新节点的key可以先复制一份到新的节点,并标记旧节点的key待删除.直到所有的key都计算好迁移完毕,切换新旧节点信息,删除掉所有旧节点多余的key. 节点内的数据定位的话,先根据一致性hash确定所在节点,然后再根据节点自己的查找实现去定位数据,比如b-tree或者b+tree实现的文件系统.

对分布式文件系统的要求
对一个分布式文件系统而言,有一些特性是必须要满足的,否则就无法有竞争力。主要如下:
应该符合 POSIX 的文件接口标准,使该系统易于使用,同时对于用户的遗留系统也无需改造;
对用户透明,能够像使用本地文件系统那样直接使用;
持久化,保证数据不会丢失;
具有伸缩性,当数据压力逐渐增长时能顺利扩容;
具有可靠的安全机制,保证数据安全;
数据一致性,只要文件内容不发生变化,什么时候去读,得到的内容应该都是一样的。
除此之外,还有些特性是分布式加分项,具体如下:
支持的空间越大越好;
支持的并发访问请求越多越好;
性能越快越好;
硬件资源的利用率越高越合理,就越好。

架构模型
从业务模型和逻辑架构上,分布式文件系统需要这几类组件:
存储组件:负责存储文件数据,它要保证文件的持久化、副本间数据一致、数据块的分配 / 合并等等;
管理组件:负责 meta 信息,即文件数据的元信息,包括文件存放在哪台服务器上、文件大小、权限等,除此之外,还要负责对存储组件的管理,包括存储组件所在的服务器是否正常存活、是否需要数据迁移等;
接口组件:提供接口服务给应用使用,形态包括 SDK(Java/C/C++ 等)、CLI 命令行终端、以及支持 FUSE 挂载机制。
而在部署架构上,有着“中心化”和“无中心化”两种路线分歧,即是否把“管理组件”作为分布式文件系统的中心管理节点。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。