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 的实现。
先报告一下现在实现了什么样的功能什么样的程度吧。
暂未实现的功能。
不说了,说出来都是泪。从没想过写分布式文件系统这么难,这么多细节,但是基本雏形还是完成了,代码量不多,先看看项目的结构吧。
怎么阅读这个难看的源码呢?我来介绍一下各个包的作用。
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一下就可以了。然后就可以开始玩了。
好了就酱~下次见,觉得还行点个赞,觉得不好出去跑个马拉松。