前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BFS究竟实现到啥程度了?No.67

BFS究竟实现到啥程度了?No.67

作者头像
大蕉
发布2018-02-05 19:03:11
9980
发布2018-02-05 19:03:11
举报

BFS,全称 BigBanana File System ,大蕉文件系统。是大蕉同学希望通过自己实现一个分布式文件系统练练手,看看是不是能写出一个真正能跑起来的系统。最最主要参考资料是《Google File System》。

这是github链接。

https://github.com/CallMeDJ/BFS-BigBananaFileSystem.git

有兴趣一起学习的小伙伴可以下下来看看,可以后台给我提意见喔,或者参与到 coding 里边,大家一起学习一起成长。

根据《Google File System》定义,数据流是这样的。

GFS 中每一个数据块叫一个 chunk,存储着 chunk 的服务器称为 chunkserver。管理这所有 chunkserver 的服务器叫 master ,来对数据进行全局的管理。启动时通过服务发现来找到可用的 chunkserver,chunkserver 启动时也可以主动向 master 进行注册。master向 client 提供数据咨询服务,client 拿到chunkserver 和 chunk 的资料后,自行对 chunkserver 进行数据操作。

一个 put 流程是这样。

client进行数据块切分,请求 master 进行数据存储,由master进行全局的 chunk id 生成,并根据复制份数分配 chunkserver。分配完把 chunkserver 和 chunk 的信息给到 client,由 client 直接跟 chunkserver 通信进行数据保存。

一个 get 流程是这样。

client,请求master进行数据读取,master 获取数据所有的chunk块,然后把数据块chunk的位置及 chunkserver 的 ip 和端口给到client,由 client 直接跟 chunkserver 通信进行数据获取。

一个 delete 流程是这样。

master 把数据标记为已删除,然后通过垃圾回收机制进行真正的数据删除。

大概主要的功能就上面这样,后面我再详细解读一下论文吧,接下来说说BigBanana File System 的实现。

先报告一下现在实现了什么样的功能什么样的程度吧。

  1. 所有数据都只基于内存存储,暂时未存储到文件中。
  2. 支持 ls 命令可以按文件夹列出文件列表
  3. 支持 put 命令可以把文件放入到文件系统中。
  4. 支持 get 命令可以按照全路径获取文件
  5. 支持 delete 命令删除文件,把文件标记为已删除,不是实际删除数据。
  6. 支持自动垃圾回收机制。
  7. 支持按大小分块,并复制副本到分布式环境中。
  8. 实现文件服务器负载均衡,master 能均衡地把数据放到多个数据服务器中。
  9. master 先启动,chunk server 启动的时候能实时注册到mster中。暂未实现master主动发现存活的 chunk server。

暂未实现的功能。

  1. 暂未实现 put 的时候实时读文件。
  2. 暂未实现 保存文件到操作系统文件系统中。
  3. 暂未实现 服务器状态监控。
  4. 暂未实现 append 追加文件内容。
  5. 暂未实现 文件错误checksum校验
  6. 暂未实现 文件丢失复制
  7. 暂未实现 文件操作锁机制

不说了,说出来都是泪。从没想过写分布式文件系统这么难,这么多细节,但是基本雏形还是完成了,代码量不多,先看看项目的结构吧。

怎么阅读这个难看的源码呢?我来介绍一下各个包的作用。

bfs.server

服务器的启动程序,其中有 MasterServer 用来提供整体管理服务,ChunkServer 负责存放数据,BFSClient 作为客户端对外提供命令行的操作。

bfs.service

定义了服务器的服务接口,IMasterService提供了六个服务,IChunkServerService提供了七个服务。

bfs.service.impl

服务端的实现。

domain

数据传输过程中的一些bean定义。

comomand

客户端client的命令定义及实现。

这次就先不讲源码了,讲讲怎么玩这个系统。

首先启动一个 master 服务器。在ide上右键 MasterServer.java run一下就可以了。

然后启动3个 chunkserver,因为我们默认份数是三份嘛~所以至少需要三台机器同时跑着。启动的时候要增加启动参数 127.0.0.1 8870。第一个参数是ip,第二个参数是端口。一般来说我会使用8870、8871、8872三个端口。

如果启动成功的话,master进程里边会是这样的。

然后启动一个client,右键 BFSClient run一下就可以了。然后就可以开始玩了。

好了就酱~下次见,觉得还行点个赞,觉得不好出去跑个马拉松。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名叫大蕉的程序员 微信公众号,前往查看

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

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

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