MIT-6.824-分布式系统课程笔记
课程介绍
1 分布式系统概述
1.1、什么是分布式系统?
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。分布式系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。
大型网站的多机协同存储或大数据计算(比如MapReduce),以及诸如点对点文件共享等等,这些关键的基础设施都是分布式的。
1.2、为什么要构建分布式系统?
- 通过并行获取高性能。
- 通过复制增加容错性。
- 将物理计算与现实实体放在一起。
- 通过隔离实现安全性。
1.3、构建分布式系统将要面临的问题
- 将会遇到并发编程以及各种复杂交互所带来的各种问题。
- 需要处理局部故障(超时机制、熔断机制)。
- 需要精心设计才能使系统提供理想的性能。
1.4、为什么要学习这门课程?
- 有趣 —— 困难的问题,强大的解决方案。
- 社会需求 —— 由大型网站的兴起所驱动。
- 研究的热点 —— 仍有一些重要的问题待解决。
- 亲身实践 —— 将亲手构建一些注重性能和容错能力的相当实用的分布式系统。
2 课程结构
2.1、文献
一些研究性文献、论文等等。
2.3、实验
- Lab 1: MapReduce(阅读论文,并实现自己的简单版本的MapReduce)
- Lab 2: replication(复制) for fault-tolerance using Raft(用于容错的Raft)
- Lab 3: fault-tolerant key/value store(构建一个容错的键/值类型的服务器,该服务器可以被复制和容错)
- Lab 4: sharded key/value store(将所实现的有可复制能力的主备key/value服务器克隆到多个独立的组中,然后将之前key-value存储系统中的数据分割并分别存储到这些独立的组中)
2.4、最终项目(可选的)
3 主题
这是一门关于应用程序基础设施的课程,涉及以下三个方面:
- 存储
- 通信
- 计算
最大的目标:构建外观和行为类似于非分布式存储和计算的系统的接口,即隐藏分布式系统的复杂性。
3.1、实现(Implement)
需要涉及以下内容来实现分布式系统:
- RPC(Remote Procedure Call)远程过程调用协议 —— 一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。将底层通过不可靠网络进行通信这个事实隐藏。
- 线程 —— 结构化并发操作
- 并发控制 —— 例如,锁等等。
- 。。。
3.2、扩展(scalability)
我们希望能够通过购买更多的计算机来扩展吞吐量,从而应付更多的负载。
但是随着计算机的渐渐增多,共享资源就变成新的性能瓶颈,例如网络、数据库等等。此时就需要更好的设计,而不仅仅是更多的计算机。
对应这一主题的是实验4。
3.3、容错(Fault Tolerance)
分布式系统中会涉及许多台计算机,因此总会有计argument算机出现故障和错误。
因为我们希望我们的分布式系统具有:
- 高可用性(Availability) —— 即使发生局部故障,应用仍能继续运行。
- 高恢复性(Recoverability) —— 当故障被修复时,应用能够继续运行。
保证容错的一个方法就是构建备份服务器,如果一台服务器崩溃,则可以使用 另一台服务器继续运行。
对应这一主题的实验是实验1、实验2和实验3。
3.4、一致性(Consistency)
一致性即分布式系统中需要保证多台服务器的数据是一致的。
然而一致性和性能是对立的。高一致性(Strong Consistency)需要完成更多操作,所以将会削弱性能。弱一致性(WeaConsistency)不需要做那么多操作,但是满足不了需要高一致性的应用场景。
高一致性和弱一致性都有相应的应用场景,因此都需要进行研究讨论。