Skip to content

模式如何协作

这些模式不是孤立存在的。最有价值的洞察是生产系统如何将它们组合在一起。

交互式探索 — 点击任意系统查看它使用了哪些模式及其原因:

组合链路

最有价值的洞察不是有哪些模式存在 — 而是它们在真实系统中如何链式组合

React Reconciler:从标志位到帧

text
Bitmask          → 标志位编码需要做什么工作

Dirty Flag       → 跳过未变更的子树

Min Heap         → 先挑最高优先级的工作

Cooperative Scheduling → 每 5ms 让出避免卡顿

Diff / Patch     → 计算最小树变更

Double Buffering → 构建 workInProgress 树,原子交换

Batch Processing → 一次提交刷新所有状态更新

PostgreSQL:从写入到恢复

text
Write-Ahead Log  → 每次修改先写日志再应用

Checkpointing    → 定期快照限制崩溃恢复时的重放量

B+ Tree          → 磁盘优化索引支持范围查询

MVCC             → 读者看到一致快照,永不阻塞写者

LRU Cache        → 缓冲池将热页面保持在内存中

Bloom Filter     → 跳过对不存在键的索引查找

Kafka Broker:从生产者到消费者

text
Batch Processing → 累积消息,批量 fsync

Write-Ahead Log  → 磁盘上的追加日志段

Ring Buffer      → 固定大小 I/O 事件队列

Backpressure     → 慢消费者信号生产者节流

Consistent Hashing → 跨 broker 分区分配

Tombstone        → 日志压缩移除过期记录

Go Runtime:调度 + 内存

text
Work Stealing    → 空闲 P 从忙碌 P 的队列偷取 goroutine

Semaphore        → GOMAXPROCS 限制并发 OS 线程

Object Pool      → sync.Pool 回收频繁分配的对象

Free List        → mspan 追踪 size class 中的空闲槽位

Arena Allocator  → 栈帧以 bump pointer 方式分配

Copy-on-Write    → slice append 容量不足时才复制

全局视角

理解单个模式有用。理解它们如何组合才是区分高级工程师和初级工程师的关键。

当你遇到性能问题时,你不会想"我需要一个 bitmask"。你会想"我需要低成本追踪多个状态(bitmask)、跳过未变更的部分(subtree flags)、增量处理工作(cooperative scheduling)、优先处理紧急任务(min heap)、在热路径上避免分配(double buffering)。"

这就是 React 团队构建的。这就是 Redis、Go、Linux、PostgreSQL 和 Kafka 都在展示的。相同的模式以不同的配置重新组合,解决不同的问题。

总结:跨系统的模式分布

模式ReactRedisGo RuntimeLinuxPostgreSQLKafka
位掩码
最小堆
协作调度
差异/补丁
双缓冲
批处理
脏标记
观察者
跳表
LRU 缓存
Trie 前缀树
布隆过滤器
工作窃取
空闲链表
信号量
对象池
享元
限流器
Arena 分配器
状态机
环形缓冲区
背压
虚函数表
引用计数
写时复制
墓碑
MVCC
预写日志
B+ 树
检查点
事件循环
迭代器
标签联合体
指数退避重试
一致性哈希

其他系统中的锚点模式

剩余 11 个模式主要存在于上述六大系统之外:

模式主要系统
LSM 树LevelDB、RocksDB — 现代 KV 存储的核心写入引擎
合并迭代器LevelDB、RocksDB — 压缩时的 K 路归并
逻辑时钟etcd(Raft term/index)、LevelDB(序列号)
Merkle 树Git(对象完整性校验)、ZFS(块校验和)
Actor 模型Erlang/OTP、Akka — 消息传递并发
熔断器Netflix Hystrix、gobreaker — 微服务弹性
中间件链gRPC-Go 拦截器、Koa.js 洋葱模型
注册表TensorFlow(算子注册)、gRPC-Go(服务注册)
依赖图Cargo(构建解析)、pnpm(工作区调度)
访问者LLVM(InstVisitor)、Vue 编译器(AST 转换)
驻留rustc(符号驻留)、CPython(字符串/整数缓存)

基于 MIT 许可证发布。