全书 45 篇:13 章正文 + 序、前言、目录 + 附录 A/B/C。每节配可运行的 Go 代码,代码块用
// file:/// tier:/// verify:标注,可在实验工程中逐字节还原。
本页是卷一的完整索引。可以从目录与学习路径 按顺序通读,也可以按问题跳读。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《互联网产品的服务端架构》卷一 |
| 已发布篇数 | 45 篇(含目录与附录) |
| 主线语言 | Go 1.26.0(实验工程 module webapp) |
| 贯穿案例 | 内容社区 + IM + 轻交易「回声」 |
| 阅读方式 | 目录篇顺序通读,或按章节表跳读 |
| 上级专题 | 书稿专题 |
前置
| 篇 | 文章 | 核心内容 |
|---|---|---|
| 序 | 序 | 从一次没有结论的产品评审写起,说明这本书为什么要用一条连续线连接产品约束、基础能力、内容… |
| 前言 | 前言 | 前言说明四卷的分工与顺序、为什么从产品约束写到规模化,交代 Go 1.26.0 与 we… |
| 目录 | 目录与学习路径 | 卷一《产品、流量与基础能力》的阅读入口:13 章分四段的结构、章节依赖图、三条阅读路径、… |
第 1 章 产品约束
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 产品形态如何决定服务端形状 | 从「回声」的内容流、私信与下单三个产品事实出发,说明服务端分类为什么按实时、强一致、读写… |
| 1.2 | 1.2 用户量、请求量与成本的三条曲线 | 把用户量、请求量与成本拆成三条曲线,用 100 万和 1000 万 DAU 两个完整算例… |
| 1.3 | 1.3 可用性、体验与合规的底线 | 把 99.9%、99.95%、99.99% 换算成每月允许的不可用时长,讨论延迟、错误率… |
第 2 章 从需求到架构
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 2.1 用例、用户旅程与系统边界 | 从「回声」新用户看到内容、发私信到下单的一条完整旅程出发,把用户故事拆成 actor、触… |
| 2.2 | 2.2 领域模型与数据所有权 | 以一次账号注销后内容、私信和订单里仍残留用户信息的事故为引子,把用户、内容、关系、订单四… |
| 2.3 | 2.3 一份可评审的架构决策记录 | 以「回声」Feed 写扩散与读扩散的取舍为例,说明一份可评审的 ADR 必须同时写清背景… |
第 3 章 账号与身份
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 注册登录与第三方身份 | 从一个账号绑定手机号、微信和 Apple 的冲突讲起,区分账号与身份,给出合并策略、冲突… |
| 3.2 | 3.2 会话、设备与多端互踢 | 从「旧手机还能继续用」的线上问题讲起,说明会话不是 token,拆解设备上限、登录时间、… |
| 3.3 | 3.3 账号安全:撞库、风控与找回 | 从一次撞库事件讲起,说明账号维度、IP 维度和设备维度为什么要分别计数,给出滑动窗口、成… |
第 4 章 资料与隐私
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 资料模型与可见性 | 以「回声」个人主页上线三天后的一次手机号字段泄露为入口,拆解公开、好友、自己三档可见性,… |
| 4.2 | 4.2 个人信息分级与最小化 | 从「回声」注册页多收的一个手机号说起,说明公开、内部、敏感三级字段如何按注册、推荐、客服… |
| 4.3 | 4.3 注销、导出与数据留存 | 从「回声」用户注销后仍能在备份里找回账号的事故说起,说明 pending、deleted… |
第 5 章 多端与 BFF
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 5.1 App、Web 与小程序的差异 | 从「回声」小程序复用 App 未读模型的事故写起,把 iOS、Android、Web 与… |
| 5.2 | 5.2 BFF 的聚合、裁剪与契约 | 从「回声」首页一个下游超时导致整页空白的事故写起,说明 BFF 聚合为什么不是把接口拼成… |
| 5.3 | 5.3 端上体验与服务端取舍 | 从「回声」为省一次请求把 2MB 数据塞进首屏接口的事故写起,拆解首屏时间、流量、电量和… |
第 6 章 产品化 API
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 6.1 资源、命令与产品语义 | 从「回声」点赞按钮被预取和重试重复执行的事故写起,说明资源查询与命令的本质区别、命令自然… |
| 6.2 | 6.2 错误码与用户可感知的失败 | 从大促零点一条把 SQL 报错返回给用户的事故写起,说明错误码为什么是产品契约而不是异常… |
| 6.3 | 6.3 版本演进与兼容窗口 | 从服务端删掉一个字段导致三个月未升级的 App 白屏的事故写起,说明兼容窗口为什么由客户… |
第 7 章 流量入口
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 静态与动态的分界 | 从「回声」把个性化推荐错误地放进 CDN、A 用户看到 B 用户推荐的事故写起,说明静态… |
| 7.2 | 7.2 网关的认证、路由与限流 | 从「回声」网关用字符串前缀匹配,把 /api/user-admin 导流到用户服务、普通… |
| 7.3 | 7.3 边缘缓存与回源保护 | 从「回声」热点文章缓存 TTL 同时到期、98% 命中率仍把源站打挂的事故写起,说明边缘… |
第 8 章 读写与缓存
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 8.1 读多写少的产品事实 | 从一个社区首页按 DAU 估算缓存容量、结果命中率只有 22% 的事故写起,说明读多写少… |
| 8.2 | 8.2 缓存位置与一致性窗口 | 从头像改完八分钟仍显示旧图的事故写起,说明缓存位置决定一致性窗口,而不是加了缓存就快;拆… |
| 8.3 | 8.3 热点与失效的产品表现 | 从大 V 发帖打满单个分片、整点配置统一过期两次事故写起,说明热 key 与集中失效是两… |
第 9 章 异步与消息
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 9.1 哪些事情不该阻塞用户 | 从「回声」发帖按钮转圈八秒的事故写起,说明同步与异步的分界线不是操作快慢,而是用户此刻是… |
| 9.2 | 9.2 事件、通知与最终一致 | 点赞事件重复投递让计数先涨两次又掉回去,问题不在消息队列,而在消费者没有幂等账本。文章区… |
| 9.3 | 9.3 重复、丢失与补偿的用户感知 | 用户付了钱订单却三天待支付,暴露的是重试、死信与对账三层防线同时缺位。文章把重复、丢失、… |
第 10 章 发布与灰度
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 功能上线的最小发布单元 | 一次发布混进三个功能、一个索引重建和一份配置,出故障时没人说得清该回滚哪一段。文章把发布… |
| 10.2 | 10.2 灰度、开关与回滚 | 灰度 5% 时错误率已经从 0.4% 翻到 1.8%,却没人看指标,一路放到 100% … |
| 10.3 | 10.3 数据兼容与双写窗口 | 凌晨发布时直接 rename 列,老 Pod 还在跑,写入全部报未知列,订单创建失败十二… |
第 11 章 可观测性
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 11.1 用户视角的 SLI | 监控面板全绿,用户却反馈首页打不开,问题出在 SLI 的采集口径。文章从用户动作出发,区… |
| 11.2 | 11.2 日志、指标与追踪的最小集 | 日志、指标与追踪都接上了,故障时仍然查不出原因,往往是因为采集没有边界。文章说明三种信号… |
| 11.3 | 11.3 一次线上问题定位复盘 | 复盘报告只写“数据库连接数打满”,解释不了为什么监控二十分钟后才报警。文章把线上问题拆成… |
第 12 章 容量与成本
| 节 | 文章 | 核心内容 |
|---|---|---|
| 12.1 | 12.1 DAU 到 QPS 的估算 | 从「回声」三次容量评审给出相差数倍的数字写起,拆解 DAU、每用户请求数、峰值系数与活跃… |
| 12.2 | 12.2 存储、带宽与机器成本 | 从「回声」只估了数据库、上线后被带宽与备份账单打回的事故写起,把存储、带宽与机器成本拆成… |
| 12.3 | 12.3 容量余量与弹性策略 | 从大促前自动扩容却因镜像拉取与预热耗时六分钟、流量提前到达的事故写起,讨论预留 30% … |
第 13 章 收口
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 13.1 账号、资料与 BFF 的模块划分 | 账号、资料和 BFF 三个模块共用一个 models 包时,边界只剩目录名。文章用一次越… |
| 13.2 | 13.2 端到端用例与测试 | 账号包和 BFF 的单测都绿,真实注册登录却在字段名上断掉。文章说明端到端用例为什么要从… |
| 13.3 | 13.3 基线指标与进入卷二 | 没有基线,三个月后没人说得清系统是变快还是变慢。文章把可用性、p95 与单请求成本写成可… |
附录
| 篇 | 文章 | 核心内容 |
|---|---|---|
| 附录 A 术语与指标 | 附录 A 术语与指标 | 一份面向评审与复盘的术语和指标速查:解释 DAU、QPS、p95、并发、读写比、命中率、… |
| 附录 B Go 实验工程与代码分级 | 附录 B Go 实验工程与代码分级 | 附录 B 记录 webapp-lab 的真实工程快照:Go 版本、go.mod、全部 G… |
| 附录 C 容量估算速查 | 附录 C 容量估算速查 | 把 DAU、峰值系数、活跃秒数、保留天数、副本数与三项单价放进同一组速查表,用三个案例算… |
怎么读这一卷
- 第一次读:从序和前言开始,按 1.1 到 13.3 顺序读,每节的代码都在同一实验工程里。
- 带着问题读:账号看第 3 章,多端与 BFF 看第 5 章,慢与贵看第 8、12 章,线上问题看第 10、11 章。
- 只想跑代码:直接看附录 B
,按包运行
go test。
与其他书稿的边界
- 通用架构模式、DDD、C4、ADR 的概念细节在《后端架构设计》里,本卷只写它们在「回声」上的具体产物。
- 内容、Feed、IM、推荐的产品实现放在卷二;交易、支付、增长放在卷三;拆分、多活、成本治理放在卷四。
- 站内已有的
miniblog、design、algorithm-interview专题提供概念背景,本卷不重复综述。
代码与可复现性
- 本卷全部代码为 L1(单包、纯逻辑);13.2 的端到端用例为 L2(进程内
httptest)。 - 每个代码块的三行头给出文件路径、级别与验证命令;代码块与实验工程逐字节一致。
- 文中标注“实测”的输出均在本机 Go 1.26.0 上真实执行;未执行的一律写“示例/预期”。