1. "分布式"是什么?为什么要搞分布式?

🏪 类比——奶茶店扩张:
小店阶段:一家店搞定一切(单机)——顾客少,够用。
生意火爆:一家店忙不过来 → 开分店(多台服务器)→ 这就是"分布式":多台电脑协同完成工作。
分店多了问题也来了:顾客去哪家店(负载均衡)?总库存怎么同步(数据一致性)?一家店关门其他店怎么顶上(高可用)?

分布式系统:多台计算机通过网络协作,对外像一个整体。

为什么要分布式(三个原因):

🎯 记住

  • 分布式 = 多台机器协作干一件事(对外像一台)
  • 动机:扛不住(扩展)、怕宕机(高可用)、要就近(延迟)
  • 微服务 = 一种分布式架构:把一个大系统拆成很多小服务(订单/用户/支付各一个服务)

2. 为什么分布式"难"?(新手必懂,面试必问)

单机时代:代码顺序执行、数据共享内存、出错好排查。分布式后三大难题:

  1. 网络不可靠:两台机器通信可能延迟、丢包、超时——"它到底处理了没有?"不知道(网络分区)
  2. 数据一致性:用户数据在 A 机器改了,B 机器还是旧的——什么时候同步?谁说了算?
  3. 故障难排查:一个请求经过 5 个服务,哪个慢了?哪个错了?(所以要链路追踪)
📞 类比——异地恋式协作:两个服务协作就像异地恋:
发消息(调用)可能对方没收到(超时)、收到但回复丢了(幂等问题)、
两个人对"什么时候见面"的记忆不一致(数据不一致)——都得靠"约定"(协议)来保证。

🎯 记住

  • 分布式的核心矛盾:网络会出问题 + 数据要一致
  • 所以有了 CAP 定理(一致性/可用性/分区容错三选二)、分布式事务、一致性协议——都是在解决这俩
  • 面试答"分布式难点":网络不可靠 + 一致性 + 运维复杂度,展开讲就是深度

3. 分布式核心名词速记(先混脸熟)

名词 大白话
节点(Node)参与协作的一台机器/一个服务
RPC像调本地方法一样调另一台机器的方法(Dubbo/gRPC)
注册中心服务们的"通讯录"(Nacos/ZooKeeper)——谁在哪,谁挂了
负载均衡把请求分给多台机器(轮流/按权重)
熔断/降级/限流保护系统:下游坏了快速失败(熔断)、砍非核心功能(降级)、挡流量(限流)
分布式事务一次操作改多个服务的数据,要全成功或全回滚(很难,有 TCC/Saga 等方案)
分布式锁多台机器互斥访问同一资源(Redis 锁/ZK 锁)
幂等同一操作重复执行结果一样(网络重试时的保命符)
CAP一致性/可用性/分区容错——网络故障时只能三选二(下节详解)

🎯 学习顺序建议

  • 先学懂单机(本网站前面所有模块)→ 再学分布式(先 RPC 和注册中心,再事务和一致性)
  • 分布式是"面试进阶题":中小厂问得少,大厂必问——按自己的目标来

4. 分布式学习路径

  1. 本篇:为什么分布式 + 难点直觉 ✅
  2. 基础理论:CAP/BASE/幂等——理论基石
  3. RPC 原理:服务之间怎么调用(Dubbo/gRPC)
  4. 服务治理:注册发现、负载均衡、熔断限流
  5. 分布式事务:2PC/TCC/Saga——重难点
  6. 一致性协议:Raft/ZAB——终极难度

🎯 常见误区

  • 误区 1:"分布式 = 微服务"——微服务只是分布式的一种组织方式,分布式还包括集群/多机房等
  • 误区 2:"机器越多越好"——分布式有协调成本(网络、一致性),小系统别过度设计
  • 误区 3:"CAP 平时也要三选二"——只有发生网络分区时才需要选,平时三者可兼得

🎤 常见面试追问

  1. 分布式系统是什么?——多台机器通过网络协作、对外像一个整体。动机:性能不够(扩展)、怕宕机(高可用)、要就近(延迟)。
  2. 为什么分布式难?——网络不可靠(超时/丢包/分区)+ 数据一致性(同步谁说了算)+ 故障难排查(跨服务链路)。CAP 定理就是讲这个取舍。
  3. 微服务和分布式的区别?——微服务是"组织架构"(把系统拆成小服务独立部署);分布式是"运行形态"(多机协作)。微服务天然是分布式,分布式不一定是微服务(集群也是)。

📖 名词解释(本页术语)

术语 大白话解释
分布式系统多台机器通过网络协作完成工作(奶茶店开分店)。
节点(Node)参与协作的一台机器/一个服务实例。
微服务把大系统拆成小服务(订单/用户/支付),各自独立部署演进。
水平扩展加机器扛流量(vs 垂直扩展=换更强的单机)。分布式的主要目的。
高可用(HA)系统不宕机的能力:多副本、故障自动切换。
网络分区节点间网络断了(部分节点失联)——分布式最难处理的故障形态。
一致性 / 可用性一致性 = 各节点数据相同;可用性 = 请求总能有响应。分区时二选一(CAP)。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。