课程介绍

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)不需要做那么多操作,但是满足不了需要高一致性的应用场景。

高一致性和弱一致性都有相应的应用场景,因此都需要进行研究讨论。