第 7 天学习笔记:分布式核心

4 阅读4分钟

第 7 天学习笔记:分布式核心

今日主题:分布式核心原理


一、分布式核心理论

1. CAP 理论

  • C(一致性) :所有节点同一时间看到的数据一致。
  • A(可用性) :任何节点故障,系统仍能正常提供服务。
  • P(分区容错) :网络分区时,系统仍能工作。

核心结论:分布式系统必须保证 P,只能在 AP 或 CP 中选择。

  • 互联网场景:优先 AP(高可用),如 Redis、Eureka。
  • 金融场景:优先 CP(强一致),如 ZooKeeper、Etcd。

2. BASE 理论(AP 系统的妥协方案)

  • 基本可用:故障时允许服务降级,核心功能可用。
  • 软状态:允许中间状态,无需实时一致。
  • 最终一致:经过一段时间后,数据自动同步一致。

二、分布式锁(面试高频,重中之重)

1. 核心作用

分布式环境下,保证同一时间只有一个节点能操作共享资源,避免超卖、重复扣款等问题。

2. Redis 分布式锁(最常用)

  • 加锁SET lock_key unique_value NX PX 30000

    • NX:仅当 key 不存在时设置。
    • PX:设置过期时间(30 秒),防止死锁。
    • unique_value:唯一标识(如 UUID),防止误删他人锁。
  • 解锁:通过 Lua 脚本原子执行 “判断锁归属 + 删除锁”。

  • 防死锁:设置过期时间 + 看门狗自动续期(Redisson 内置)。

  • 主从切换锁丢失:通过 RedLock 红锁解决(多节点加锁,半数以上成功才算获取锁)。

3. ZooKeeper 分布式锁(强一致性)

  • 原理:临时有序节点 + Watcher 机制。

  • 流程:

    1. 节点创建临时有序节点。
    2. 判断自己是否是最小节点,是则获取锁。
    3. 否则监听前一个节点的删除事件。
  • 优点:强一致,无锁丢失;缺点:性能低于 Redis。

4. 数据库分布式锁(低并发场景)

  • 悲观锁:SELECT ... FOR UPDATE(行锁)。
  • 乐观锁:通过 version 字段判断,更新时 WHERE version = ?

三、分布式事务(面试难点)

1. 2PC(两阶段提交)

  • 准备阶段:所有参与者执行事务但不提交,返回 “成功 / 失败”。
  • 提交阶段:全部成功则提交,任一失败则回滚。
  • 缺点:阻塞、协调者单点、性能差,不适合高并发。

2. TCC(补偿事务,互联网首选)

  • Try:预留资源(如冻结库存)。
  • Confirm:确认执行(如扣减库存)。
  • Cancel:取消回滚(如解冻库存)。
  • 优点:高可用、高性能;缺点:开发成本高,需手动编写补偿逻辑。

3. 本地消息表 / RocketMQ 事务消息

  • 核心:本地事务 + 消息队列,实现最终一致性。

  • 流程:

    1. 本地事务(创建订单)+ 插入待发送消息。
    2. 定时任务发送消息到 MQ。
    3. 消费 MQ 执行库存扣减,消费成功后删除本地消息。
  • 优点:开发成本低,适合中小项目。


四、高可用三件套(微服务核心)

1. 限流

  • 目的:保护系统不被流量打崩。

  • 常用算法:

    • 令牌桶:支持突发流量,主流选择(Sentinel、Nginx)。
    • 漏桶:匀速处理请求。
    • 滑动窗口:解决临界值问题。

2. 熔断

  • 原理:下游服务失败率达到阈值,直接返回兜底数据,不再调用。
  • 三状态:闭合 → 打开 → 半开。
  • 目的:防止服务雪崩。

3. 降级

  • 原理:服务压力过大时,主动关闭非核心功能,保核心功能。
  • 与熔断区别:熔断因下游故障,降级因自身过载。

五、RPC 原理(分布式通信基础)

1. 执行流程

  1. 客户端调用远程方法。
  2. 代理层序列化请求(对象→二进制)。
  3. 网络传输(TCP/HTTP)。
  4. 服务端反序列化,执行方法。
  5. 序列化结果返回客户端。

2. 核心组件

  • 代理:封装网络细节。
  • 序列化:Protobuf、JSON、Hessian。
  • 注册中心:Nacos、Eureka(服务发现)。
  • 负载均衡:轮询、加权、一致性哈希。

3. 主流框架

  • Dubbo:高性能,国内主流。
  • OpenFeign:HTTP,简单易用。
  • gRPC:跨语言,HTTP/2。

六、一致性算法(Raft,简化版 Paxos)

  • 角色:Leader、Follower、Candidate。

  • 流程:

    1. 选主:超时未收到心跳,转为 Candidate 发起投票。
    2. 日志复制:Leader 同步日志到 Follower,过半确认即提交。
  • 应用:Nacos、Etcd 均基于 Raft。


七、第 7 天面试题

  1. CAP 和 BASE 的核心内容及实际选择。
  2. Redis 分布式锁的实现及防死锁、防误删方案。
  3. 2PC、TCC、消息方案的区别及适用场景。
  4. 限流、熔断、降级的作用及落地方式。
  5. RPC 执行流程及核心组件。
  6. Raft 算法的角色与主流程。