分布式系统(Distributed Systems)是操作系统的最后一个重要组成部分。它由大量协作的机器组成,共同提供强大且可扩展的服务(如 Google、Facebook、Amazon 等)。

构建分布式系统的核心挑战在于故障是常态。在分布式环境中,机器随时可能宕机,磁盘数据可能损坏,网络通信本质上也是不可靠的(消息可能丢失或损坏)。然而,故障也带来了机遇:通过组合多台机器并在系统中构建大量的容错机制,我们可以构建出极少失效的系统。

分布式系统设计的核心思想可以归纳为以下几点:

  1. 冗余掩盖故障(Replication):通过增加大量的组件(如多块磁盘、多台机器、多个数据副本),可以有效地掩盖系统中出现的单点故障。
  2. 重试机制(Retry):在面对网络丢包或瞬时故障时,超时与重试是最基本且极其有效的技术。
  3. 协议设计至关重要:必须仔细考虑机器之间交换的确切比特流。通信协议(如无状态的 NFS 或基于回调的 AFS)不仅决定了系统如何响应故障,还直接影响着系统的可扩展性。

本模块从基础的不可靠通信层(UDP)讲起,逐步引入可靠通信机制(TCP)和远程过程调用(RPC)抽象,并深入探讨了两种经典的分布式文件系统设计:注重简单与快速恢复的 网络文件系统 (NFS),以及追求极致扩展性的 Andrew 文件系统 (AFS)