zoukankan      html  css  js  c++  java
  • 2020-07-27:如何设计一个分布式文件系统,如何设计动态扩容和数据定位?

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

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

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

  • 相关阅读:
    图书馆管理系统
    php js_unescape correspond to js escape
    咖啡小驻搬家到此,感谢您继续关注本博
    OO系统分析员之路用例分析系列(1)什么是用例
    jquery tab 潇湘博客
    双色球中奖查询程序
    大象Thinking in UML早知道 001公告
    魔摸新学堂简介
    拙著《大象Thinking in UML》已在互动出版网http://www.chinapub.com/129881开始出售,12月1日全国各大书店有售,敬请关注!^_^
    jQuery进入微软和Nokia的解决方案 潇湘博客
  • 原文地址:https://www.cnblogs.com/waitmoon/p/13442955.html
Copyright © 2011-2022 走看看