跳到主要内容

Lec 1

我看的视频是 2021 年的,实验做的是 Spring 2024 的。

什么是分布式系统

互联网由许多台计算机通过网络连接在一起,在数据中心内部,同样是通过网络连接在一起。多台计算机通过网络连接在一起提供服务,就是分布式系统。

为什么使用分布式系统:

  1. 可以连接多个分离的机器
  2. 通过并行增加容量/性能等等,例如多个在线会议。例如多台机器意味着更多的 CPU,更多的内存,更多的磁盘空间。
  3. 容错性,如果一个机器出现问题,其他机器可以继续工作
  4. 通过将数据分散在多台机器上,增加安全性。

历史

  1. 局部性的网络,DNS,email,AFS 等等(1980s)
  2. 数据中心,大型网站,网络搜索,购物 (1990s)
  3. 云计算(2000s)

现在分布式系统也是一个热门的研究方向

挑战

  1. 需要协调多台机器。
  2. 需要有一定的分区容错性(Partition tolerance):一部分机器可能宕机,网络可能出现问题。
  3. 想实现高性能不容易。有些任务并不能很好的并行化。

为什么学习 6.824

  1. 兴趣:可以接触到困难的问题,学习强大的解决方案
  2. 有用,分布式系统在很多地方都有应用
  3. 活跃的研究领域

课程结构

  1. lecture:讲授分布式系统的基础知识
  2. paper reading:阅读论文,详细学习。
  3. labs:完成数个实验
    1. MapReduce
    2. Replication using Raft
    3. Replicated K/V Service
    4. Sharded K/V Service
  4. 可以自己选择一个研究方向/实验进行研究

需要关注的部分

  1. Storage
  2. Computation
  3. Communication
    1. RPC

主要内容

分布式系统最终的目标是向应用程序隐藏分布式的复杂性

  1. Fault tolerance:成千上万台机器和网络,总会有一些机器或网络出现问题,分布式系统需要能在出现问题时继续工作。

    1. Availability:可用性,例如 P99

      在接口测试中有一个指标叫做 P99, 意思是 99%的请求在正常的时间内返回,1%的请求在超过正常时间内返回。同理还有 P999。see: percentile

      实现高可用性的方法是 Replication。

    2. Recoverability:发生错误时,系统能够恢复 实现 Recoverability 的方法是 日志,事务,写入持久化存储等等方法。

  2. Consistency:

    理想情况下,我们要实现的像一台机器那样,所有操作线性进行。但在分布式系统性是个困难的问题。

    考虑这样一种情况:get()函数返回最后一次 put()的值。不同的协议会有不同的结果。例如强一致情况下,get 和 put 就像是在一台机器上执行的一样。弱一致/最终一致 情况下,get 可能会返回不同的值。

  3. Performance: 性能和容错性,一致性是冲突的,例如为了实现容错性,可能需要将数据从一台机器复制到另一台机器,为了实现一致性,需要不同机器间进行通讯。都有可能降低性能。

    1. throughput
    2. latency,延迟一般使用上面提到的 Pk 表示,例如 P99, tail latency 指的是 P99 中的那 1%的请求延迟。一个任务可能会有多个请求,包括磁盘读写,网络通讯等等。这其中那些偶发的超时请求会影响整体的性能。

MapReduce

MapReduce 起源于 Google 内部处理网页索引的需求。这个任务往往要运行数个小时,处理 TB 级别的数据。

MapReduce 的目标是 容易的处理并行化任务。

MapReduce 的使用者需要实现两个函数:Map 和 Reduce。这两个函数是无状态的,可以并行执行。

MapReduce 会自动分配任务,重新执行失败的任务,等等。