云计算与分布式系统
Cloud Computing and Distributed Systems
📖这门课到底讲什么
云计算与分布式系统研究多台机器如何协同完成单机做不到的事:分布式系统基础模型与时钟与一致性问题、CAP 与 BASE、复制与共识(Paxos 与 Raft)、分区与容错、消息队列与异步解耦、微服务与 RPC、容器与编排(Docker 与 Kubernetes)、虚拟化与资源调度、以及可观测性(日志、指标、链路追踪)。它把操作系统与网络的知识放大到一个集群的尺度上。学完你应能解释一次分布式请求的完整链路与故障传播、设计具备容错能力的三层服务架构、用容器部署多服务应用并用编排工具管理、并对一致性与可用性的取舍做出有依据的判断。
🎯为什么必须学好
云原生与分布式是国内大厂后端架构的默认形态,面试中 CAP 理论、Raft 选主、分布式锁、限流与降级、消息队列如何保证不丢不重,都是高频深挖点;实习与工作中必然会接触 Docker、Kubernetes、Redis、Kafka。这门课让你从写函数进阶到设计系统,是初级工程师向中高级跃迁的知识跳板,也是系统设计面试的直接来源。
📌核心知识清单
- 分布式系统基础:节点与网络故障模型、同步与异步系统、时钟偏移与逻辑时钟(Lamport 与向量时钟)、因果序与全序
- 一致性与可用性理论:线性一致性、顺序一致性、CAP 三选二的实际含义、BASE 与最终一致性、Quorum 机制(读写集大小与一致性)
- 复制与共识:主从复制与多主复制、同步与异步复制的取舍、Paxos 与 Raft 的选主与日志复制流程、脑裂与租约
- 分区与容错:一致性哈希与虚拟节点、数据分片与再平衡、故障检测(心跳与超时)、幂等与重试、隔板与熔断降级
- 分布式协调与服务发现:ZooKeeper 与 etcd 的角色、分布式锁与 Leader 选举的实现、服务注册与负载均衡策略
- 消息与异步架构:消息队列的作用与投递语义(至多一次、至少一次、恰好一次)、顺序与分区、Kafka 的分区与消费组模型、幂等消费
- 微服务与通信:RPC 与 REST 对比、gRPC 与 protobuf、服务网关、链路追踪与全链路压测、微服务的代价与拆分原则
- 云平台与虚拟化:虚拟化与容器、Docker 镜像分层与命名空间与 cgroups、Kubernetes 的 Pod/Service/Deployment 模型、弹性伸缩与资源配额
✍️怎么学(可执行步骤)
- 主线教材用《数据密集型应用系统设计》(DDIA),重点第5至9章复制、分区、事务、一致性与共识,配合 MIT 6.824 课程与实验
- 读 Raft 论文并跟着可视化网站走一遍选主与日志复制流程,再用 Go 或 Python 实现一个简化版 Raft(选举加日志同步),这是理解共识协议的唯一有效方式
- 动手实践容器与编排:把一门课程项目容器化(写 Dockerfile 与 docker-compose),再部署到 minikube 或 k3s 上,配置 Service 与滚动更新并观察行为
- 搭一个完整的小型分布式应用:网关、两个业务服务、Redis 缓存与 MySQL、Kafka 消息解耦,用 Docker Compose 一键启动并故意杀掉某个服务观察容错表现
📚推荐教材与书籍
分布式系统领域最好的书,第5至9章复制、分区、事务与共识是核心,建议精读两遍
体系完整的学术教材,讲清时钟、一致性与分布式算法基础理论
中文系统架构书,从服务治理到云原生演进脉络讲得非常清楚,适合工程视角补课
K8s 中文参考书,部署与排障时按需查阅对象模型与命令
🎬视频课程 / 公开课
分布式系统课程标杆,四个实验(MapReduce、Raft、KV 服务、分片)含金量极高
国内高校与工业界讲师课程,讲解贴近企业实践
伊利诺伊大学课程,从 Gossip 协议讲到 Paxos,理论扎实
🌐网站与文档
拖动节点观察领导者选举与日志复制过程,理解 Raft 最快的方式
官方中文文档,概念、任务与参考手册齐全
镜像、网络、卷与 Compose 的权威说明
🐙GitHub 开源资料
系统设计面试最全的中枢资料,含大量真实架构案例与取舍分析
图解系统设计核心概念,从缓存到一致性哈希都有图,复习效率极高
基于 Raft 的分布式键值存储,生产级共识实现,适合读源码或当作分布式存储依赖
主流消息队列,理解分区、副本、消费组模型的优秀工程实现
🧪动手实践任务
实践 1
用 Go 或 Python 实现一个简化 Raft:支持领导者选举与日志复制,写测试模拟节点宕机与网络分区并验证日志一致性
实践 2
把某个课程项目容器化部署到 Kubernetes:编写 Dockerfile、Deployment、Service 与 ConfigMap,实现滚动更新并验证服务不中断
实践 3
搭建消息队列驱动的异步链路:两个服务通过 Kafka 或 RabbitMQ 通信,制造消费者宕机与重复投递场景,实现幂等消费并验证不丢不重
实践 4
完成一次故障演练报告:在容器集群中手动杀死一个副本、断开网络或打满 CPU,记录系统的表现与恢复时间,提出改进方案
🧾考试与面试
💼 面试会怎么考
高频:CAP 理论的实际含义与常见系统的取舍(Redis 与 ZooKeeper 各偏什么);一致哈希解决什么问题、虚拟节点如何缓解倾斜;分布式锁的几种实现(Redis 的 SETNX 与 Redlock、etcd 租约)及各自的坑;如何保证消息不丢不重(生产者确认、手动提交位点、幂等表);Raft 的选主与日志复制流程、脑裂如何避免;限流算法(令牌桶与漏桶)、熔断与降级;分布式事务方案(两阶段提交、TCC、本地消息表、Saga);幂等设计;一次请求超时了到底有没有执行成功,如何设计接口消除这一不确定性。
📝 期末与考研怎么过
考核形式常见为笔试加项目:笔试考 CAP、一致性模型、Quorum 读写推导(如 R 加 W 大于 N 的含义)、时钟与因果序判断、选举与日志复制流程描述;项目占较大比重,通常要求部署一个多服务系统并展示容错能力。备考要点是把经典理论(CAP、Quorum、复制模型)能用一句话说清并举例,项目文档写清架构与故障处理。目标八十分以上。
⚠️ 常见坑
- 把 CAP 理解成任意三选二,忽略分区是前提,面试中说出错误理解会直接减分
- 只学概念不搭环境,Docker 与 K8s 停留在看视频阶段,写不出可用的 Dockerfile 与编排文件
- 忽略幂等与重试设计,认为网络调用一定成功,导致重复下单等真实故障
- 在单体应用尚未跑通时就上微服务与分布式,架构复杂度远超团队能力,课程项目因此拖垮
- 盲目迷信最终一致性,忽视业务对强一致的真实需求(库存扣减、支付),设计出账或超卖问题