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

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

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

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

posted @   福大大架构师每日一题  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示