欢迎来到我的空间

一门分布式系统课

简介

这里的内容主要来我给某大学上的分布式系统课程大纲。 出于课时和难度的考虑,没有讲太多的概念和内容,只选择了一些基本概念来介绍。 其中,中心的是共识协议,围绕着共识协议的工作模型,介绍分布式系统的概念,围绕着测试共识协议,介绍系统质量保障技术。 以尽量少的内容,让学生对分布式系统有直观的了解和接触,结合理论与实践,为以后的深入学习打下基础。

具体分成三个部分。 第一部分介绍分布式系统概念和模型,然后介绍go语言,学习用go语言实现系统; 第二部分着重介绍共识协议,这一部分主要是同学们自己读论文,照着论文实现共识,最后构建一个基于共识的高可用键值存储; 第三部分介绍一些前沿的系统质量保障手段,要求学生把这些技术应用起来,测试和验证自己实现的系统。

分布式系统概念和模型

1. 分布式系统简介

内容:

  1. 分布式系统概念
  2. 为什么需要它
  3. 它的问题、挑战

阅读

2. 系统模型

内容:

  1. 基于消息: 同步 异步
  2. 基于共享 同步 异步
  3. 抽象系统模型: 状态机 + 图
  4. 物理系统模型: 线程,进程,事件,网络通信,客户端/服务器,消息/RPC
  5. go编程

阅读

报告

理解基于事件的处理,并发=/=多线程(进程)

论文

关注二者优缺点,设计系统时做出你的选择

I/O automata概念,了解如何用它描述算法、系统

3. 实践 1

内容:

构建基于消息(RPC)的分布式系统

模型

高可用系统

4. 复制和共识

内容:

  1. 复制状态机
  2. 容错
  3. 共识
  4. CAP theorem (CP VS AP)

阅读:

论文

理解状态机(重要),关于时间和时钟的部分如果看不懂可略过

扩展阅读

复制状态机

理解CAP,“三选二”,“二选一”是什么

5. 共识算法 Raft

阅读:

论文

Raft资料

案例:

ETCD

ETCD Raft

6.实践2

内容

  1. 构建一个高可用key value存储,可以基于实践1部分codebase

  2. n个节点(N1, N2, N3,… ,Nn, n固定) 复制系统,每个节点都是一个key value存储 客户端通过连接到节点读写数据; 当半数节点(n/2)停止服务时,系统仍能提供服务(fairness),并且保持数据的一致; 选用一种共识算法实现,实现复制和选主,不需要节点管理(不需要考虑增减节点),不需要实现linearizability(不需要考虑读旧值和写入重复命令的问题)

  3. 注意: 客户端需要容忍失败; key value需要持久化; 允许参考开源程序,但要表明对应哪一部分是自己的工作,以及为什么你觉得可以用它而不担心它的问题,用一些办法测试和验证它的正确(测试和验证部分,实践 2 cont,使用开源对这一部分的要求会相应地增高)

目标

熟悉高可用系统和共识协议开发

7. 共识算法 Paxos

阅读 :

论文

单Value Paxos

要点: 多Value Paxos

理解Paxos和Raft差异

案例:

系统质量保障

8. 系统测试和验证方法

内容

  1. 确定性模拟
  2. 随机化方法
  3. 形式化方法

阅读:

论文

了解随机化方法

了解形式化方法,模型检验

其它资料:

9. 实践 2(cont)

内容

为高可用key value store找deep bug

  1. 说明发现了什么deep bugs,画出它们的事件状态转换图
  2. 说明是用什么方法发现它们的(参考第8部分)

目标

掌握一定的测试/验证系统/协议正确技术 deep bug?

要经历多个特定的连续异步事件(消息重复/丢失/乱序,崩溃/重启)才能发生的bug

参考书