把工作经验形成体系:以 I/O 路径为主线
核心思路:找一条主线,而不是列公司
按公司罗列只是"简历"。能讲出来的是"体系",需要一个贯穿所有经历的问题:
一次数据 I/O,从应用到存储介质,整条路径上的每一层我都做过,并且一直在把这条路径做得更短、更快、更可控。
一、按 I/O 路径分层,把经历放进坐标系
| 层次 | 经历(阶段) | 关心的问题 |
|---|---|---|
| 平台 / OS | 阶段 A:Linux kernel、ACPI | 硬件如何被发现、配置、供电,内核如何抽象它 |
| 设备驱动 | 阶段 B:WiFi driver | 设备到内核的数据面与控制面 |
| 传输 / 协议 | 阶段 C:NVMe over RDMA;阶段 D:NBD | 远程访问块设备,协议开销和延迟 |
| 分布式存储 | 阶段 D:Ceph、云数据库存储层 | 副本、一致性、故障恢复 |
| 存储引擎 | 阶段 D:RocksDB、InnoDB;阶段 E:LMDB | LSM、B+Tree、mmap,各自的读写放大与取舍 |
| 用户态 / 卸载 | 阶段 D:SPDK;阶段 F:DPDK、DPU、JBOF、自研存储系统 | 绕过内核,再把 CPU 的活卸载到硬件 |
这张图本身就是"体系",听众一看就知道你的覆盖面和位置。
二、提炼 3~4 个跨阶段反复出现的"母题"
体系的深度来自母题,而不是技术名词。可从下面选:
- 去掉拷贝和上下文切换:内核协议栈 → RDMA、SPDK、DPDK 的 kernel bypass。
- 轮询 vs 中断:吞吐、延迟、CPU 占用之间的权衡,从驱动一直到 SPDK reactor。
- 存储引擎的放大问题:LSM(RocksDB)、B+Tree(InnoDB)、mmap 单层(LMDB)的写放大、读放大、空间放大对比。三种都做过,是很少见的对比视角。
- 软件复杂度往哪放:从 CPU 软件栈 → DPU / JBOF 硬件卸载,控制面留在哪里,数据面卸载到哪里。
- 持久化与一致性:从 NVMe 的 flush 语义,到 WAL、副本一致性,每层的持久化保证是什么。
每个母题回答三件事:问题是什么 / 各层怎么解决 / 你在其中做了什么决策。
三、一条演进叙事
按时间重新讲一遍,职业路径正好是行业路径的缩影:
内核 / 驱动(理解硬件)→ 远程块存储(NVMe-oF、NBD、Ceph,理解网络存储)→ 存储引擎(RocksDB、InnoDB、LMDB,理解数据结构)→ 用户态高性能(SPDK、DPDK)→ 硬件卸载(DPU、JBOF)。
主题是:瓶颈在哪,就往哪层下沉——先从内核到用户态,再从 CPU 到专用硬件。
四、每段经历用同一个模板,且必须带数字
每段准备 1~2 个能讲 3~5 分钟的故事:
- 背景约束:规模、延迟目标、硬件条件
- 瓶颈定位:怎么测、怎么发现的(工具、指标)
- 方案与取舍:为什么选 A 不选 B,放弃了什么
- 结果:延迟从 X 降到 Y,IOPS 提升多少,CPU 占用降多少
- 反思:现在回头看会怎么改
没有数字的经历听起来像"参与过",有数字的才是"做成过"。
五、准备三个长度的版本
| 版本 | 内容 |
|---|---|
| 30 秒 | 主线一句话,加两三个最有代表性的节点 |
| 3 分钟 | 分层图 + 演进叙事 |
| 深挖版 | 针对 2~3 个最深的方向(如 NVMe-oF/RDMA、存储引擎、DPU 卸载),准备到能被追问五层"为什么" |
六、落地步骤
- 在纸上画出分层表,每格写 1~2 个关键词。
- 每段经历写下:最难的一个问题、最大的一次取舍、一个最硬的数字。
- 挑出 3 个母题,在每段经历里找对应例子,填成一张"母题 × 经历"矩阵。填得最满的行,就是核心竞争力。
- 对着矩阵练习:先口述主线,再随机抽一格展开讲。
矩阵模板
| 母题 \ 阶段 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 去掉拷贝 / 上下文切换 | ||||||
| 轮询 vs 中断 | ||||||
| 引擎放大问题 | ||||||
| 复杂度往哪放 | ||||||
| 持久化与一致性 |
最终效果:讲出来的是"我对 I/O 路径有端到端的理解,并且在多个层面做过取舍",比"我用过很多技术"有力得多。