ShowLo / SimpleDFS

A simple distributed file system (DFS)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SimpleDFS

A simple distributed file system (DFS)

 假设我们有thumm01-thumm05几台服务器,这里将thumm01作为客户端,将thumm02作为主机器master,将剩余的 thumm03-thumm05作为从机器slave(在配置文件中进行设置,所以可以根据需要修改masterslavethumm02-thumm05中的任何机器),规定客户端只能和master进行通信,master充当了DFS和客户端的一个桥梁。主要实现了两个功能,上传文件和下载文件。上传文件的时候master充当的是接收文件、切分文件然后分发文件分块到各slave的功能;下载文件的时候master起的是从slave中取回分块、整合分块然后传送整合文件到客户端的功能。

文件切分

 文件切分依据的原则是“不超过设定分块大小,不断行”,也就是分块的时候是一行行地读源文件到分块文件,一旦发现如果读入当前行就会导致分块大小大于设定分块大小,就关闭分块,同时将当前行写到新的分块。

上传文件

 客户端上传文件到mastermaster根据配置文件设定的分块大小对文件进行切分,暂存于master上,完成切分之后删除原来的完整文件。对于每一个分块,master根据配置文件给出的replication因子,在同样由配置文件给出的多个slave中随机选择replicationslave作为存放此分块的机器,将分块发送到slave机器上,同时记录分块存放的信息。完成之后,将master上的各个分块文件删除,只保存它们的分块存放信息。

下载文件

 客户端向master请求下载文件,master根据文件名,在本机上找到对应的分块存放信息,在找到的存放分块的多个slave中随机选择一个,然后命令此slavemaster发送分块文件,所有分块文件都发送完毕之后,master根据所有分块的文件名进行排序,然后按照顺序将所有分块文件逐一写入一个新文件以整合成一个大文件,并发送回客户端,发送完成之后删除在mater上的整合文件以及各个分块文件。

文件传输

 同时,各slave之间有一个向其他slave请求文件传输的功能。当一个slave需要某个分块,可以向master请求拥有此分块的slave地址,master根据分块文件名在本机找到存有此分块文件的随机一个slave,得到返回的slave地址后向其请求文件的传输,同时应该在master的记录表中将 当前slave增加到此分块的slave信息中去。

示例

上传文件:


下载文件:


About

A simple distributed file system (DFS)


Languages

Language:Python 100.0%