BFS,全称 BigBanana File System ,大蕉文件系统。是大蕉同学希望通过自己实现一个分布式文件系统练练手,看看是不是能写出一个真正能跑起来的系统。最最主要参考资料是《Google File System》。
有兴趣一起学习的小伙伴可以下下来看看,可以后台给我提意见喔,或者参与到 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 的实现。
先报告一下现在实现了什么样的功能什么样的程度吧。
所有数据都只基于内存存储,暂时未存储到文件中。
支持 ls 命令可以按文件夹列出文件列表
支持 put 命令可以把文件放入到文件系统中。
支持 get 命令可以按照全路径获取文件
支持 delete 命令删除文件,把文件标记为已删除,不是实际删除数据。
支持自动垃圾回收机制。
支持按大小分块,并复制副本到分布式环境中。
实现文件服务器负载均衡,master 能均衡地把数据放到多个数据服务器中。
master 先启动,chunk server 启动的时候能实时注册到mster中。暂未实现master主动发现存活的 chunk server。
暂未实现的功能。
暂未实现 put 的时候实时读文件。
暂未实现 保存文件到操作系统文件系统中。
暂未实现 服务器状态监控。
暂未实现 append 追加文件内容。
暂未实现 文件错误checksum校验
暂未实现 文件丢失复制
暂未实现 文件操作锁机制
不说了,说出来都是泪。从没想过写分布式文件系统这么难,这么多细节,但是基本雏形还是完成了,代码量不多,先看看项目的结构吧。
怎么阅读这个难看的源码呢?我来介绍一下各个包的作用。
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一下就可以了。然后就可以开始玩了。
好了就酱~下次见,觉得还行点个赞,觉得不好出去跑个马拉松。
共同学习,写下你的评论
评论加载中...
作者其他优质文章