IM 学习路线:以 OpenIM 为参照从零走向高级工程实践
主线与当前入口
本系列围绕一个虚构的教学 IM 展开,主参照为 OpenIM。项目选择、固定版本、已核对源码与教学边界见IM 主项目。组织、用户、群组和消息均为虚构数据。
14 卷提供完整的语言与计算机知识体系;实际按 S0–S7 跨卷递进。每个阶段依次经历“IM 需求 → 基础理论 → 小模型与练习 → 源码对照 → 失败变式与取舍”。只在相关前置已经讲清时深入上游代码。
当前已完成 168 章:01.01–01.12、02.01–02.12、03.01–03.12、04.01–04.12、05.01–05.12、06.01–06.12、07.01–07.12、08.01–08.12、09.01–09.12、10.01–10.12、11.01–11.12、12.01–12.12、13.01–13.12、14.01–14.12。前两章原案例作为基础补充,其余按 IM 主线展开;正文与设计的区别见编写与能力验收。14 卷全部 168 个单元已有具体 IM 练习与验收目标,长篇正文已齐,学习与个人实践仍按先修关系推进。
| 阶段 | 从 IM 需求出发 | 阶段成果 |
|---|---|---|
| S0 程序与规则 | 一条消息包含什么,怎样判断输入是否合法? | 可解释的消息校验程序与边界表 |
| S1 数据与本地工具 | 如何组织多条消息、会话和本地历史? | P1 本地会话与消息记录工具 |
| S2 进程与网络 | 两个客户端怎样建立连接并交换消息? | P2 的 HTTP 查询与内存单聊版本 |
| S3 数据与可信业务 | 谁能发给谁,消息如何保存和查询? | P2 的身份、会话权限与持久历史版本 |
| S4 原理与性能 | 慢接收方、大群和高并发怎样消耗资源? | 群聊扇出、队列与内存诊断证据 |
| S5 可靠性与同步 | 重复、断线、多设备和节点失败怎样恢复? | P3 可靠消息、离线补拉与多端同步 |
| S6 运行与交付 | 长连接网关怎样扩容、发布和恢复? | P4 可运行 IM 与故障演练说明 |
| S7 架构与长期维护 | 规模、历史保留、旧客户端和成本怎样影响方案? | P5 IM 架构答辩、迁移与接手文档 |
| AI 扩展 | 如何在聊天中提供有权限、有证据的助手? | 独立评测的资料助手与受控工具 |
当前可读的起步顺序
| 次序 | 阅读材料 | 在 IM 中迁移的练习 | 内容状态 |
|---|---|---|---|
| 1 | 01.01 程序与工具链 | 输出虚构发送者、接收者和一段消息 | 基础长篇已完成,原案例待逐章适配 |
| 2 | 10.03 Git 第一至四节 | 在个人独立目录保存并解释规则修改 | 已完成;会使用文件与终端即可学 |
| 3 | 01.02 类型与数据 | 区分文本、ID、字节长度、计数和缺失 | 基础长篇已完成 |
| 4 | 01.03 基础与综合部分 | 用分支、循环和普通函数表达消息规则 | 已完成;递归与闭包第二遍深化 |
| 5 | 10.01 可验证需求 | 写规则、决策表、失败状态和独立预期 | 已完成;不要求测试框架 |
| 6 | 01.04 数组、切片与文本 | 消息列表、复制与共享、UTF-8和预览边界 | 已完成;共享关系分第二遍掌握 |
| 7 | 01.05 map、结构体与指针 | 消息身份、按键查找、复制与修改责任 | 已完成,接续语言主线 |
| 8 | 01.06 方法与接口 | 将会话存储抽为读取、写入能力;第二遍深化 typed nil 与断言 | 已完成,错误与文件实现后置 |
| 9 | 01.07 错误与资源生命周期 | 用错误身份、defer 与 I/O 追踪本地历史读取和关闭责任 | 已完成,文件格式与时间仍后置 |
| 10 | 01.08 常用标准库协作 | 用 JSON、时间、行边界、上限和 flag 组织本地历史 | 已完成,HTTP 与网络仍后置 |
| 11 | 01.09 包设计与依赖演进 | 拆开消息规则、文件适配和命令入口,并检查兼容边界 | 已完成;测试与完整 CLI 后续展开 |
| 12 | 10.02 测试基本方法 | 从需求预期写出 Go 测试,检查边界、错误身份与失败后状态 | 已完成;真实结果由学习者记录 |
| 13 | 01.12 完整命令行工具 | 组合本地历史的校验、列表、导出、错误码和个人验证 | 已完成;实际运行由学习者记录 |
| 14 | 10.04 测试替身与设计 | 用可控存储与时间测试本地工具,区分替身与真实文件证据 | 已完成;接在 01.12 后学习 |
| 15 | 10.05 重构与模块边界 | 按外部合同小步拆分本地工具,保留错误码、输出和文件行为 | 已完成;接在 10.04 后学习 |
| 16 | 10.06 代码审查与合并 | 审查上限变更的差异和证据,推演三方合并及冲突 | 已完成;接在 10.03 与 10.05 后学习 |
| 17 | 02.01 离散对象与成本 | 先学对象与单位,再推导计数和增长;概率与证明第二遍深化 | 已完成,仅需 01.01–01.04 |
| 18 | 02.02 线性结构 | 用切片、链表、栈、队列和环形缓冲推导有限发送队列 | 已完成;需先会结构体、指针与成本模型 |
| 19 | 02.03 搜索与循环不变量 | 在有序消息键中定位下界、上界与补拉候选 | 已完成;排序和实际同步协议另行学习 |
| 20 | 02.04 哈希与集合 | 用复合消息键和有限窗口解释冲突、负载与本地判重 | 已完成;跨重启与分布式幂等后置 |
| 21 | 02.05 排序与分治 | 用 Seq 与消息 ID 定义可复核顺序,比较稳定性与成本 | 已完成;外部排序只讲入口 |
| 22 | 03.01 数据与存储层次 | 数据表示、字节账目、地址直觉与缓冲预算 | 已完成,不以 Go 指针或数学卷为前置 |
| 23 | 03.02 进程与系统调用 | 沿本地历史检查命令解释进程、用户/内核边界、文件 I/O 与退出 | 已完成;承接 03.01 和 S1 本地工具 |
| 24 | 03.03 Linux 进程与资源 | 用 PID、cwd、环境、描述符和信号解释本地历史工具的运行现场 | 已完成;承接 03.02 |
| 25 | 03.04 CPU 调度 | 以单核模型区分 CPU 等待和 I/O 等待,再迁移到连接与群聊负载 | 已完成;承接 03.03 |
| 26 | 04.01 应用通信与分层 | 画出两用户一条消息的分层路径,计算传输/传播/排队时延 | 已完成;承接 03.01–03.04 |
| 27 | 04.02 地址、名称与路由入口 | 区分域名、IP、端口和 socket,再定位 DNS、连接与 404 的失败层次 | 已完成;承接 04.01 |
| 28 | 04.03 HTTP 与 WebSocket 入门 | 从只读历史请求逐步进入 101 升级、帧与应用确认 | 已完成;承接 04.02 |
| 29 | 05.01 并发任务与生命周期 | 由固定小批量解释启动、等待、结果和资源归属 | 已完成;承接 03.04 和 04.03 |
| 30 | 05.02 同步原语 | 用一把锁保护会话判重与列表更新,比较读快照、任务等待和条件等待 | 已完成;承接 05.01 |
| 31 | 05.03 channel 与取消 | 以容量 2 的发送队列解释关闭、取消、期限和满队列政策 | 已完成;承接 05.01–05.02 |
| 32 | 09.01 需求与应用边界 | 定义读历史与发送的可信主体、输入状态和内存受理确认点 | 已完成;承接 04.03、05.03 和 10.01 |
| 33 | 09.02 HTTP 接口设计 | 固定读历史与发消息的分页、状态、错误体和三种限额 | 已完成;承接 09.01 |
| 34 | 09.03 程序组织 | 按 handler、应用、领域、内存适配器追踪两条接口的状态与错误 | 已完成;承接 09.02 |
| 35 | 09.04 请求处理链 | 沿一次 POST 推演中间件、取消、panic、响应提交与未知结果 | 已完成;承接 09.03 |
| 36 | 11.01 业务结果与测量 | 给内存受理、未来持久/设备/阅读分别定义分母、时间窗和证据 | 已完成;承接 09.01–09.04 |
| 37 | 11.02 分布与统计 | 手算均值/分位数/直方图,辨别小样本和平均 P99 的误导 | 已完成;承接 11.01 |
| 38 | 11.03 日志、指标与 Trace | 沿内存受理链设计脱敏日志、低基数指标和可采样 Span 树 | 已完成;承接 11.01–11.02 |
| 39 | 10.09 持续集成与制品 | 为内存版 IM 的上限变更画出提交、分层检查、制品身份与失败反馈 | 已完成;承接 10.01–10.06 和 S2 业务合同 |
| 40 | 06.01 关系模型与业务身份 | 为用户、会话、成员和消息画四张教学表,解释键、约束、NULL 与文档对照 | 已完成;承接 S2 的内存受理边界 |
| 41 | 06.02 SQL 从读写到复杂查询 | 用同一组纸上消息手算筛选、连接、聚合、稳定分页和权限边界 | 已完成;承接 06.01 |
| 42 | 06.03 模式设计与演进 | 由昵称改名与退群重入解释冗余、依赖和分阶段迁移 | 已完成;承接 06.01–06.02 |
| 43 | 06.10 Go 数据访问 | 沿历史查询认识驱动、连接池、扫描、NULL、Context 和两种游标资源 | 已完成;承接 06.01–06.03 |
| 44 | 06.07 事务与并发异常 | 画成员退群与消息提交交错,区分事务、隔离和未知提交 | 已完成;承接 06.10 的 Tx 入口 |
| 45 | 09.05 数据访问与迁移 | 把教学 SQL 查询/提交、兼容迁移与固定 OpenIM 入队/消费源码对照 | 已完成;承接 06.01–06.03、06.10、06.07 |
| 46 | 09.06 浏览器与客户端边界 | 用表单、Cookie/Session、同源/CORS、CSRF 和 WebSocket 解释浏览器 IM 风险 | 已完成;承接 09.01–09.05 与 04.03 |
| 47 | 09.07 认证与授权 | 区分登录主体与会话对象权限,推演退群、注销和多设备撤销 | 已完成;承接 09.05–09.06 |
| 48 | 09.08 输入与输出防护 | 沿正文、附件和链接的数据流分别处理上限、SQL、HTML、文件、SSRF 与日志 | 已完成;承接 06.02、09.06–09.07 |
| 49 | 09.11 应用测试与交付 | 把当前 6 B HTTP 合同与待审 R9 分开,设计 httptest、授权/故障负例和 CI 证据 | 已完成;承接 09.01–09.08、10.02、10.09 |
| 50 | 04.04 可靠传输 | 纸上推演 TCP 字节序号、累计 ACK、重传与窗口,区分业务消息确认 | 已完成;承接 04.01–04.03,供完整服务前回补网络机制 |
| 51 | 04.05 TCP 与长连接生命周期 | 画握手、FIN/RST、心跳和重连时序,区分连接存活与用户在线 | 已完成;承接 04.04 |
| 52 | 04.06 流量与拥塞控制 | 用 rwnd/cwnd、BDP 与有限队列区分慢设备和路径拥塞 | 已完成;承接 04.04–04.05 |
| 53 | 04.07 TLS 与身份 | 沿 HTTPS/WSS 两跳解释证书名称、信任链、代理终止和应用身份边界 | 已完成;承接 04.02–04.06 |
| 54 | 09.12 完整服务项目 | 分阶段组合身份、历史、发送、在线尝试、故障和证据;v1/v2/R9 分清 | 已完成静态课程;承接 S3 应用/数据库与 04.04–04.07 |
| 55 | 02.06 树与有序索引 | 以 c-a 的 seq 构造 BST、范围、退化与多路页树,建立数据库索引前置 | 已完成;承接 02.01–02.05 与 06.02 |
| 56 | 02.07 堆与优先调度 | 用四任务上浮/下沉与五会话 Top-K 推导有限优先队列和调度边界 | 已完成;承接 02.01–02.02 与 02.06 |
| 57 | 02.08 图与依赖遍历 | 用六用户邻接表与五步骤依赖图推导 BFS、DFS、环和拓扑 | 已完成;承接 02.02、02.04 与 02.07 |
| 58 | 03.05 虚拟内存 | 用 4 KiB 页地址翻译和连接预算区分虚拟范围、驻留、TLB 与缺页 | 已完成;承接 03.01–03.04 |
| 59 | 03.06 分配与映射 | 沿消息缓冲引用、GC、复用和映射解释 RSS 与 Go 堆统计 | 已完成;承接 01.04–01.05 与 03.05 |
| 60 | 03.07 文件与目录 | 用日志轮转推导路径、inode、共享偏移、改名和删除后打开对象 | 已完成;承接 03.02–03.03 与 03.06 |
| 61 | 03.08 持久化机制 | 用本地历史 V1/V2 与 C0–C4 崩溃点区分写入、名称替换和耐久 | 已完成;承接 03.06–03.07 与 01.12 |
| 62 | 03.09 I/O 与事件通知 | 用两连接就绪和七字节玩具帧区分短读写、完整消息与业务确认 | 已完成;承接 03.03–03.04 与 04.04 |
| 63 | 03.10 系统诊断 | 用合成历史查询慢事件区分进程、CPU、内存、设备和 socket 证据 | 已完成;承接 03.03–03.09 与 11.01–11.03 |
| 64 | 05.04 Go 内存模型 | 用两字段会话状态推导 data race、happens-before、锁/channel 与 atomic 边界 | 已完成;承接 05.01–05.03 与 03.05 |
| 65 | 05.05 Go 调度模型 | 用 P=1 时间线解释 G/M/P、阻塞系统调用与 netpoll 等待 | 已完成;承接 03.04、03.09 与 05.01–05.04 |
| 66 | 05.06 内存生命周期 | 用 8 字节预览和 64 KiB 缓冲解释切片引用、逃逸与对象保留 | 已完成;承接 01.04–01.05、03.06 与 05.04–05.05 |
| 67 | 05.07 Go 垃圾回收 | 用群聊扇出区分分配率、存活集、GOGC 目标与时延证据 | 已完成;承接 05.05–05.06 与 11.02 |
| 68 | 05.08 并发组合 | 用 A–F 六目标和 2 worker/3 槽队列推导接纳、汇聚、取消与按键串行 | 已完成;承接 05.03–05.07 |
| 69 | 05.09 并发验证 | 用容量 1 队列的发送/取消交错设计门闩、race 与任务退出证据 | 已完成;承接 05.03–05.04、05.08 与 10.02 |
| 70 | 05.10 性能工具与解释 | 用大群 P95 合成症状选择 CPU/heap/mutex/block profile 与 execution trace | 已完成;承接 05.07–05.09 与 03.10 |
| 71 | 05.11 优化边界 | 用 10000 目标纸上字节账评审共享、Pool、批量及 unsafe/无锁门槛 | 已完成;承接 05.06–05.10 |
| 72 | 05.12 并发服务复盘 | 用 A–F 慢设备时间线交付假设、资源账、修复与验证矩阵 | 已完成;承接 05.01–05.11 |
| 73 | 06.04 页与缓冲池 | 用 c-a 的 16 页与容量 2 LRU 区分数据页、命中、pin/dirty 与物理 I/O | 已完成;承接 06.01–06.03、02.06 与 03.05 |
| 74 | 06.05 索引结构 | 用 c-a 游标 6、5、4 和 m-a 点查推导复合 B+ 键、覆盖、哈希与 LSM 取舍 | 已完成;承接 06.02、06.04、02.04 与 02.06 |
| 75 | 06.06 查询执行与优化 | 用 c-a 两条纸上计划比较 11→6→3 行与索引早停,读连接、统计和 EXPLAIN 边界 | 已完成;承接 06.02、06.04–06.05 与 06.07 权限语义 |
| 76 | 06.08 锁与 MVCC | 用 u-a 发送与退群的 v0/v1、行锁顺序、死锁和管理员写偏斜推导可见性与冲突 | 已完成;承接 06.07、06.10 与 06.04–06.06 |
| 77 | 06.09 日志与崩溃恢复 | 用 m-a 的 C0–C5 故障点推导 WAL、REDO、检查点、本机提交与响应未知 | 已完成;承接 06.04、06.07–06.08 与 03.08 |
| 78 | 06.11 复制、迁移与对账 | 用 c-a 副本滞后、W0 快照+增量和同数不同键的反例评审切换与回退 | 已完成;承接 06.02、06.09–06.10 与 S5 可靠性需求 |
| 79 | 06.12 数据库业务案例 | 用 m-9、计数行与 6 B 合同评审写入、分页、重复、热点、故障和迁移 | 已完成;承接 06.01–06.11 与 09.02/09.12 |
| 80 | 08.01 系统模型与部分失败 | 用 A/G/S/B 四节点和同一 100 ms 超时推导未提交、已提交与结果未知 | 已完成;承接 06.09–06.12、04.04 与 05.03 |
| 81 | 08.02 时间与顺序 | 用多设备时间戳、a1–b1 Lamport 计数与 A/C 向量区分墙钟、因果和会话 seq | 已完成;承接 08.01、01.08 与 06.12 |
| 82 | 08.03 复制的目标与代价 | 用 P/R1/R2 的 t10/t40/t70 副本水位比较本机持久、远端持久与远端可读 | 已完成;承接 06.11、08.01–08.02 |
| 83 | 08.04 一致性模型 | 用写9后读8、先见9后见8和非重叠跨客户端旧读区分会话、因果、顺序与线性化 | 已完成;承接 08.01–08.03 与 06.07 |
| 84 | 07.01 访问模式与状态角色 | 用 c-a 历史、权限、预览、在线与两类计数推导权威/派生/临时、命中与重建 | 已完成;承接 06.12、08.01–08.04 |
| 85 | 07.02 Redis 数据模型 | 以在线/预览/成员/排序/近期窗口/位图/通知流选择结构并标清确认边界 | 已完成;承接 07.01、02.04 与 02.06 |
| 86 | 07.03 缓存读取与更新 | 用 seq8→seq9 的两条读写交错和 m-x 负缓存反例评审旧值复活与授权 | 已完成;承接 07.01–07.02 与 08.04 |
| 87 | 07.04 缓存过载与热点 | 用 1000/200 回源预算、四网关合并、百键雪崩和随机 ID 穿透区分症状与降级 | 已完成;承接 07.01–07.03 与 11.02 |
| 88 | 07.05 缓存服务的持久与故障 | 用 RDB 旧预览、AOF/副本切换和冷缓存回源判断可丢状态与恢复来源 | 已完成;承接 07.01–07.04 与 06.09 |
| 89 | 07.06 消息抽象 | 用 E9 的在线提示、搜索任务和 24/25 小时保留对照 Pub/Sub、队列与日志 | 已完成;承接 07.01–07.05 与 06.12 |
| 90 | 07.07 确认、重投与去重 | 用 E9 的 ACK 丢失、四/六分钟生产重试与十/十一分钟消费去重窗推导重复 | 已完成;承接 07.06、08.01 与 09.02 |
| 91 | 07.08 顺序与并发消费 | 用 E9/E10 的 100/10 ms 完成乱序、commit(44) 跳洞及旧 worker 迟到写评审顺序 | 已完成;承接 07.06–07.07、05.08 与 08.02 |
| 92 | 07.09 积压与坏消息 | 用 120/90/s 十分钟积压、E-bad 三次隔离与 E11 顺序门设计受控修复 | 已完成;承接 07.07–07.08 与 11.02 |
| 93 | 07.10 事务边界与 outbox | 用 m-9 与 E9 的 C0–C7 崩溃点、双 relay 与消费版本幂等划定本地原子范围 | 已完成;承接 06.07、07.06–07.09 与 09.05 |
| 94 | 07.11 派生视图与事件时间 | 用 E9/E10 时间线、窗口修正和 S0/L0 影子索引重建区分三种派生结果 | 已完成;承接 07.08–07.10、08.02 与 06.11 |
| 95 | 07.12 跨系统数据一致性案例 | 用 m-9 的 T0–T8 确认、七个故障与 24/25 小时离线反例交付对账和补偿方案 | 已完成;承接 07.06–07.11、09.07 与 11.03 |
| 96 | 08.05 分区与再平衡 | 手算 c-a/c-b/c-g 四桶路由,设计 b1 从 N1 到 N3 的 epoch 围栏与 E9/E10 在途处理 | 已完成;承接 08.01–08.04、07.08–07.12 |
| 97 | 08.06 多数与共识 | 用 R1/R2/R3 的 term4→term5、index12 复制和读写边界推演 Raft 多数与业务承诺 | 已完成;承接 08.01–08.05、07.12 |
| 98 | 08.07 协调与对象归属 | 用 B 设备从 G1 重连 G2 的 r101→r111 时间线评审租约、CAS、watch 压缩和旧 owner 围栏 | 已完成;承接 08.01–08.06 与 07.12 |
| 99 | 08.08 跨服务事务 | 用 m-9 提交后 Notify 失败的业务分界点比较 2PC 待决、Saga 补偿、outbox 和状态查询 | 已完成;承接 06.07、07.10–07.12 与 08.01–08.07 |
| 100 | 08.09 可靠任务与调度 | 用 N9 的 W1/W2 领取、推送回应丢失和三次总尝试评审接管、重复及修复责任 | 已完成;承接 07.07–07.10 与 08.07–08.08 |
| 101 | 08.10 成员变化与演进 | 用 Raft 旧新投票组、b1 的 S0/L0 与教学事件 v1/v2 三轴设计混部、追赶和回退门 | 已完成;承接 08.05–08.09 与 07.11 |
| 102 | 08.11 分布式验证 | 用 Hbad、Hoverlap、Hmono 三条有界历史和故障生效证据区分线性化反例与派生追赶 | 已完成;承接 08.01–08.10 与 11.01–11.03 |
| 103 | 08.12 完整一致性案例 | 用 m-9 的 C0–C9、元数据多数、N9、b1 迁移和 B 离线补拉交付统一确认与修复矩阵 | 已完成;承接 07.12 与 08.01–08.11 |
| 104 | 09.09 异步与长任务 | 用 exp-9 的 202/Location、幂等键、状态与取消竞态评审有权历史导出 API | 已完成;承接 09.02、09.07、08.08–08.09 |
| 105 | 09.10 协议兼容与 RPC | 用四轴版本与六格混部矩阵评审 Protobuf 字段、gRPC deadline、R9 和旧事件回放 | 已完成;承接 09.02–09.09、08.10 与 09.11 |
| 106 | 10.07 并发与属性验证 | 用解码 fuzz、data-race-free 双发交错和 gen41→42 连接状态机区分性质与工具证据 | 已完成;承接 05.09、09.10 与 10.02–10.04 |
| 107 | 10.08 依赖与质量工具 | 手算 Go MVS 的 v1.6.0,区分 go.sum/verify、生成 Protobuf 与 govulncheck 的证据范围 | 已完成;承接 01.09、09.10、10.07 |
| 108 | 10.10 持续交付与版本管理 | 以 S2/S3/R9/event_v2 四轴交付制品身份、扩展迁移收缩、灰度门与代码/数据回退矩阵 | 已完成;承接 10.08–10.09、09.10 与 08.10 |
| 109 | 10.11 技术写作与协作 | 用待决 ADR-R9、m-9 排障手册及 T0–T+18 虚构复盘练已知/未知与行动交接 | 已完成;承接 10.01、10.10、07.12 与 11.03 |
| 110 | 10.12 维护性评估 | 用待审 R9 的改/验/不动影响图与 Go 字节计数反例评估版本耦合、验证成本和技术债次序 | 已完成;承接 10.01、10.05、09.10、10.10 与 10.11 |
| 111 | 11.04 诊断方法 | 用五秒请求突发与 A 的 200 时延画像手算积压,按 USE/黄金信号写可反驳假设 | 已完成;承接 11.01–11.03、03.04 与 09.04 |
| 112 | 11.05 CPU 与内存性能 | 手算每秒速率和简化 GC 周期,区分核秒、调度等待、alloc、存活堆与 RSS | 已完成;承接 11.04、05.05–05.07 与 03.06 |
| 113 | 11.06 I/O 与网络性能 | 以 m-9 的未来投递时间线区分池/盘/TCP/慢端,手算池等待与设备积压 | 已完成;承接 11.04–11.05、04.04、06.04 与 07.12 |
| 114 | 11.07 压测与容量 | 手算连接/活跃/扇出压力,设计开闭环、遗漏、阶梯/长稳和 N−1 余量实验 | 已完成;承接 11.01–11.06、08.05 与 10.09 |
| 115 | 11.08 SLO 与告警 | 分开 A 首发内存受理与未来 B 设备 ACK,手算 30 日预算及短窗消耗速度 | 已完成;承接 11.01–11.03、11.07 与 07.12 |
| 116 | 11.09 过载与级联故障 | 从 B 补拉慢库推导两层重试 100→900/s、条件积压与限载恢复门 | 已完成;承接 11.04–11.08、07.07 与 07.12 |
| 117 | 11.10 事件响应 | 用 B 补拉迟到的 T0–T+30 纸上演练分配指挥/操作/沟通/记录角色,守止损与恢复门 | 已完成;承接 11.08–11.09、10.11 与 07.12 |
| 118 | 11.11 复盘与改进 | 以 T0–T+30 事实区分触发/放大/防线,交付可反驳、可验收的行动项 | 已完成;承接 11.09–11.10、10.11 与 07.12 |
| 119 | 11.12 容量与成本决策 | 手算连接、群设备任务、权威/E9 保留和 N−1 余量,评审成本与验证门 | 已完成;承接 11.04–11.11、08.05 与 07.12 |
| 120 | 03.11 隔离与限制 | 用网关 cgroup 0.5 核/512 MiB 案例区分 namespace 视图、配额、OOM 与 S2 业务恢复 | 已完成;承接 03.01–03.10、05.05–05.07 与 11.04–11.05 |
| 121 | 03.12 资源故障案例 | 以 EMFILE、ENOSPC、页缓存压力和信号退出四张独立卡核对 IM 资源与恢复边界 | 已完成;承接 03.03、03.07–03.11 与 11.10 |
| 122 | 12.01 运行环境与制品 | 从 Go 构建信息、OCI 标签/摘要追到运行配置和外部数据,守住当前 S2 合同 | 已完成;承接 01.09、03.11–03.12 与 10.08–10.10 |
| 123 | 12.02 容器机制 | 用同 D1 两容器与重建反例区分可写层、volume、namespace/cgroup、PID 1 和 WebSocket 排空 | 已完成;承接 12.01、03.11–03.12 与 04.05 |
| 124 | 12.03 本地多服务环境 | 用 gateway/db/events 纸上拓扑区分服务名、宿主/容器端口、启动/健康/业务就绪与有效配置 | 已完成;承接 12.01–12.02、04.02 与 09.03 |
| 125 | 12.04 集群控制模型 | 用三副本网关 P1→P4 纸上时间线拆 spec/status、Deployment/ReplicaSet、调度/就绪与跨 Pod 重复判定 | 已完成;承接 12.01–12.03、08.01 与 11.12 |
| 126 | 12.05 工作负载与服务发现 | 按四类 IM 角色选 Deployment/StatefulSet/Job,沿 Service/DNS/Ingress 审 Pod 替换与业务反例 | 已完成;承接 12.04、07.12、08.07 与 08.09 |
| 127 | 12.06 资源与持久存储 | 手算 Node requests 放置,区分 CPU 节流/OOM、emptyDir/PVC 与 S2/S3 恢复 | 已完成;承接 12.04–12.05、03.11 与 11.12 |
| 128 | 12.07 配置与权限 | 按 IM 角色区分 ConfigMap/Secret、SA/RBAC、NetworkPolicy 和非成员 404 业务授权 | 已完成;承接 12.01–12.06 与 09.07 |
| 129 | 12.08 启动、探针与退出 | 用 P1→P4 纸上摘流区分三种探针、40 秒预算、EndpointSlice 与 HTTP/WebSocket 恢复 | 已完成;承接 12.02、12.04–12.07 与 10.10 |
| 130 | 12.09 发布与回滚 | 用 D1→D2 纸上发布手算三副本滚动预算,区分金丝雀曝光与代码/配置/数据/事件回退 | 已完成;承接 12.01、12.08、10.10 与 09.10 |
| 131 | 12.10 扩缩容与故障域 | 算 HPA 简化五副本、Pod/Node N−1 与 PDB 自愿中断,审指标和重连滞后 | 已完成;承接 11.07、11.12、12.04、12.06 与 12.09 |
| 132 | 12.11 声明式交付与可重复环境 | 沿 IM 网关非秘密配置变更追 Git、渲染、API、Pod 生效与用户合同,审 GitOps、漂移和权限 | 已完成;承接 10.08–10.10、12.01、12.04、12.07 与 12.09 |
| 133 | 12.12 平台作为产品 | 以虚构网关接入定义契约、默认与例外,手算净收益/有效自助并分清平台与 IM 责任 | 已完成;承接 11.01–11.03、11.08、12.07–12.11 |
| 134 | 13.01 问题定义与利益相关者 | 沿 A 发送与 B 长离线旅程拆目标/约束/假设、确认点、六段质量场景和失败成本 | 已完成;承接 09.02、10.01、11.01、11.08 与 07.12 |
| 135 | 13.02 领域与状态建模 | 区分用户/设备/会话/消息身份、请求与意图、权威序号/事件和连续设备游标,审聚合不变量 | 已完成;承接 13.01、06.01、06.07、07.12 与 09.07 |
| 136 | 13.03 模块与信息隐藏 | 比较泄漏式与语义型 Send 接口,按 R9、S3、E9、成员规则和 B 补拉审变更传播与确认点 | 已完成;承接 13.01–13.02、09.03、10.05 与 08.01 |
| 137 | 13.04 架构风格与边界 | 分清代码/部署/权威/故障域,沿 A→DB→E9→B 对照单体、事件和服务拆分的事务及运行成本 | 已完成;承接 13.01–13.03、08.01、08.08、11.12 与 12.10 |
| 138 | 13.05 容量与数据设计 | 手算连接/入站/设备任务、权威与 E9 保留、热群和积压清空时间,审有权历史恢复 | 已完成;承接 13.01–13.04、07.12、11.07、11.12 与 12.10 |
| 139 | 13.06 质量属性的冲突 | 以 DB 故障、B 长离线、非成员和热群场景比较正确性/可用/时延/安全/成本与维护责任 | 已完成;承接 13.01–13.05、08.04、09.07 与 11.08 |
| 140 | 13.07 设计说明与评审 | 将 A/B 用户目标、S2 硬合同、S3 候选、故障/容量证据和 proposed ADR 写成可反驳设计 | 已完成;承接 13.01–13.06、10.11 与 12.09 |
| 141 | 13.08 迁移与兼容 | 审扩展/迁移/收缩阶段、单一权威、影读可比口径与旧端合同,说明已确认新数据为何不能简单回滚丢弃 | 已完成;承接 13.01–13.07、06.03、09.10 与 12.09 |
| 142 | 13.09 跨团队交付 | 把客户端、Go、数据、安全和值班的版本契约、依赖里程碑、故障反例与 A/B 用户结果合成可审交付板 | 已完成;承接 13.01–13.08、10.11 与 12.09 |
| 143 | 13.10 技术债与演进 | 区分当前合同缺陷、S2 范围、S3 未决和待证债务,估变更利息并用小步偿还与结果复测排序 | 已完成;承接 13.01–13.09、10.12、11.11 与 12.11 |
| 144 | 13.11 复杂案例答辩 | 群 50→500、B 离线25h、旧端和 Node 故障同题,重算扇出/余量并对方案、权限与证据答辩 | 已完成;承接 13.01–13.10、11.12 与 12.10 |
| 145 | 13.12 工程师的长期责任 | 沿未来 m-9/E9 故障纸上演练复盘、评审、交接与指导,区分当前合同和个人真实运行证据 | 已完成;承接 13.01–13.11、11.10–11.11 与 10.11 |
| 146 | 14.01 Python 与数据工作 | 用虚构 IM JSONL 对照 Go/Python 对象与异常,审 UTF-8 字节、字段/权限、拒绝报告与复现清单 | 已完成;承接 01.04、09.02、09.07 与 13.02 |
| 147 | 14.02 必要数学与机器学习直觉 | 手算人工向量余弦、条件概率与分类指标,识别训练/验证泄漏,分清相似度、证据和成员授权 | 已完成;承接 14.01、02.01、09.07 与 11.02 |
| 148 | 14.03 语言模型基础 | 区分字符/UTF-8 字节/token、模型与检索向量,推玩具下一 token 分布和上下文预算,核 IM 合同/权限 | 已完成;承接 14.01–14.02、09.02 与 09.07 |
| 149 | 14.09 评测与数据工程 | 先固定六类虚构 IM 问题、版本/权限与关键词基线;学完 RAG 后回访检索、引用、拒答和裁判偏差 | 已完成;第一遍承接 14.01–14.03,第二遍承接 14.04–14.07 |
| 150 | 14.04 Transformer 与推理路径 | 用 Q/K/V 玩具加权、位置/因果遮罩、prefill/decode 和 2 KiB KV 缓存纸上账解释推理与权限边界 | 已完成;承接 14.02–14.03 与 14.09 第一遍 |
| 151 | 14.05 提示与结构化输出 | 从业务标签、零/少示例到 JSON 契约和逐层失败处理,审六题资料权限、版本与提示注入 | 已完成;承接 14.01、14.03–14.04 与 14.09 第一遍 |
| 152 | 14.06 检索与索引 | 从资料切分/倒排/BM25 到向量/ANN、混合与重排,手算相似和 RRF,核权限/状态与召回分母 | 已完成;承接 14.02、14.05 与 14.09 第一遍 |
| 153 | 14.07 RAG 完整链路 | 将有权候选接入证据充分性、上下文、逐主张引用、拒答和撤权更新,按六题找第一个失败层 | 已完成;承接 14.05–14.06,再回访 14.09 第二遍 |
| 154 | 14.08 工具、工作流与 Agent | 用虚构 IM 受控发送拆读写工具、批准、预算、检查点和未知结果,辨现行重复 409 与幂等提案 | 已完成;承接 14.05–14.07、14.09 第二遍与 S5 恢复知识 |
| 155 | 14.10 优化与部署 | 按有权正确任务对照模型/路由、批量/KV、缓存、流式与限流,设计分桶时延/成本和降级停止门 | 已完成;承接 14.04、14.07–14.09 与 11.02–11.03 |
| 156 | 14.11 微调与多模态选修 | 先辨资料/权限/能力缺口,再手算 LoRA/量化边界,审合成截图来源、授权、训练数据与未见评测 | 已完成;承接 14.01–14.10,可第二遍阅读 |
| 157 | 14.12 可持续交付 | 用虚构 release manifest、离线/影子/灰度和 R9 误标事故纸上推演反馈、回滚与故障响应 | 已完成;承接 14.01–14.10、14.09 第二遍与 11.10–11.11 |
| 158 | 01.10 泛型与可复用算法 | 从具体消息查找进入类型参数、约束、泛型集合/队列与 Go 1.27 方法边界,审业务合同不变 | 已完成;S4 后第二遍,承接 01.01–01.09 与 02.06–02.08 |
| 159 | 01.11 反射与底层边界 | 用虚构消息编解码解释 Type/Value、可设置性、标签、JSON 与 unsafe 内存/序列化边界 | 已完成;S4 后第二遍,承接 01.05–01.08、01.10 |
| 160 | 02.09 加权路径与状态空间 | 复算纸上非负权 Dijkstra,区分 2 跳代价 12 与 4 跳代价 7,审负权、不可达和扩展状态 | 已完成;S4 后深化,承接 02.01、02.07–02.08 |
| 161 | 02.10 动态规划与贪心 | 枚举预算 4 的任务组合,填 0/1 DP 表得 B+C 值 6,反驳比值贪心并审区间交换前提 | 已完成;S4 后深化,承接 02.01–02.03、02.09 |
| 162 | 02.11 近似与专用结构 | 画 Trie、手算位图 74、构造 Bloom 假阳性与并查集连通,审删除/权限和 ID 判重边界 | 已完成;S4 后深化,承接 01.04、02.04、02.08 |
| 163 | 02.12 业务算法评审 | 为本地 IM 历史下界/分页写合同、分布、候选结构、正确性、基准计划、内存与退化回退卡 | 已完成;承接 02.01–02.11 与 11.02–11.05 |
| 164 | 04.08 Go 网络 I/O | 手算 8 B 教学帧,按短读短写、限长、deadline/取消、连接复用审 S2 业务确认边界 | 已完成;承接 01.07–01.08、04.03–04.07 与 09.02 |
| 165 | 04.09 代理与负载均衡 | 追 A→P→N1/N2 的逐跳连接/头部/健康与 1000 ms 预算,辨 504 后结果未知和 S2 内存范围 | 已完成;承接 04.03–04.08、09.02 与 11.07–11.09 |
| 166 | 04.10 HTTP 版本与 RPC | 比较 h1/h2/h3 的流与流控,区分 HTTP200、grpc-status、S2 内存受理和 deadline/重试未知结果 | 已完成;承接 04.03–04.09、09.02 与 13.08 |
| 167 | 04.11 网络层与链路层 | 从本地下一跳/NAT 到 MTU1500 的 1460 B 纸上计算和移动重连,审网络观察与 IM 确认边界 | 已完成;承接 04.02、04.05–04.10 与 14.09 q-06 |
| 168 | 04.12 网络排障与协议演进 | 沿合成 m-9 的 1000 ms 时间线核抓包/trace、504/409/200、兼容限额与盲重试停止门 | 已完成;承接 04.01–04.11、09.02 与 11.10–11.11 |
| 复习 | 10.02 测试 → 01.08 文件与 JSON | 回访测试和本地记录 | 按薄弱点复习,不机械重复 |
168 章均已完成,学习按这张表及各章先修推进。Git 后半章的分支、恢复与远端可第二遍回访;自动测试要等指针、方法等入口语法讲清后再进入。
02.01 与 03.01 都能在 01.04 后独立进入,不要求彼此先学完。02.02 在 01.05 与 02.01 后进入,02.03–02.05 依次处理搜索、哈希和排序。01.12 形成 S1 本地工具课程项目,10.04–10.06 已补齐可控依赖、重构与合并评审;03.02–03.04 已进入 S2 的进程、Linux 资源与调度,04.01–04.03 从两个用户通信需求讲到分层、地址、HTTP 和 WebSocket,05.01–05.03 再建立任务生命周期、共享状态与取消,09.01–09.04 固定应用用例、HTTP 合同、程序边界与请求链;11.01–11.03 已从业务确认点进入测量、分布和观测证据,10.09 再把需求、检查、提交与候选制品连起来。06.01–06.03 已进入 S3 的关系模型、SQL 查询与模式演进,06.10 把 Go 代码与两类数据源的驱动和资源责任连起来;06.07 再解释事务与并发异常,09.05 将这些机制接回应用用例并对照固定 OpenIM 源码。09.06–09.08 已补浏览器/客户端来源、登录身份、对象权限及输入输出防护,09.11 把当前 6 字节合同、待审 R9 和应用证据分开;04.04–04.07 已回补可靠传输、长连接、流控/拥塞与 TLS,09.12 汇总为学习者完整服务的静态课程。02.06–02.08 已进入 S4 的有序索引、优先调度与图遍历,03.05–03.06 已回补虚拟内存、分配映射与连接驻留预算,03.07–03.10 已把文件身份、崩溃恢复、长连接就绪与只读诊断接入 S4 主线,05.04–05.12 已完成 S4 的同步、调度、GC、有界组合、验证、性能工具和虚构事故复盘,06.04–06.06 已把数据库页、缓冲池、索引结构和查询执行连起来,07.01–07.12 已进入第七卷,10.12 已收束工程维护性评估,168 章独立正文已齐,下一步按先修路线学习、实践并复核来源;02.09 带权路径已完成,按需求回访。已有章稿同时维护审阅稿、正式页与来源。
S0:认识一条消息,写清一条规则
入口: 从文件、目录、终端、保存、编译与运行开始,不预设 Go 经验。
学习顺序: 01 卷01.01 → 01.02 → 01.03 起步;穿插 10 卷10.01 的需求边界、10.03 的差异与本地版本记录。
把最初需求限定为“输出一条文本消息,再判断本题允许的输入”:文本是什么类型?长度按字节还是文字计算?用户 ID 能否当作可计算整数?输入为空和明确提供零有何差别?本阶段只保存、计算和判断这些值。
条件、循环和普通函数先学;能够追踪调用后再学递归,理解作用域后再学函数值与闭包。先写出合法、空值、超限和非法格式的预测结果,再逐条核对。
验收: 独立修改一条校验规则,解释每个变量和返回结果。此时不预设消息已发送到网络,也不引入顺序保证、幂等和离线恢复。
S1:从消息列表到本地会话工具
入口: 能读写普通函数、循环和失败分支。
学习顺序: 01.04 数组/切片/文本 → 01.05 map/结构体/指针 → 01.06 方法/接口 → 01.07 错误与资源 → 01.08 本地格式与 I/O → 01.09 包 → 10.02 测试 → 01.12 CLI → 10.04 测试替身 → 10.05 重构 → 10.06 评审与合并。
先定义消息与会话:会话表示一组交流对象及其历史归属,消息包含本题需要的发送者、内容和标识。用切片保存列表,用 map 按会话查找;用复制与共享示例解释修改会影响谁。接口先用两种内存存储练习,学完文件后再加文件实现。
02 卷02.01–02.05 随这些操作讲解集合、计数、规模、对数、查找、哈希与排序。消息按什么键排列,要明确规则;不能仅凭本地时间戳就预先承诺全局顺序。
P1 增量: 一条消息 → 多条消息 → 会话索引 → 本地保存与导入 → 去重练习与测试。10.04–10.06 用该工具讲测试替身、重构和评审。此处去重只是有明确输入范围的本地规则,网络重试会在 S5 深化。
验收: 能改变文件格式或校验规则,解释非法输入和部分读写的处理;能说明正常保存与崩溃耐久性的区别。01.10 泛型、01.11 反射在 S4 后深化;网络标准库在 S2 补学。
S2:连接两个客户端,理解一条网络消息
入口: 完成 P1,理解函数、接口、字节、错误与资源关闭。
学习顺序: 03.01 数据与存储 → 03.02 进程与系统调用 → 03.03 Linux 进程与资源 → 03.04 CPU 调度 → 04.01 应用通信与分层 → 04.02 地址、名称与路由入口 → 04.03 HTTP 与 WebSocket 入门 → 05.01 并发任务与生命周期 → 05.02 同步原语 → 05.03 channel 与取消 → 09.01 需求与应用边界 → 09.02 HTTP 接口设计 → 09.03 程序组织 → 09.04 请求处理链 → net/http 等网络标准库的个人实践与 11.01–11.03 的基本观测。
先做只读历史查询,再做两个测试客户端之间的文本转发。解释 HTTP 请求与持久双向连接、消息边界、读写任务、关闭责任、连接失效和心跳。共享连接表或会话数据之前,必须先学同步和数据归属。
源码对照从 OpenIM 的 msggateway 进入,先看连接与消息入口。网关后的 RPC 和队列先标注职责,等到 S5 再追踪整条路径。
同阶段回访 09.08 的输入大小与日志边界,先读11.01 业务结果与测量、11.02 分布与统计与11.03 日志、指标与 Trace,再学10.09 持续集成与制品的最小自动验证设计。
P2 内存版验收: 正常通信、非法载荷、连接关闭和慢接收方的基本行为可解释。明确进程退出会丢失哪些内存状态;在线转发成功不能自动代表离线用户也能恢复消息。
S3:保存消息,建立身份与会话权限
入口: 理解网络处理、context、基本同步与 P2 的当前可靠性边界。
学习顺序:
- 先读06.01 关系模型与业务身份、06.02 SQL 从读写到复杂查询与06.03 模式设计与演进,以会话成员和消息记录构造教学表,再进入 06.10 的 Go 数据访问入口。
- 06.10 Go 数据访问先讲查询、参数、结果与关闭责任;06.07 事务与并发异常再学事务语义,然后读09.05 数据访问与迁移,把机制接回应用用例。
- 补齐文档、集合、MongoDB 基本读写、索引和 Go 驱动,再对照 OpenIM 的实际存储路径。SQL 教学实现与上游实现明确标注。
- 04.04 可靠传输先补 TCP 字节确认,再读04.05 TCP 与长连接生命周期、04.06 流量与拥塞控制与04.07 TLS 与身份;09.06 浏览器与客户端边界、09.07 认证与授权与09.08 输入与输出防护可在 04.03 基础上先学概念,完整服务前回访网络机制。
- 先读09.11 应用测试与交付组织接口和安全负例,完成 04.04–04.07 后再由09.12 完整服务项目组合逐步实践的静态课程;11.08 在观测与性能前置具备后明确历史查询和发送接口的服务目标。
P2 持久版: 登录后查询允许访问的会话,提交消息、查询历史并分页。先验证发送者身份和群成员权限,再讨论状态修改;不信任客户端自行填写的发送者身份。
历史保存、消息可见范围、群成员变更与消息发送之间的规则必须明确定义。进入源码前先解释关系与文档两种数据模型,不因选择 OpenIM 就跳过数据库理论。
验收: 解释越权读取、退群后发送、非法消息、重复提交和存储失败。此阶段明确教学实现的提交点;OpenIM 异步路径的受理、存储和推送关系将在 S5 核对。
S4:分析慢客户端、大群与资源开销
入口: 已有带身份和持久历史的基本服务。
学习顺序:
- 先读02.06 树与有序索引、02.07 堆与优先调度与02.08 图与依赖遍历;再读03.05 虚拟内存、03.06 分配与映射、03.07 文件与目录、03.08 持久化机制、03.09 I/O 与事件通知与03.10 系统诊断。
- 先读05.04 Go 内存模型、05.05 Go 调度模型、05.06 内存生命周期、05.07 垃圾回收、05.08 并发组合、05.09 并发验证、05.10 性能工具与解释、05.11 优化边界与05.12 并发服务复盘。
- 先读06.04 页与缓冲池,再读06.05 索引结构,再读06.06 查询执行与优化,再读06.08 锁与 MVCC,再读06.09 日志与崩溃恢复;结合 MongoDB 的具体表示与操作范围对照。
- 04.08–04.12 的网络 I/O、代理、RPC、网络层与排障。
- 10.07–10.08 已把并发机制接到性质验证和依赖质量;11.04 已进入工作负载与假设诊断,11.05 已深化 CPU、分配与 GC,11.06 已完成 I/O、网络与慢消费者诊断,11.07 已完成压测与容量设计,11.08 已将用户结果接入 SLO 与告警。
用 IM 症状驱动理论:一个设备很慢,是否拖住整个群?群成员从 10 人变成 10000 人,扇出工作和缓存怎样变化?为什么连接数增长后内存明显上升?历史翻页为何越来越慢?
群聊先从明确的小群规则开始,区分发送者提交次数与向接收设备交付的次数。观察工作量、队列、分配和尾部时延,再讨论批量、索引、隔离或更换推送策略。
01.10–01.11、02.09–02.12 作为后续语言与算法深化,使用需要它们的具体问题展开。
验收: 提交可复现输入、假设、观测和优化对照,并说明正确性与退化条件。上游 README 的性能描述不替代自己的实验。
S5:消息可靠性、离线恢复与多端同步
入口: 理解并发、事务、日志、取消与基本性能模型。
学习顺序: 08.01 系统模型与部分失败 → 08.02 时间与顺序 → 08.03 复制的目标与代价 → 08.04 一致性模型 → 07.01 访问模式与状态角色 → 07.02 Redis 数据模型 → 07.03 缓存读取与更新 → 07.04 缓存过载与热点 → 07.05 缓存服务的持久与故障 → 07.06 消息抽象 → 07.07 确认、重投与去重 → 07.08 顺序与并发消费 → 07.09 积压与坏消息 → 07.10 事务边界与 outbox → 07.11 派生视图与事件时间 → 07.12 跨系统一致性案例。
在此基础上回访 09.09–09.10 的异步接口与协议兼容,再回访已完成的 10.12 维护性评估;06.11–06.12 的迁移对账和 08.10–08.12 的演进、验证与完整案例已完成。
P3 按四条链路展开:
- 发送链路:客户端消息身份、响应丢失、重试和重复显示的处理。
- 历史链路:会话序号、缺口、分页、断线补拉与停止条件。
- 多端链路:设备会话、接收进度、已读进度、会话列表和状态同步。
- 服务端链路:队列、消息转发、存储、在线推送、离线通知与失败恢复。
源码对照 OpenIM 的 msg/send、msgtransfer、push、msg/sync_msg 与 conversation/sync;到客户端部分再固定兼容 SDK 版本。分别核对“服务端受理、持久条件满足、设备处理、用户已读”的证据,不把不同阶段的确认合并成一个成功。
未读数应先定义包含哪些可见消息、删除与撤回怎样处理;只有在明确满足条件的简化模型里,才使用两个序号相减。在线通知也不自动承担完整消息历史的职责。
验收: 推演响应丢失、重复请求、断线重连、双端同时登录、消费后崩溃和旧状态迟到。每个案例给出事实保存位置、重试依据、用户可观察结果和修复入口。
S6:运行、扩容与升级一个长连接系统
入口: 能解释 P2/P3 的业务状态和故障边界,已有基本日志、指标和服务目标。
学习顺序: 03.11–03.12 的隔离与资源故障 → 12 卷12.01–12.03 的制品、容器与本地依赖 → 11.08–11.12 的目标、过载、响应、复盘与成本 → 12.04–12.12 的集群、资源、权限、退出与发布。
10.10–10.12 已把版本、回滚、运行文档、复盘与长期维护成本接入交付。先解释单实例的启动、连接停止接入、在途处理与退出,再进入集群和发布。
P4 场景: 网关滚动升级使客户端重连;一个节点退出后在线状态需要收敛;网络恢复造成重连风暴;离线积压需要追平。分别观察在线连接、发送受理时延、实际交付时延、存储积压与补拉成功率。
容量模型同时考虑连接数、活跃比例、消息速率、群规模、每用户设备数、消息大小和历史保留时间。不能只按在线人数推算系统压力。
验收: 交付启动、就绪、发布、摘流、恢复和回滚说明。实际环境与运行记录单独保存,静态配置检查不等于运行保证。
S7:IM 架构取舍与长期维护
入口: 至少完成一个从需求、实现、运行到故障复盘的项目。
13 卷13.01–13.12 全部展开,结合 10.11–10.12 的写作、协作与维护性评估。需求、状态与模块边界已在前面实践,这里处理多方案、跨团队、迁移和长期成本。
P5 答辩: 为一种明确 IM 场景提交完整设计:普通单聊与小群、大群广播、客服会话或团队协作。改变群规模、离线时长、设备数、旧客户端兼容或恢复目标,要求给出可检验的方案调整。
比较单体与服务拆分、写扩散与读扩散、在线通道与历史同步、关系与文档存储、不同保留策略。每个取舍都说明适用条件、失败边界与维护代价,不能把开源项目当前做法当作所有场景的唯一答案。
方案与验收方法已融入 13.07 设计评审至13.12 长期责任。纯 Go IM 路线不要求先学习 AI。
验收: 能根据约束选择方案,保留证据不足之处,组织小步迁移,并让他人接手。
AI 扩展:在 IM 中加入有证据的助手
S3 后可进入 14 卷14.01–14.03 的 Python、数学与模型基础。顺序为:14.01–14.03 → 14.09 数据集与基线 → 14.04–14.07 模型、提示、检索与 RAG → 14.09 评测深化 → 14.08 工具 → 14.10、14.12 运行交付。14.11 微调与多模态按需求选学。
练习使用虚构会话与资料,先定义可访问范围和正确答案证据,再比较方案。工具副作用前完成 S5 的幂等与恢复,部署前具备 S6 运行基础。本扩展按 14.01–14.03 建立前置,再在 14.09 固定评测基线后进入检索、生成与受控工具。
14 卷怎样进入路线
“起步”与“深化”可以在不同阶段出现;回读时补的是新的机制与证据,不要求机械重复已掌握内容。
| 分卷 | 起步位置 | 继续深化 |
|---|---|---|
| 01 Go | S0:01.01–01.03;S1:01.04–01.09、01.12 | S2 补网络库;S4 后可学 01.10–01.11(已完成) |
| 02 数学与算法 | S1:02.01–02.05,数学与实现交替 | S4:02.06–02.08;02.09–02.12 为后续算法深化 |
| 03 系统 | S2:03.01–03.04 | S4:03.05–03.10;S6:03.11–03.12 已完成 |
| 04 网络 | S2:04.01–04.03 | S3:04.04–04.07;S4:04.08–04.12 |
| 05 并发运行时 | S2:05.01–05.03 | S4:05.04–05.12 |
| 06 数据库 | S3:06.01–06.03、06.07、06.10 的应用基础 | S4:06.04–06.06、06.08–06.09,深化 06.07/06.10;S5:06.11–06.12 |
| 07 缓存与消息 | S5:先补 08.01–08.04,再学 07.01–07.12 | S5:回访 07.11–07.12 的派生与一致性案例 |
| 08 分布式 | S5:08.01–08.12 | S5:回访 08.10–08.12 的演进、验证与完整案例 |
| 09 应用安全 | S2:09.01–09.04,09.08 输入基础 | S3:09.05–09.08、09.11–09.12;S5:09.09–09.10 已完成 |
| 10 工程协作 | S0:10.01、10.03;S1:10.02、10.04–10.06 | S2:10.09;S4:10.07–10.08 已完成;S6–S7:10.10–10.12 已完成 |
| 11 可靠性 | S2:11.01–11.03;S3:11.08 目标起步已完成 | S4:11.04–11.07 已完成;S6:11.08–11.12 已完成 |
| 12 平台 | S3 仅按实验需要认识本地环境 | S6:12.01–12.12 已完成,从单实例到集群 |
| 13 架构 | S0/S1 先实践需求、状态和模块边界 | S7:13.01–13.12 已完成,处理完整取舍与长期责任 |
| 14 AI | S3 后可选 14.01–14.12 已完成,十二章独立正文已齐 | 按本页 AI 顺序覆盖其他单元;14.11 选修 |
怎样安排每次学习与复习
每次只选择一个能够说清的小目标:读需求和定义,画执行过程,预测一个正常输入和一个反例,做一个独立变式,最后记录哪些结论仍未验证。长章按小节拆开,遇到新的数学、工具或系统概念时先安排基础课。
进入新阶段前,用上阶段的一个不同输入复查理解;完成阶段项目后,隔一段时间尝试不看答案重写关键规则。若预测经常与结果不符,先找出缺的是语法、模型还是环境,再回到对应前置。
有经验的学习者可以用同一组验收证明已掌握后跳过相应讲解。只读路线、背术语或跑通参考程序,不能直接跳过独立变式与失败解释。记录模板见学习进度。