使用场景
按你正在构建的系统类型查找模式。
Web API 与微服务
构建 REST/gRPC 服务?这些模式让它在负载下保持可靠。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| 防护下游故障 | 熔断器 + 指数退避重试 | Netflix Hystrix 包装每个 HTTP 客户端调用 |
| API 限流 | 限流器 | Stripe 允许 25 个突发,以 25/秒补充 |
| 请求中间件(认证、日志、追踪) | 中间件链 | gRPC 拦截器,Koa.js 洋葱模型 |
| 服务发现 | 注册表 | Consul、etcd 服务注册 |
| 节点间负载分配 | 一致性哈希 | HAProxy、groupcache 键分布 |
| 防止过载 | 背压 + 批处理 | Node.js stream piping,Kafka 消费者组 |
数据库与存储
PostgreSQL、Redis、LevelDB 以及所有严肃存储引擎背后的模式。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| 崩溃恢复 | 预写日志 + 检查点 | PostgreSQL:WAL + 定期 checkpoint |
| 写密集负载 | LSM 树 + 布隆过滤器 | LevelDB/RocksDB:memtable → SSTable + bloom 跳过 |
| 磁盘范围查询 | B+ 树 | PostgreSQL btree 索引,SQLite |
| 并发读写 | MVCC | PostgreSQL 元组版本化,etcd 修订版 |
| 数据完整性验证 | Merkle 树 | ZFS 块校验和,Git 对象存储 |
| 有序键合并 | 合并迭代器 + 最小堆 | LevelDB compaction |
| 删除但不立即移除 | 墓碑 | Cassandra tombstone,LevelDB 删除标记 |
| 内存有序集合 | 跳表 | Redis ZADD/ZRANGE 有序集合 |
| 内存缓存 | LRU 缓存 | Redis LRU 淘汰,Go groupcache |
| 无时钟事件排序 | 逻辑时钟 | etcd Raft log,DynamoDB 版本向量 |
前端与 UI 框架
React、Vue 和浏览器引擎在每一帧中使用这些模式。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| Virtual DOM diffing | 差异/补丁 + 位掩码 | React reconciler:diff 树,应用最小补丁 |
| 响应式渲染 | 协作调度 | React Scheduler:每 5ms 让出以保持 16ms 内 |
| 帧安全状态更新 | 双缓冲 | React Fiber:workInProgress ↔ current 树交换 |
| 避免不必要的重渲染 | 脏标记 | React shouldComponentUpdate,Chromium layout |
| 状态管理 | 观察者 + 状态机 | Redux subscribe,XState 有限状态 |
| 优先级任务调度 | 最小堆 | React Scheduler 优先级队列 |
分布式系统
跨多台机器的系统模式。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| 共识日志 | 预写日志 + 逻辑时钟 | etcd Raft:带 term/index 的追加日志 |
| 分区容错路由 | 一致性哈希 | Amazon DynamoDB,Cassandra ring |
| 复制状态 | 状态机 + 预写日志 | Raft:通过日志复制状态机 |
| 无冲突复制 | 逻辑时钟 + 墓碑 | CRDT,Dynamo 风格 last-write-wins |
| 数据同步 | Merkle 树 | Cassandra 反熵修复 |
| 消息驱动架构 | Actor 模型 + 背压 | Akka cluster,Erlang/OTP |
| 构建/部署流水线 | 依赖图 + 批处理 | Cargo 构建图,pnpm workspace |
运行时与内存管理
Go、CPython、V8 和游戏引擎如何管理内存和执行。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| 减少 GC 压力 | 对象池 + 空闲链表 | Go sync.Pool,Linux SLUB 分配器 |
| 阶段性分配 | Arena 分配器 | Rust bumpalo,Go arena(实验性) |
| 确定性清理 | 引用计数 | CPython refcount,Rust Rc/Arc |
| 字符串去重 | 驻留 + 享元 | Rust 编译器符号驻留,Python 小整数缓存 |
| 高效克隆 | 写时复制 | Linux fork(),Rust Cow<T> |
| 跨核工作分配 | 工作窃取 | Go runtime P/M/G 调度器,Tokio |
| I/O 多路复用 | 事件循环 + 环形缓冲区 | libuv (Node.js),Redis 单线程 |
| 线程安全计数器 | 信号量 | Linux 内核信号量,Go x/sync |
编译器与语言工具
LLVM、V8、rustc 以及 Vue/React 编译器中使用的模式。
| 场景 | 模式 | 实际案例 |
|---|---|---|
| AST 遍历 | 访问者 | LLVM InstVisitor,Vue 编译器转换 |
| 动态分发 | 虚函数表 | CPython tp_* slots,Rust dyn Trait |
| 符号表 | 驻留 + 前缀树 | rustc Symbol interning |
| IR 转换 | 迭代器 + 差异/补丁 | Rust Iterator 适配器,tree-sitter edits |
| 类型表示 | 标签联合体 | V8 tagged pointers,PyTorch TensorImpl |
| 插件系统 | 注册表 + 中间件链 | Babel 插件,webpack loaders |
网络与协议
| 场景 | 模式 | 实际案例 |
|---|---|---|
| 连接状态追踪 | 状态机 | Linux TCP 状态机 (SYN_SENT → ESTABLISHED → ...) |
| IP 路由 | 前缀树 | Linux LC-trie IPv4 FIB |
| 报文缓冲 | 环形缓冲区 | Linux sk_buff,DPDK ring |
| 流控 | 背压 + 限流器 | TCP 流控,Nginx limit_req |
| DNS 解析 | 前缀树 + LRU 缓存 | 域名查找 + 响应缓存 |