项目简介
本项目包含两个基于Go语言的分布式系统实现。一是分布式的MapReduce程序,借助Go协程实现coordinator、worker、rpc三个组件,在串行示例基础上达成分布式处理;二是分布式键值存储系统(ShardKV),采用Raft一致性算法保障强一致性,运用分布式锁服务协调存储与访问,键值数据分片存储,由分片控制器管理映射信息。
项目的主要特性和功能
MapReduce部分
- 基于Go协程实现分布式MapReduce程序。
- 有coordinator、worker、rpc三个核心组件,分别进行任务管理、任务执行和远程过程调用。
- 具备任务划分和监控功能,通过心跳机制监控worker健康,处理worker意外退出情况。
- 解决输入分区、状态设计、协程池设计、心跳模块和RPC调用等设计问题。
分布式键值存储系统(ShardKV)部分
- 采用Raft一致性算法,保证多节点间数据强一致性。
- 键值数据分片存储,每个分片由特定组管理。
- 用分布式锁服务协调键值对存储和访问,确保并发操作正确性。
- 提供分片控制器,客户端能获取分片到组的映射信息并与对应组通信。
- 用RPC进行节点间通信,支持跨节点数据交换。
- 提供测试框架,可测试系统功能、容错能力和性能。
安装使用步骤
MapReduce部分
- 确保已安装Go语言环境,并获取项目源代码。
- 阅读MapReduce论文,重点关注第三章实现和第四章优化部分。
- 启动Master进程,根据传入文件名读取文件内容到内存,划分好任务并初始化状态。
- worker初始化协程池,每个协程向Master进程发起Rpc请求获取任务,若失败会重试三次。
- Master进程接收到请求后分配ID和任务给Worker,利用心跳机制监控Worker健康状态。
- Worker根据任务类型执行相应函数并输出文件,通过RPC将结果传输给Master,再请求新任务。
分布式键值存储系统(ShardKV)部分
- 确保已安装Go语言环境,并获取项目源代码。
- 使用Go编译命令对项目进行编译,生成可执行文件。
- 启动分片控制器和键值存储服务器,配置好网络参数。
- 编写客户端代码,通过RPC调用与服务端交互,实现键值对的存储和获取。
- 运行测试代码,验证系统的功能正确性、容错能力和性能。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】