第2章 分布式进程与通信

进程与线程、进程间通信、客户机/服务器、RPC、消息通信与多播(含 Gossip)。

下载本章 PDF

2.1 进程、线程与地址空间

1. 知识点论述

「2.1 进程、线程与地址空间」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:冯·诺依曼模型:取指、执行,指令和数据经总线进出存储器。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

进程、线程和协程的区别

在B站观看

3. 知识点详解

  1. 冯·诺依曼模型:取指、执行,指令和数据经总线进出存储器。
  2. 进程:资源分配单位,有独立地址空间;切换要换页表等内核状态。
  3. 线程:调度单位,共享进程地址空间,切换更轻,便于共享数据。
  4. 多进程的问题:通信和切换都更贵;多线程要自己处理共享数据。

4. 应用场景

  • Web 服务器用线程池并发处理连接。
  • 理解为什么高并发服务更倾向多线程而非每连接一进程。
  • 后续 RPC/Socket 编程都以进程与地址空间模型为前提。

2.2 进程间通信

1. 知识点论述

「2.2 进程间通信」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:协议分层:应用不必直接面对传输细节,中间件提供更高层服务。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

程序中的同步和异步到底是什么

在B站观看

3. 知识点详解

  1. 协议分层:应用不必直接面对传输细节,中间件提供更高层服务。
  2. 按时间耦合:持久通信可暂存消息;瞬时通信要求双方当时都在。
  3. 按阻塞:同步调用挂起等待;异步调用提交后继续执行。
  4. 典型:客户机/服务器请求应答,消息队列削峰和解耦。

4. 应用场景

  • 聊天、远程调用、消息队列都建立在进程间通信之上。
  • 选择同步/异步、持久/瞬时决定系统耦合与延迟。
  • 中间件把传输细节从业务逻辑中剥离。

2.3 客户机与服务器

1. 知识点论述

「2.3 客户机与服务器」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:客户机支持位置透明和复制透明:换地址、换副本,调用方式不变。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

select、poll、epoll:一台服务器如何同时应付很多连接

在B站观看

3. 知识点详解

  1. 客户机支持位置透明和复制透明:换地址、换副本,调用方式不变。
  2. 连接方式:面向连接与无连接;迭代服务器与并发服务器。
  3. 多线程服务器:监听线程接受连接,工作线程处理请求。
  4. 无状态服务器更容易扩展和恢复;有状态服务可以用无状态服务器加外部状态来实现。

4. 应用场景

  • 无状态 API 网关便于水平扩展与滚动升级。
  • 有状态会话可外置到 Redis,服务器本身保持无状态。
  • 并发服务器模型是 RPC、HTTP 服务的基础。

2.4 远程过程调用

1. 知识点论述

「2.4 远程过程调用」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:目标:远程调用写起来像本地过程调用。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

RPC 是什么?和 HTTP 有什么区别

在B站观看

3. 知识点详解

  1. 目标:远程调用写起来像本地过程调用。
  2. 步骤:客户过程调用客户存根,存根编组参数,经网络传到服务器存根,解组后调用服务过程,再把结果编组返回。
  3. 参数:基本类型要统一数据表示;指针用 copy-in/copy-out,不能直接传地址。
  4. 绑定:客户进程要找到服务器进程。
  5. 异步 RPC:调用方不等结果;需要结果时再用回调或第二次调用取回。
  6. 也可以把一个 RPC 发到一组服务器。

4. 应用场景

  • 微服务之间用 gRPC/Thrift 互调。
  • 分布式文件系统、配置中心对客户端暴露过程式接口。
  • 异步 RPC 用于通知类调用,避免阻塞关键路径。

2.5 面向消息的通信

1. 知识点论述

「2.5 面向消息的通信」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:瞬时:Berkeley Socket、MPI。MPI 面向高性能并行进程通信。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

什么是消息队列

在B站观看

3. 知识点详解

  1. 瞬时:Berkeley Socket、MPI。MPI 面向高性能并行进程通信。
  2. 持久:消息队列。原语是发送和接收,队列负责缓冲。
  3. 结构:生产者、队列、消费者;Broker 负责路由和投递;通道代理负责跨系统传递。

4. 应用场景

  • 订单削峰:生产者写入队列,消费者异步处理。
  • 跨系统集成:ERP、支付、物流通过 Broker 解耦。
  • MPI 适合高性能科学计算的瞬时通信。

2.6 多播

1. 知识点论述

「2.6 多播」是《分布式计算系统》通信部分的核心知识点。说明独立节点如何通过进程、线程、RPC 与消息协同工作。本知识点首先把握:组成员关系要管理加入和退出。学习时请把它放回整门课主线——把独立计算机组织成对用户像一台机器的系统,并用通信、数据放置、复制、容错与调度把这件事做可靠。

2. 视频教程

Gossip 协议:大规模状态如何最终同步

在B站观看

3. 知识点详解

  1. 组成员关系要管理加入和退出。
  2. 定序:FIFO、因果序、全序。定序决定分布式账本和应用能假设什么。
  3. ISIS:ABCAST 提供全序,CBCAST 提供因果序和虚拟同步。
  4. 应用层多播:在覆盖网上转发,边越多开销越大。
  5. Gossip / 反熵:随机找对等方交换状态,适合大规模最终同步;谣言传播用停止概率控制开销。

4. 应用场景

  • 配置变更、成员变更用组播或 Gossip 扩散。
  • 监控心跳与集群状态用反熵同步。
  • 需要全序的账本类应用可参考 ISIS 定序思想。

本章练习(18 题)

1. 进程和线程的主要差别是?

2. 进程切换通常比线程切换贵,主要因为?

3. 多线程相对多进程的代价是?

4. 持久通信和瞬时通信的差别是?

5. 同步调用与异步调用的差别是?

6. 消息队列在进程间通信中的典型作用是?

7. 客户机侧的位置透明和复制透明是指?

8. 多线程服务器通常如何分工?

9. 无状态服务器更容易扩展,是因为?

10. RPC 的目标是?

11. RPC 为什么不能直接传递指针?

12. 异步 RPC 的特点是?

13. MPI 主要面向?

14. 消息队列为什么是持久通信?

15. Broker 在面向消息的系统里通常负责?

16. 多播定序里,全序和因果序的差别是?

17. 应用层多播的主要代价是?

18. Gossip / 反熵适合?