Lec 1
-
video:https://www.bilibili.com/video/BV16f4y1z7kn
6.5840 原来是有名的 6.824.
我看的视频是 2021 年的,实验做的是 Spring 2024 的。
什么是分布式系统
互联网由许多台计算机通过网络连接在一起,在数据中心内部,同样是通过网络连接在一起。多台计算机通过网络连接在一起提供服务,就是分布式系统。
为什么使用分布式系统:
- 可以连接多个分离的机器
- 通过并行增加容量/性能等等,例如多个在线会议。例如多台机器意味着更多的 CPU,更多的内存,更多的磁盘空间。
- 容错性,如果一个机器出现问题,其他机器可以继续工作
- 通过将数据分散在多台机器上,增加安全性。
历史
- 局部性的网络,DNS,email,AFS 等等(1980s)
- 数据中心,大型网站,网络搜索,购物 (1990s)
- 云计算(2000s)
现在分布式系统也是一个热门的研究方向
挑战
- 需要协调多台机器。
- 需要有一定的分区容错性(Partition tolerance):一部分机器可能宕机,网络可能出现问题。
- 想实现高性能不容易。有些任务并不能很好的并行化。
为什么学习 6.824
- 兴趣:可以接触到困难的问题,学习强大的解决方案
- 有用,分布式系统在很多地方都有应用
- 活跃的研究领域
课程结构
- lecture:讲授分布式系统的基础知识
- paper reading:阅读论文,详细学习。
- labs:完成数个实验
- MapReduce
- Replication using Raft
- Replicated K/V Service
- Sharded K/V Service
- 可以自己选择一个研究方向/实验进行研究
需要关注的部分
- Storage
- Computation
- Communication
- RPC
主要内容
分布式系统最终的目标是向应用程序隐藏分布式的复杂性
-
Fault tolerance:成千上万台机器和网络,总会有一些机器或网络出现问题,分布式系统需要能在出现问题时继续工作。
-
Availability:可用性,例如 P99
在接口测试中有一个指标叫做 P99, 意思是 99%的请求在正常的时间内返回,1%的请求在超过正常时间内返回。同理还有 P999。see: percentile
实现高可用性的方法是 Replication。
-
Recoverability:发生错误时,系统能够恢复 实现 Recoverability 的方法是 日志,事务,写入持久化存储等等方法。
-
-
Consistency:
理想情况下,我们要实现的像一台机器那样,所有操作线性进行。但在分布式系统性是个困难的问题。
考虑这样一种情况:get()函数返回最后一次 put()的值。不同的协议会有不同的结果。例如强一致情况下,get 和 put 就像是在一台机器上执行的一样。弱一致/最终一致 情况下,get 可能会返回不同的值。
-
Performance: 性能和容错性,一致性是冲突的,例如为了实现容错性,可能需要将数据从一台机器复制到另一台机器,为了实现一致性,需要不同机器间进行通讯。都有可能降低性能。
- throughput
- latency,延迟一般使用上面提到的 Pk 表示,例如 P99, tail latency 指的是 P99 中的那 1%的请求延迟。一个任务可能会有多个请求,包括磁盘读写,网络通讯等等。这其中那些偶发的超时请求会影响整体的性能。
MapReduce
MapReduce 起源于 Google 内部处理网页索引的需求。这个任务往往要运行数个小时,处理 TB 级别的数据。
MapReduce 的目标是 容易的处理并行化任务。
MapReduce 的使用者需要实现两个函数:Map 和 Reduce。这两个函数是无状态的,可以并行执行。
MapReduce 会自动分配任务,重新执行失败的任务,等等。