Posted by zengchengjie on Monday, January 1, 0001

这份文档为你串联了对话中所有的核心架构思想。它不仅仅是知识点的堆砌,更是从底层硬件性能分布式逻辑权衡的完整思维导图。


🚀 高并发架构全景学习文档

一、 性能基石:如何压榨单机极限?

在高并发系统中,单机性能的瓶颈通常不在 CPU,而在 I/O(磁盘与网络)

1. 顺序写(Sequential I/O)

  • 原理: 机械硬盘(HDD)省去了物理寻道和旋转延迟;固态硬盘(SSD)减少了块擦除和垃圾回收(GC)。
  • 共性应用:
    • Kafka: 日志追加(Append-only Log)。
    • Prometheus/TSDB: 时序数据分块顺序落盘。
    • MySQL: Redo Log 顺序写保证事务持久化(WAL技术)。
  • 结论: 顺序写比随机写快成百上千倍。

2. 零拷贝(Zero Copy)

  • 原理: 消除数据从内核缓冲区到用户虚拟内存的昂贵拷贝。
  • 技术实现:
    • sendfile (Kafka/Nginx): 数据直接在内核中从磁盘传向网卡。
    • mmap (RocketMQ): 建立内存映射,像读写内存一样操作文件。
    • Netty: 利用堆外内存(Direct Memory)避开 JVM 拷贝。

二、 分布式灵魂:CAP 定理与 P 的抉择

当系统从单机走向集群,网络分区(P) 是无法逃避的现实。

1. 核心定义

  • C (Consistency) 一致性: 所有节点数据实时同步,读出的数据必须是最新的。
  • A (Availability) 可用性: 只要收到请求,必须给出响应,哪怕是旧数据。
  • P (Partition Tolerance) 分区容错性: 必须项。指在网络断开(分区)时,系统仍能运行。

2. 注册中心门派对比

  • CP 派(准): Zookeeper / Consul。利用 Raft/ZAB 协议,满足“过半数”原则。如果网络断开导致无法达成共识,系统宁可报错(不可用)也要保证数据对齐。
  • AP 派(快): Eureka。节点间平等,即便数据对不齐,也优先返回地址信息,靠客户端重试来容错。
  • 变色龙: Nacos。支持手动切换 AP/CP 模式,适配不同业务。

三、 Kafka 深度剖析:高并发的蓄水池

Kafka 不仅是消息队列,更是分布式架构设计的缩影。

1. ISR 机制(In-Sync Replicas)

  • 本质: Leader 维护的一个“同步正常的副本名单”。
  • 权衡:
    • acks=all (倾向 CP): 必须等 ISR 全员确认才算成功,数据最安全。
    • acks=1 (倾向 AP): Leader 写完就回,性能最高。
  • 分片(Partition): 水平扩展的单位。吞吐量 = 单机性能 × 分区数

2. 生产者优化策略

  • 幂等性(Idempotence): 保证单分区、单会话内消息不重复。
  • 飞行请求控制: max.in.flight.requests.per.connection 建议设为 5。这是性能并发与顺序保证的最佳平衡点。

四、 Redis 集群:内存级的并发之王

  • 选型: 典型 AP 架构。为了极致性能,采用异步同步机制。
  • 故障转移: 同样采用“民主投票”机制。只要剩下的 Master 满足过半数(Quorum),即可选出新主。
  • 共性: Redis 的投票是为了高可用(A),而不是为了数据的强一致(C)

五、 架构师视角:知识串联(面试话术)

当被问到高并发时,你可以按照这个逻辑闭环回答:

  1. 宏观: 利用 Kafka 做削峰填谷,将瞬时的随机压力转化为顺序写日志存储。
  2. 集群: 注册中心(如 Nacos)负责管理节点,在 P 发生时根据业务选择 APCP 模式。
  3. 单机: 内部通过 JVM 多线程 压榨多核 CPU,并利用 Netty 零拷贝 提升 I/O 效率。
  4. 存储: 核心数据落库,热点数据丢进 Redis,利用其异步主从结构支撑百万级 QPS。

📥 学习建议

  • 理解“过半数原则”: 这是所有 CP 系统(ZK, Raft, Kafka min.isr)防止“脑裂”的数学底牌。
  • 区分“手段”与“目的”: 零拷贝和顺序写是手段,提高吞吐量是目的;投票选举是手段,提高可用性是目的。

这份文档将你原本零散的知识点,按照**“单机 I/O -> 分布式协议 -> 具体组件实现”**的维度进行了升华。面试时,这种从宏观到微观的视角会非常有杀伤力。