全书 45 篇:13 章正文 + 序、前言、目录 + 附录 A/B/C。每节配可运行的 Go 代码,代码块用
// file:/// tier:/// verify:标注,可在实验工程中逐字节还原。
本页是卷二的完整索引。可以从目录与学习路径 按顺序通读,也可以按问题跳读。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《互联网产品的服务端架构》卷二 |
| 已发布篇数 | 45 篇(含目录与附录) |
| 主线语言 | Go 1.26.0(实验工程 module webapp) |
| 贯穿案例 | 内容社区 + IM + 轻交易「回声」 |
| 阅读方式 | 目录篇顺序通读,或按章节表跳读 |
| 上级专题 | 书稿专题 |
前置
| 篇 | 文章 | 核心内容 |
|---|---|---|
| 序 | 序 | 卷二序:当产品从「能注册、能改资料」长到「有人发、有人看、有人回应」,服务端要解决的核心… |
| 前言 | 前言 | 卷二前言:说明本书的读者对象、13 章的组织方式、每章的统一结构、可运行 Go 实验工程… |
| 目录 | 目录与学习路径 | 卷二目录:13 章从内容模型、发布审核、Feed 推拉与排序,讲到社交关系、计数与互动、… |
第 1 章 内容模型
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 文本、图片与视频的元数据 | 从一次只存 URL 的上传接口出发,说明文本、图片与视频的元数据为什么是审核、检索、转码… |
| 1.2 | 1.2 内容状态机:草稿、审核、发布、删除 | 从作者在审核中又改了一版内容出发,说明草稿、审核、发布、删除四个状态为什么必须把发起人、… |
| 1.3 | 1.3 内容存储的冷热分层 | 从一篇三个月前的爆款帖被迁到冷存储后点开要等八秒出发,说明冷热分层为什么按访问而不是创建… |
第 2 章 发布与审核
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 2.1 发布链路的同步与异步 | 从「回声」创作者点击发布后转圈八秒的故障出发,拆解发布链路里哪些步骤必须在请求内完成、哪… |
| 2.2 | 2.2 机审、人审与复审 | 用一条被误判的宠物视频串起机审、人审与复审:机审输出置信度,人审处理灰区,复审靠抽样与申… |
| 2.3 | 2.3 审核失败的用户体验与申诉 | 审核失败时只回一句「内容违规」,用户会反复提交同一内容,客服也无法解释。文章把失败提示拆… |
第 3 章 Feed 模型
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 拉模式:读时聚合 | 从关注 500 人与 5000 人的首页刷新出发,拆解拉模式为什么把成本放在读时:一次刷… |
| 3.2 | 3.2 推模式:写时扩散 | 从一条粉丝 500 万的明星动态出发,拆解推模式为什么把成本放在写时:一条内容要扩散多少… |
| 3.3 | 3.3 推拉结合与混合时间线 | 从普通用户关注 800 人的首页出发,拆解混合时间线为什么必须按作者分层而不是按用户分层… |
第 4 章 Feed 排序
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 时间、热度与多样性 | 从三天前爆款占满首页的事故写起,拆解时间衰减、点赞热度与作者亲和度三种信号各自的偏差,说… |
| 4.2 | 4.2 去重、折叠与已读 | 从用户点过一条内容、刷新后它就消失的投诉写起,区分按内容 ID 去重与按事件去重,讨论已… |
| 4.3 | 4.3 排序实验与效果回收 | 从实验组点击率涨了 8%、次留却跌了 2% 的事故写起,说明分桶必须稳定、指标必须先定、… |
第 5 章 社交关系
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 5.1 关注、好友与双向关系 | 从「回声」上线好友功能后的一次投诉写起:一方删除好友,另一方仍能看到仅好友可见的动态。文… |
| 5.2 | 5.2 拉黑、屏蔽与可见性判定 | 从「回声」一次拉黑只在前端生效的事故写起:用户拉黑骚扰者后,换个客户端仍能看到对方内容。… |
| 5.3 | 5.3 关系链的存储与查询 | 从「回声」共同好友查询在 1 万好友时耗时 12 秒的事故写起,拆解我关注谁、谁关注我、… |
第 6 章 计数与互动
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 6.1 点赞、评论与收藏 | 从「回声」上线点赞后计数不动的投诉写起:拆解点赞、评论、收藏三种互动对一致性的不同要求,… |
| 6.2 | 6.2 计数一致性:精确、近似与对账 | 从「回声」大 V 取消点赞后计数仍上涨的事故写起:对比精确计数、近似去重计数与对账重建三… |
| 6.3 | 6.3 互动防刷与频控 | 从「回声」一次点赞活动被代理池刷穿的事故写起:说明「同一用户对同一目标」「同一 IP 多… |
第 7 章 评论
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 评论树与分页 | 从「回声」评论区「查看更多回复」翻页出现重复评论的事故写起,对比平铺、两层与多级评论树的… |
| 7.2 | 7.2 评论审核与折叠 | 从「回声」一条违规评论在正文审核通过后存活四十分钟的事故写起,拆解正文、根评论、回复和昵… |
| 7.3 | 7.3 互动通知的触发边界 | 从「回声」用户被二十条连赞推送逼到关闭通知权限的事故写起,拆解自己操作、被屏蔽者、短时间… |
第 8 章 IM 消息模型
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 8.1 会话、消息与序号 | 从两个客户端同时发消息却看到不同顺序的事故写起,说明单聊会话 ID 如何由双方 ID 排… |
| 8.2 | 8.2 单聊、群聊与系统消息 | 从系统通知被用户回复、产生没有接收方的会话写起,对照单聊、群聊、系统会话的成员与发送权限… |
| 8.3 | 8.3 消息存储与漫游 | 从换手机拉取三年聊天记录把数据库打满的事故写起,比较按会话分片、按时间分区与按用户分片的… |
第 9 章 IM 投递
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 9.1 在线投递与离线补偿 | 从「回声」一次手机和电脑同时在线、消息只到手机的事故写起:在线投递只是尽力而为,多设备投… |
| 9.2 | 9.2 多端已读与未读计数 | 从「回声」手机读完消息、桌面未读数不降的事故写起:已读位置是多端上报的事实,未读数是派生… |
| 9.3 | 9.3 消息可靠性与去重 | 从「回声」网络抖动触发客户端重发、接收方看到两条相同消息的事故写起:去重不能依赖客户端单… |
第 10 章 推送与通知
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 渠道、模板与到达率 | 从「回声」一条发布成功通知用户却没看到写起:区分发送成功与真实到达,拆解 APNs、FC… |
| 10.2 | 10.2 通知聚合与频控 | 从「回声」用户一天收到 15 条推送后关闭通知写起:拆解按用户、按会话、按内容三种聚合维… |
| 10.3 | 10.3 推送失败与降级 | 从「回声」APNs 证书过期导致 iOS 推送静默失败三天写起:区分可重试与不可重试的失… |
第 11 章 搜索接入
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 11.1 索引与业务库的同步 | 从一篇已发布文章在搜索里消失十分钟的事故写起,说明索引是另一种读模型而不是业务库副本。文… |
| 11.2 | 11.2 召回、排序与过滤 | 从一次搜索结果里出现无权限标题、点进去 403 的事故写起,拆开召回、排序与过滤三个阶段… |
| 11.3 | 11.3 搜索一致性与删除 | 从作者删帖三天后搜索仍能看到摘要的事故写起,说明删除必须留下墓碑而不能等索引重建。文章用… |
第 12 章 推荐接入
| 节 | 文章 | 核心内容 |
|---|---|---|
| 12.1 | 12.1 推荐服务与业务服务的边界 | 推荐服务与业务服务的边界一旦模糊,推荐侧就会悄悄依赖内容库表结构,内容团队一次字段迁移就… |
| 12.2 | 12.2 特征、候选与在线服务 | 在线推荐最常见的性能事故,是在请求链路里现算长周期特征,p99 会从几十毫秒涨到近一秒。… |
| 12.3 | 12.3 冷启动与效果兜底 | 冷启动不是“没有特征就随机”,而是要有明确的兜底链和降级条件,否则新用户会看到空白首页。… |
第 13 章 收口
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 13.1 发布→Feed→互动→通知 | 从「回声」一次发布因通知失败整条回滚的事故写起:拆解发布、Feed 分发、互动与通知四个… |
| 13.2 | 13.2 IM 与未读的端到端验证 | 以多端联调时手机未读归零、平板仍显示 3 的事故写起:说明单测为什么抓不到会话 ID 不… |
| 13.3 | 13.3 质量指标与进入卷三 | 收口卷二:用 Feed 新鲜度、消息到达率与未读准确率三个指标判断内容社交系统是否变好,… |
附录
| 篇 | 文章 | 核心内容 |
|---|---|---|
| 附录 A 内容与社交数据模型 | 附录 A 内容与社交数据模型 | 把卷二涉及的内容、媒体、审核、关系、评论、计数、会话、消息、已读与索引整理成一张可对照的… |
| 附录 B Feed 与 IM 参数表 | 附录 B Feed 与 IM 参数表 | 把卷二各章的阈值、窗口、上限与默认值集中成表:内容分层、审核时限、推拉门槛、排序权重、频… |
| 附录 C 互动与通知检查清单 | 附录 C 互动与通知检查清单 | 把卷二各章的判断整理成可直接使用的检查清单:发布与审核、可见性、Feed、互动计数、评论… |
怎么读这一卷
- 第一次读:从序和前言开始,按 1.1 到 13.3 顺序读,每节的代码都在同一实验工程里。
- 带着问题读:内容状态看第 1、2 章,Feed 看第 3、4 章,可见性看第 5 章,消息与未读看第 8、9 章,搜索与推荐看第 11、12 章。
- 只想跑代码:直接看附录 B
,按包运行
go test。
与其他书稿的边界
- 通用架构模式、DDD、C4、ADR 的概念细节在《后端架构设计》里,本卷不重复综述。
- 账号、资料、BFF、缓存、异步、发布、观测、容量等基础能力在卷一;本卷只讲它们在内容与社交场景下的变化。
- 交易、支付、增长放在卷三;拆分、多活、成本治理放在卷四。
- 站内已有的
miniblog、design、algorithm-interview专题提供概念背景,本卷不重复综述。
代码与可复现性
- 本卷第 1–12 章代码为 L1(单包、纯逻辑);13.2 的端到端用例为 L2(进程内
httptest)。 - 每个代码块的三行头给出文件路径、级别与验证命令;代码块与实验工程逐字节一致。
- 文中标注“实测”的输出均在本机 Go 1.26.0 上真实执行;未执行的一律写“示例/预期”。