一、分布式系统概述

大家好,我是这门课的主讲。今天咱们聊聊分布式系统——说白了,就是把一堆廉价的普通计算机连起来,让它们像一台超级计算机一样干活。我做了十几年分布式系统,踩过的坑比走过的路还多,今天就把这些经验掏心窝子分享给你。

1.1 什么是分布式系统?

先给个定义:分布式系统是多个独立计算机节点通过网络通信、协同工作,对外呈现为一个统一整体的系统。

你想想看,你每天用的微信、淘宝、抖音,背后都是成千上万台服务器在干活。用户发一条消息,可能经过几十个节点处理,但你感觉就像在跟一台机器交互。这就是分布式系统的魅力。

核心特征:

  • 分布性:节点在物理上分散,可能在不同机房、不同城市
  • 自治性:每个节点有自己的CPU、内存、存储,独立运行
  • 协作性:节点通过网络通信,共同完成任务
  • 透明性:对外隐藏内部细节,用户感觉不到"分布"

我记得刚入行时,带我的老工程师说:"分布式系统就是一群不靠谱的机器,通过不靠谱的网络,要完成靠谱的任务。"当时觉得是玩笑,后来才发现——这是真理。

1.2 发展历史:从单机到集群

分布式系统不是一天建成的。我把它分成几个阶段:

年代 阶段 特点 代表系统
1960s-1970s 萌芽期 ARPANET、早期网络协议 ARPANET
1980s 理论奠基 分布式计算理论、RPC Sun RPC、NFS
1990s 互联网爆发 Web服务、集群技术 Apache、DNS
2000s 大规模时代 Google三驾马车、NoSQL GFS、MapReduce、BigTable
2010s至今 云原生时代 容器化、微服务、Serverless Kubernetes、AWS Lambda

我个人习惯把2004年作为一个分水岭。那年Google发表了GFS、MapReduce、BigTable三篇论文,彻底改变了行业。我之前在电商公司做架构时,就参考了这些思想,用Hadoop搭了一套离线数据处理平台——虽然现在看很粗糙,但当时确实解决了单机处理不了的难题。

1.3 核心挑战:为什么分布式这么难?

分布式系统难在哪?说白了就三个字:不确定性。

单机系统里,函数调用要么成功要么失败,结果可预测。但在分布式系统里,你发一个网络请求,可能遇到的情况太多了:

  • 请求丢了(网络故障)
  • 请求到了但响应丢了
  • 节点处理到一半挂了
  • 节点没挂但卡死了(GC停顿)
  • 时钟不同步导致时间错乱

我曾经在一个金融项目中遇到过:两个数据中心之间的专线断了,但应用层完全没感知,结果两边同时处理同一笔订单,最后对账时发现数据不一致——那叫一个惨。

1.3.1 CAP理论:分布式系统的"不可能三角"

CAP理论是分布式系统最基础的理论,没有之一。它说:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance),三者最多同时满足两个。

CAP详解:

  • C - 一致性:所有节点在同一时刻看到的数据是一样的
  • A - 可用性:每个请求都能得到非错误的响应(但不保证数据最新)
  • P - 分区容错性:系统在网络分区(节点间通信中断)时仍能正常工作

你想想看,网络分区是必然发生的——交换机故障、光纤被挖断、机房断电,这些事我全遇到过。所以实际系统中,P是必选的。剩下的就是在C和A之间做取舍:

  • CP系统:优先保证一致性,牺牲可用性。比如ZooKeeper,分区时停止写入
  • AP系统:优先保证可用性,牺牲一致性。比如Cassandra,分区时继续服务但数据可能不一致

嗯,这里要注意:CAP里的"一致性"指的是强一致性。实际工程中,我们更多用"最终一致性"来换取可用性。我做过一个社交Feed系统,用户发帖后,好友看到的时间可能有几秒延迟——用户能接受,系统却获得了高可用。

1.3.2 一致性模型:从强到弱

一致性模型定义了系统对数据"多新"的保证。我按从强到弱排个序:

模型 保证 典型场景 性能影响
强一致性 写完后立即读到 银行转账、库存扣减 高延迟、低吞吐
顺序一致性 所有节点看到相同操作顺序 分布式锁、选主 中等
因果一致性 有因果关系的操作按序 评论回复、社交关系 较好
最终一致性 最终会一致,但时间不确定 DNS、CDN缓存 高吞吐、低延迟
弱一致性 不保证何时一致 日志收集、监控指标 最高性能

我个人习惯这样选:涉及钱的用强一致性,涉及用户体验的用最终一致性,纯日志用弱一致性。别一上来就追求强一致,那会让系统变得又慢又脆弱。

避坑指南:

我曾经在一个项目中,产品经理要求"用户修改密码后立即生效"。我用了强一致方案,结果每次改密码都要等几百毫秒,用户体验极差。后来改成:密码更新写入主库,读请求先查主库,如果主库挂了才读从库——既保证了安全,又没牺牲性能。记住:不要为了理论完美牺牲工程实用。

1.4 知识体系总览

下面这张图是我自己画的分布式系统知识体系,也是这门课的核心脉络。你先把框架记在脑子里,后面每章都会对应到具体节点。

分布式系统知识体系 分布式系统知识体系 通信与网络 RPC、消息队列、序列化 存储与数据 分布式文件系统、NoSQL 计算与调度 MapReduce、流处理、调度 CAP理论 一致性·可用性·分区容错 一致性模型 强一致→最终一致 时间与顺序 时钟同步、逻辑时钟 分布式共识 Paxos/Raft 分布式事务 2PC/Saga/TCC 分布式锁 Redis/ZK/Etcd 服务发现 DNS/Consul/K8s 实践与工具 Kafka · ZooKeeper · Redis · Etcd · Kubernetes · TiDB · Cassandra 💡 学习路径建议 先掌握CAP和一致性模型 → 再学共识算法 → 最后动手搭建集群

这张图把分布式系统拆成了四层:三大基石(通信、存储、计算)→ 核心挑战(CAP、一致性、时间)→ 关键技术(共识、事务、锁、发现)→ 实践工具。后面29章,咱们一层层往下啃。

1.5 本章小结

这一章咱们聊了:

  • 分布式系统的定义和四个核心特征
  • 从ARPANET到云原生的演进历程
  • CAP理论——分布式系统的"不可能三角"
  • 五种一致性模型及选型建议

说实话,分布式系统入门不难,难的是遇到问题时的判断力。我见过太多人背了一堆理论,一上线就抓瞎。所以这门课我会尽量多讲"我当年是怎么搞砸的",让你少走弯路。

课后思考:

你正在设计一个电商系统的库存模块。要求:库存不能超卖(强一致),但用户查询库存要快(低延迟)。你会怎么选型?是CP还是AP?用哪种一致性模型?

别急着翻答案——先自己想想。下章咱们讲分布式通信时,我会用这个例子展开。