MIT 6.5840 分布式系统课程笔记(一):核心概念与实验框架
一、课程实验概览
MIT 6.824 是一门以实践为核心的分布式系统课程,包含四个循序渐进的实验项目,逐步深入分布式系统的核心挑战与解决方案:
-
Lab 1: MapReduce
-
目标:基于论文设计并实现分布式MapReduce框架,完成词频统计等任务。
-
技术要点:
- Map阶段:将输入文件分割为多个任务,通过RPC分配至Worker节点,生成中间键值对。
- Reduce阶段:合并中间结果,输出最终文件。
- 容错机制:通过Master节点监控任务状态,超时任务自动重新分配。
-
-
Lab 2: Raft一致性算法
-
目标:实现Raft共识算法,解决多副本状态同步问题。
-
核心机制:
- 领导者选举:节点通过心跳超时触发选举,基于任期号和日志完整性投票。
- 日志复制:Leader节点通过AppendEntries RPC同步日志,确保多数节点提交后状态机应用。
- 安全性:通过任期号和日志索引防止脑裂和数据不一致。
-
-
Lab 3: 容错KV存储
-
目标:基于Raft构建高可用的键值存储系统。
-
实现难点:
- 线性一致性:通过Raft日志保证所有操作顺序一致,客户端请求需等待日志提交后响应。
- 快照压缩:定期生成快照以减少日志量,支持快速恢复。
-
-
Lab 4: 分片式KV服务
-
目标:实现数据分片(Sharding)和动态负载均衡。
-
关键技术:
- 分片策略:按Key哈希或范围划分数据,分散到不同节点组(Shard)。
- 迁移与重平衡:监控负载并动态迁移分片,通过配置变更协议(如Raft)协调迁移过程。
- 多副本容灾:每个分片组内使用Raft保证数据冗余。
-
二、分布式系统的核心抽象与工具
分布式系统的设计依赖于以下基础工具与抽象,以简化复杂性问题:
-
RPC(远程过程调用)
- 作用:隐藏网络通信细节,使跨节点调用像本地函数一样透明。
- 挑战:需处理网络延迟、丢包和重试等异常场景。
-
线程与并发控制
- 优势:利用多核资源,结构化处理并发任务(如并行处理Map/Reduce任务)。
- 同步机制:锁(Mutex)、条件变量(Condition Variables)避免竞态条件。
-
非易失存储(Non-volatile Storage)
- 应用场景:持久化日志和快照,确保故障后状态可恢复。
- 性能优化:批量写入与异步刷盘(如Raft的日志持久化策略)。
三、可扩展性(Scalability)的设计哲学
分布式系统的扩展性体现为通过增加资源线性提升性能,但需解决瓶颈转移问题:
-
水平扩展(Horizontal Scaling)
- 策略:通过添加无状态服务节点(如Web服务器)分流请求。
- 瓶颈转移:当数据库成为瓶颈时,需引入分库分表或缓存(如Redis)。
-
垂直扩展(Vertical Scaling)
- 局限性:单机硬件提升存在天花板(如CPU核数、内存容量)。
-
分片与负载均衡
- 分片:按数据特征(如Key哈希)划分存储,分散压力。
- 负载均衡器:动态分配请求至健康节点,避免单点过载。
四、可用性与容错机制
分布式系统需在故障频发的环境中保持服务连续性,关键技术包括:
-
多副本冗余(Replication)
- 主从复制:写操作由主节点同步至从节点,故障时切换主节点。
- 多主复制:允许写入多个节点,需解决冲突(如Last-Write-Wins)。
-
故障检测与恢复
- 心跳机制:定期检测节点存活状态,超时触发故障转移。
- 日志重放:通过持久化日志重建故障节点状态(如Raft的日志复制)。
-
非易失存储的应用
- 日志与快照:定期保存系统状态,支持快速恢复。
- 权衡:减少磁盘I/O次数以提升性能(如批量提交日志)。
五、一致性的权衡与模型
一致性模型定义了分布式系统中数据访问的语义,需在性能与正确性间权衡:
-
强一致性(Strong Consistency)
- 特点:所有读操作返回最新写入值,如线性一致性(Linearizability)。
- 代价:高延迟(需等待多数节点确认)。
- 适用场景:金融交易、分布式锁等。
-
弱一致性(Weak Consistency)
- 最终一致性(Eventual Consistency):无新写入时,副本终将收敛。
- 因果一致性(Causal Consistency):保证因果关系的操作顺序。
- 适用场景:社交媒体、评论系统等高吞吐场景。
-
CAP定理的启示
-
定理内容:分布式系统无法同时满足一致性(C)、可用性(A)、分区容错性(P)。
-
设计选择:
- CP系统:优先一致性(如ZooKeeper)。
- AP系统:优先可用性(如Cassandra)。
-