# DSLAB **Repository Path**: mxy0114/dslab ## Basic Information - **Project Name**: DSLAB - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 27 - **Created**: 2025-12-29 - **Last Updated**: 2025-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DSLab Go Workspace ## 项目概述 本仓库聚合了两个分布式系统实践项目:MIT 6.824 的 MapReduce 实验框架,以及包含 Worker Pool、Lamport 时钟与 Primary-Backup 复制的 DSLab 三个实验。它们共同帮助你在 Go 语言环境下理解并实现并发控制、逻辑时序和一致性协议。项目细节参考 `Dslab/Readme.md` 和 `6.824/Readme.md`。 ## 仓库结构 ``` . ├─ README.md # 本说明 ├─ go1.23.4.linux-amd64.tar.gz # 官方 Go 1.23.4 安装包 ├─ Dslab/ # 三个分布式系统实验 (lab1 ~ lab3) └─ 6.824/ # MapReduce 实验 (master/worker/rpc) ``` ## 使用 go1.23.4.linux-amd64.tar.gz 搭建 Go 环境 1. **清理旧版本(可选)** ```bash sudo rm -rf /usr/local/go ``` 2. **解压安装包** ```bash sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz ``` 3. **配置环境变量**(将以下内容写入 `~/.bashrc` 或 `~/.zshrc`) ```bash export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$GOROOT/bin:$GOPATH/bin:$PATH ``` 重新加载配置:`source ~/.bashrc` 4. **验证** ```bash go version # 期望输出 go version go1.23.4 linux/amd64 go env GOPATH # 确认 GOPATH 设置正确 ``` 5. **可选:模块设置** ```bash go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct ``` ## 6.824 MapReduce 实验 (`6.824/`) - **目标**:实现 `master.go`、`worker.go`、`rpc.go`,通过 `wc test`(`test-mr.sh` 脚本)。详见 `6.824/Readme.md`。 - **常用命令** ```bash cd 6.824 go mod tidy # 初始化依赖 cd src/main sh test-mr.sh # 运行 MapReduce 自动化测试 ``` - **调试建议** - `src/mr/master.go`:使用互斥锁跟踪 Map/Reduce 任务状态。 - `src/mr/worker.go`:通过 `ihash(key) % nReduce` 分区,并用临时文件 + `os.Rename` 保证写入原子性。 - `src/mr/rpc.go`:定义任务类型、任务编号、文件名、`nReduce` 等 RPC 参数。 ## DSLab 实验 (`Dslab/`) - **Lab 1 – Bounded Worker Pool**:实现带队列和动态扩缩容的 Worker Pool(`lab1/pool.go`)。运行 `cd lab1 && go test -v -race` 验证。 - **Lab 2 – Lamport Logical Clock**:在 `lab2/node.go` 中维护逻辑时钟不变性,确保 `a → b` 则 `C(a) < C(b)`。 - **Lab 3 – Primary-Backup Replication**:实现带故障恢复的主备复制机制,确保写请求线性化通过。 - **模块依赖**:`Dslab/go.mod` 已配置模块名,进入子目录即可 `go test ./...`。