README · universal-patterns
跨栈通用机制
这个模块研究的是:同一批底层思想,如何在 MySQL、Redis、Kafka、NGINX、Netty 这些看似无关的组件里反复复现。
四大件的四个分册按学科纵向走,本模块横向切:每章追一个思想,从它在硬件或操作系统里的第一次出现,一路追到各个技术栈组件里的产品化形态。epoll 同时是 Redis、NGINX、Netty 的地基;16 KB 数据页和 4 KB 内存页是同一个决定;redo log、AOF 和 Kafka 共用一个骨架;渐进式 rehash 和过期删除是同一种”把大代价拆碎”的手艺。认出这些复现,新组件的学习成本就从全量降到增量。
本模块适合写成的博客问题
| 问题 | 对应章节 |
|---|---|
| Redis、NGINX、Netty 的高并发是不是同一个东西? | 01 IO 多路复用与事件循环 |
| OS 页 4 KB、InnoDB 页 16 KB,这类数字怎么定的? | 02 定长块 |
| 从 CPU 缓存到 TCP 缓冲区到浏览器缓存,共享什么难题? | 03 缓存分层 |
| 为什么所有存储系统都在写日志? | 04 日志先行 |
| MySQL、Redis、Kafka 的主从复制差在哪? | 05 主从复制 |
| 哨兵、MGR、KRaft 为什么长得像? | 06 心跳、多数派与选主 |
| 16384 个槽、分库分表、partition 的共同函数是什么? | 07 分片 |
| 页表和反向代理有什么关系? | 08 间接层 |
| 线程池、连接池、内存池共享什么骨架? | 09 池化复用 |
| fork 快照、MVCC、CopyOnWriteArrayList 是一家人吗? | 10 写时复制与多版本 |
| pipeline、组提交、Kafka 攒批在摊什么成本? | 11 批处理 |
| 渐进式 rehash 和过期删除是什么手艺? | 12 惰性与摊销 |
| 学新中间件怎么只学增量? | 13 大一统总图 |
| Cookie 到 JWT、HTTP 到 HTTPS,技术怎么被病逼着迭代? | 14 需求驱动的演进链 |
| IoC、SPI、事件机制到底在解什么耦? | 15 解耦 |
| S0/S1 和 Redis 双 dict 为什么长得一样? | 16 双空间轮换 |
学习路线
| 顺序 | 章节 | 核心问题 |
|---|---|---|
| 01 | IO 多路复用与事件循环 | 一个线程怎么管十万连接 |
| 02 | 定长块 | 为什么各层都按固定块管理存储 |
| 03 | 缓存分层 | 数据停留的每一站怎么放、淘汰、保一致 |
| 04 | 日志先行 | 顺序追加怎么同时换来性能和恢复 |
| 05 | 主从复制 | 为什么复制的都是日志 |
| 06 | 心跳、多数派与选主 | 判死、投票、防脑裂 |
| 07 | 分片 | route(key) 的四种写法和配套零件 |
| 08 | 间接层 | 加一层到底加的是什么 |
| 09 | 池化复用 | 三大池的骨架和反噬 |
| 10 | 写时复制与多版本 | 先共享,谁写谁付钱 |
| 11 | 批处理 | 攒一批摊掉固定成本 |
| 12 | 惰性与摊销 | 大代价怎么拆碎或推迟 |
| 13 | 大一统总图 | 十二个思想拼成一张表 |
| 14 | 需求驱动的演进链 | 每一代技术治上一代的什么病 |
| 15 | 解耦 | IoC、SPI、事件与职责分离的谱系 |
| 16 | 双空间轮换 | S0/S1、双 dict 到蓝绿部署的同一骨架 |
本模块固定观察点
- 这个思想应对的是哪条硬件事实。
- 它在操作系统或硬件里的原型长什么样。
- 每个技术栈组件对它做了什么本地化修改,为什么。
- 它的反噬边界在哪里,什么时候不该用。
本模块读法
前置假设:读过操作系统分册的 03(内存管理)、05(文件系统)、06(IO 模型),数据结构分册的 05(哈希表)、07(B+ 树)。没读过也能跟上,每章开头会把要用的结论接过来,但推导在原章节里。
顺序建议按编号走:01 到 04 讲单机骨干(事件、块、缓存、日志),05 到 08 讲分布式(复制、选主、分片、间接层),09 到 12 讲四个横切手艺(池化、多版本、批处理、惰性),13 收总。相邻章节层层咬合:日志是复制的载体,复制进度决定选主结果,分片的槽位表又是一层间接,快照靠写时复制,rehash 忌惮快照。
每章结构一致:物理前提,机制逐个拆解,技术栈实例对照,排查清单。机制拆解是主菜,每个实例都当正主讲,不做一笔带过的目录。