简单的分布式文件系统,有以下实现功能:
- 文件的上传、下载、追加和删除
- 异步写入
- 文件的分片和冗余
- 使用心跳机制处理故障 详细的说明可以查看云计算.pdf
gDFS 下有三个子模块,分别是
- proto(定义所有的 RPC 调用)
- nameNode
- dataNode
在在 name node 和 data node 之间使用 RPC 进行通信(gRPC),NameNode 向 DataNode 传输逻辑分区,在 DataNode 完成存储之后,向 NameNode 汇报相应块在自己的记录中所处的物理块号。
在第一轮迭代,master 作为 client,调用 slave 的服务。master 要负责对用户给出的文件进行边读边分片,然后调用 slave 的函数来存储。当 slave 返回成功之后,master 应当保存相应的逻辑文件分块到物理文件块到映射表。在处理读请求时,master 查看映射关系,到相应的 slave 那里去读相应的块。master 有以下的 RPC 方法
service Master{
rpc register(RegisterRequest) returns (RegisterResponse) {}
rpc reportDataWriteStatus(WriteReportRequest) returns (WriteReportReply) {}
rpc reportDataDeleteStatus(DeleteReportRequest) returns (DeleteReportReply) {}
rpc heartBeat(stream HeartBeatInfo) returns (NullReply) {}
rpc readTable(TableName) returns (TableContent) {}
rpc updateTable(Table) return (Status) {}
}
在第一轮迭代,slave 作为 server,接受 master 的调用。初步确定有以下三个方法,具体实现参看 proto 模块
service Slave{
rpc addNewDataNode (PeerInfo) returns (DataNodeReply) {}
rpc writeToBlock (WriteRequest) returns (WriteReply) {}
rpc readBlockByID (ReadBlockRequest) returns (ReadBlockReply) {}
rpc deleteBlockByID (DeleteBlockRequest) returns (DeleteBlockReply) {}
}
- 单层目录
- 上传下载
- 普遍的文件
- 无 Client
- master 节点直接挨个写
- 修改(可能只有 append )删除
- master 节点只需要等待第一个 slave 返回,而 slave 节点内部负责进行相应的备份
- 心跳
- 异常处理