# Distributed_System_Lab **Repository Path**: beleton/Distributed_System_Lab ## Basic Information - **Project Name**: Distributed_System_Lab - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-22 - **Last Updated**: 2025-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式系统实验:基于逻辑时钟的分布式键值存储 ## 实验目标 本实验旨在帮助本科生理解分布式系统的核心概念,包括: 1. **远程过程调用(RPC)**:实现基本的客户端-服务器通信 2. **逻辑时钟(Lamport时钟)**:理解事件排序和因果关系 3. **数据复制**:实现简单的多副本键值存储 4. **一致性**:理解最终一致性的基本概念 ## 实验要求 - **编程语言**:C/C++ - **预计时间**:2-3天 - **难度等级**:适合大三本科生 ## 实验内容 ### 阶段一:基础RPC通信(半天) 实现基本的客户端-服务器通信框架,支持: - 客户端向服务器发送请求 - 服务器处理请求并返回响应 - 使用TCP/IP套接字进行通信 ### 阶段二:逻辑时钟实现(半天) 实现Lamport逻辑时钟: - 每个节点维护一个逻辑时钟值 - 发送消息时,携带当前时钟值 - 接收消息时,更新本地时钟值 ### 阶段三:分布式键值存储(1-1.5天) 实现一个简单的分布式键值存储系统: - 支持PUT(写入)和GET(读取)操作 - 多个服务器节点可以存储数据副本 - 使用逻辑时钟确保操作的因果顺序 - 实现简单的最终一致性机制 ## 系统架构 ``` 客户端 (Client) | | RPC调用 | 服务器节点1 (Server 1) ←→ 服务器节点2 (Server 2) ←→ 服务器节点3 (Server 3) | | | └────────────────────────┴────────────────────────┘ 数据复制和同步 ``` ## 编译和运行 ### 编译 ```bash make ``` ### 运行服务器 ```bash # 终端1:启动服务器1(端口8001) ./server 8001 # 终端2:启动服务器2(端口8002) ./server 8002 # 终端3:启动服务器3(端口8003) ./server 8003 ``` ### 运行客户端 ```bash # 连接到服务器1 ./client localhost 8001 # 在客户端交互界面中: # > PUT key1 value1 # > GET key1 # > PUT key2 value2 # > GET key2 ``` ## 测试 运行测试脚本: ```bash ./test.sh ``` ## 实验报告要求 1. **系统设计**:描述系统架构和各个模块的功能 2. **关键实现**:说明RPC、逻辑时钟、数据复制的实现方法 3. **测试结果**:展示系统的功能测试和性能测试结果 4. **问题分析**:讨论遇到的问题和解决方案 5. **总结**:总结实验收获和对分布式系统的理解 ## 扩展任务(可选) 1. 实现向量时钟(Vector Clock)替代Lamport时钟 2. 实现因果顺序广播(Causal Broadcast) 3. 添加故障恢复机制 4. 实现读写一致性(Read-After-Write Consistency) ## 参考资料 - Lamport, L. (1978). Time, clocks, and the ordering of events in a distributed system - Tanenbaum, A.S. and van Steen, M. (2017). Distributed systems, 3rd edition