# 案例 05 · FeedStream:社交 Feed 与视频内容分发系统
> 一句话点题:**本案例练的是「内容分发的放大效应」——Feed 系统的难点不是存一条内容,而是让千万人各自刷到不同的一屏,并在大 V、爆款视频、搜索、推荐和 CDN 成本之间做取舍。**
---
> **🧪 案例篇第 5 篇 · 本案例只练一件事**
>
> 练**社交 Feed + 内容搜索 + 视频分发**下的架构判断:什么时候用推模型,什么时候用拉模型,大 V 和爆款内容怎么兜住,视频为什么必须转码和 CDN,搜索 / 推荐 / 审核如何不拖垮主链路。
>
> | 读完你应该能 | 本案例靠什么练 |
> |---|---|
> | 说清 Feed 为什么不是简单查帖子列表 | 用读写不对称和个性化首页解释时间线收件箱 |
> | 判断推 / 拉 / 混合 Feed 怎么选 | 用普通人推、大 V 拉解决扇出爆炸 |
> | 看懂图片 / 视频为什么不能走业务源站 | 用转码、分片、CDN、预热和回源解释带宽成本 |
> | 把搜索、推荐、审核放进内容分发架构 | 用召回 / 排序 / 审核召回和降级兜住体验与安全 |
>
> **重要提醒:下面是教学化案例,不是某个社交平台的内部图纸。** 数字用于数量级推理,目的是练判断,不是给出唯一答案。
---
## 开场:为什么 Feed 不是「查我关注的人发了什么」
因为一个内容产品真正卖的不是发帖按钮,而是用户每次打开时那一屏内容。
> **FeedStream** 是一个图文 + 短视频内容社区。用户可以关注创作者、发布图文或视频、点赞评论、搜索内容,也会看到系统推荐的内容。普通创作者只有几百粉丝,头部创作者有几百万粉丝。热门视频上线后,几十万人会在几分钟内同时点开。
第一眼看,它像是普通内容系统:
- 用户发帖;
- 粉丝看首页;
- 点赞评论;
- 搜索关键词;
- 上传视频;
- 推荐一些内容。
但真正上线后,最危险的不是「帖子存不下」,而是:
> **首页刷新太慢、大 V 一发文打爆扇出队列、爆款视频回源压垮源站、违规内容已经扩散到几百万人的时间线里。**
所以这一章不写「怎么做一个帖子表」。它问一个更具体的问题:
> **如何把海量内容分发给不同的人,同时控制热点、排序、媒体带宽和内容安全?**
这章和前几章的压力源不同:
- [StarArena](../stararena-ticketing/README.md) 怕的是库存和支付状态。
- [PatchDesk](../patchdesk-saas/README.md) 怕的是多租户边界。
- [DocuMind](../documind-rag/README.md) 怕的是答案可信。
- [SyncRoom](../syncroom-collaboration/README.md) 怕的是实时状态收敛。
- **FeedStream 怕的是一次写入被放大成海量读取、海量分发和海量带宽。**
---
## 读前小词典
这篇会反复出现几个词,先用人话对齐一下:
| 词 | 人话解释 |
|---|---|
| Feed | 信息流。用户打开首页看到的一串内容。 |
| Timeline | 时间线。按某种顺序排列的一组内容 ID,可以是个人主页流,也可以是首页流。 |
| Fan-out | 扇出。一条内容要分发给很多接收者。 |
| 推模型 / 写扩散 | 发文时就把内容 ID 写进粉丝的收件箱,读的时候很快。 |
| 拉模型 / 读扩散 | 发文时只存一份,用户刷新时再去拉取关注对象的内容。 |
| 混合模型 | 普通人走推,大 V 走拉。避免大 V 发文时一次写爆。 |
| 大 V | 粉丝很多的头部创作者。它的发文会造成极端扇出。 |
| 收件箱 | 每个用户自己的 Feed 候选列表,通常只存内容 ID,不存正文。 |
| 召回 | 先从海量内容里粗略找一批候选。 |
| 排序 / 精排 | 对候选内容打分,决定先给用户看哪条。 |
| CDN | Content Delivery Network,内容分发网络。把图片、视频等静态内容缓存到离用户更近的边缘节点。 |
| 回源 | CDN 没命中缓存,只能回到源站 / 对象存储拿内容。回源通常更慢也更贵。 |
| 转码 | 把一个源视频加工成多种清晰度 / 码率,让不同网络都能播放。 |
| ABR | Adaptive Bitrate,自适应码率。播放器根据网络情况动态切换清晰度。 |
| 审核召回 | 内容被判违规后,不仅要下架原文,还要从搜索、推荐、时间线、缓存里撤掉。 |
---
## 一、起始状态:先验证内容供给和消费,别先造推荐帝国
FeedStream 的第一版目标很朴素:**让用户能关注创作者,看到关注内容,发布图文和短视频。**
起始阶段的约束大概是这样:
| 维度 | 起始阶段 |
|---|---|
| 日活用户 | 1 万以内 |
| 创作者 | 1,000~5,000 |
| 日发内容 | 5,000~20,000 条 |
| 视频占比 | 10%~20% |
| 峰值 Feed 读取 | 200~500 QPS |
| 团队规模 | 5~8 名工程师 |
| 核心目标 | 验证有没有人发、有没有人刷、有没有互动 |
| 最不能错 | 首页不能长期刷不出;违规内容不能无控制扩散 |
这时最合理的架构不是全量推荐平台,而是**内容服务 + 关注关系 + 简单 Feed 读取 + 对象存储 / CDN**:
```
用户发内容
│
▼
┌────────────────────────────────────────────┐
│ 内容服务 │
│ 写帖子正文、媒体地址、作者、可见性、审核状态 │
└──────────────┬─────────────────────────────┘
▼
┌──────────────┐
│ 内容存储 │
│ post / media │
└──────────────┘
用户刷首页
│
▼
┌────────────────────────────────────────────┐
│ Feed 读取服务 │
│ 查关注列表 → 拉取最近内容 → 简单排序 → 返回 │
└────────────────────────────────────────────┘
图片 / 视频 → 对象存储 → CDN
```
这不是「架构简陋」。在没有大 V、没有海量读之前,拉模型简单、灵活,足够验证产品。
---
## 二、量化假设:它不是被写入压垮,而是被读取和热点压垮
先算一笔账。假设 FeedStream 推广半年后:
```
日活用户:2,000,000
月活用户:10,000,000
创作者:500,000
每日新内容:1,000,000 条
视频内容:200,000 条/天
峰值发文:2,000~5,000 条/秒
峰值 Feed 刷新:50,000~150,000 QPS
普通用户粉丝:100~2,000
中腰部创作者粉丝:10,000~200,000
头部创作者粉丝:1,000,000~20,000,000
爆款视频:10 分钟内 500,000 次播放
目标:首页刷新 P95 < 500ms,发文到可见通常 < 10s
视频目标:首帧 < 2s,卡顿率尽量接近 0,CDN 命中率 > 95%
审核目标:高风险内容先审后扩散;违规内容 5 分钟内从主要分发面撤回
```
这个数量级里,写内容不是最大问题。真正危险的是:
1. **读远多于写**:一次发文后,可能被读几千、几万、几百万次。
2. **粉丝分布极端倾斜**:普通人几百粉,大 V 几百万粉,不能同一种扇出策略。
3. **视频带宽是真成本**:每多播放一分钟,都在烧 CDN 和带宽钱。
4. **违规内容会被系统放大**:Feed 和推荐越强,扩散越快,召回也越难。
所以 FeedStream 的架构重心不是「帖子怎么落库」,而是:
> **把个性化读取变快,把热点扩散变可控,把媒体分发从源站挪到边缘,把审核召回做成系统能力。**
---
## 三、触发信号:什么时候说明第一版开始不够用
第一版跑起来后,不要凭感觉升级。看这些信号:
| 信号 | 表现 | 为什么这是架构问题 |
|---|---|---|
| 首页刷新越来越慢 | 用户关注 1,000 人后,每次刷新都要聚合很多人的内容 | 纯拉模型读放大,读路径开始扛不住 |
| 大 V 发文导致队列堆积 | 一条内容要写入几百万粉丝收件箱 | 纯推模型遇到头部账号扇出爆炸 |
| 热门内容正文查询打满 | 爆款内容被反复回填正文 | 内容正文和媒体缺少热点缓存 |
| 视频播放回源飙升 | 新热视频上线后 CDN 未命中,源站带宽打满 | 热点内容没有预热 / 回源合并 |
| 搜索结果搜不到新内容 | 新内容发布几分钟后还搜不到 | 索引新鲜度跟不上 |
| 推荐结果质量波动 | 用户刷到大量重复、低质、过期内容 | 召回 / 排序 / 去重链路不稳定 |
| 违规内容扩散后难撤 | 内容删了,但 Feed、搜索、缓存里还能看到 | 审核状态没有贯穿分发链路 |
| 点赞数忽高忽低 | 计数缓存和真实互动日志长期不一致 | 派生计数没有可重算来源 |
这些信号不是在说「数据库不够大」。它们在说:**内容分发开始放大一切,包括热点、成本和错误。**
---
## 四、核心矛盾:每个人都要一条自己的首页
FeedStream 的核心对象有四组:
1. **内容 / 媒体 / 作者**:发了什么,媒体在哪里,审核状态如何。
2. **关注关系 / 可见性**:谁关注谁,谁能看到这条内容,拉黑和隐私规则是什么。
3. **时间线 / 推荐候选 / 排序结果**:用户首页那一屏从哪里来,为什么这样排。
4. **搜索 / 审核 / 互动信号**:内容能不能搜到,能不能继续分发,用户如何反馈。
如果只看最简单路径,它像这样:
```
用户刷新首页 → 查我关注的人 → 查他们最近发的内容 → 排序返回
```
但真实系统必须在每一步都回答:
- 我关注的人很多,每次都现查能不能撑住?
- 大 V 发文时,要不要写进每个粉丝的收件箱?
- 时间线里存正文还是只存内容 ID?
- 推荐排序能不能在 500ms 内完成?
- 视频播放从哪里取?CDN 没命中怎么办?
- 内容后来被判违规,怎么从时间线、搜索、推荐、CDN 里撤掉?
所以新的架构命题变成:
> **Feed 是一台个性化内容分发引擎,不是一张 posts 表。**
关键分层是:
```
内容权威层:帖子正文、媒体、审核状态、可见性
分发层:时间线收件箱、推 / 拉 / 混合扇出
排序层:候选召回、粗排、精排、去重、多样性
媒体层:转码、对象存储、CDN、预热、回源保护
安全层:审核、下架、召回、风控、可见性过滤
```
---
## 五、方案推演:Feed 到底推还是拉
这是本案例最重要的决策。Feed 系统的核心问题是:首页到底提前算好,还是刷新时现算?
### 方案 A:纯拉模型,刷新时现查
```
用户刷新
└─▶ 查我关注的所有人
└─▶ 查他们最近发的内容
└─▶ 合并排序返回
```
| 优点 | 代价 |
|---|---|
| 发文很轻,只写一份 | 用户关注多了之后,每次刷新读放大严重 |
| 关注 / 取消关注立即生效 | Feed QPS 高时,读取路径很难撑住 |
| MVP 简单 | 难以做到 P95 < 500ms |
### 方案 B:纯推模型,发文时写进粉丝收件箱
```
用户发文
└─▶ 查粉丝列表
└─▶ 把内容 ID 写进每个粉丝的 Feed 收件箱
```
| 优点 | 代价 |
|---|---|
| 首页读取极快,直接读自己的收件箱 | 大 V 一发文就是百万 / 千万级写入 |
| 适合读远多于写 | 扇出队列、时间线存储压力大 |
| 可以把排序结果预先准备好一部分 | 关注关系变化后的修正更复杂 |
### 方案 C:推拉混合,普通人推,大 V 拉
```
普通创作者发文 → 推进粉丝收件箱
大 V 发文 → 只写自己的作者流
用户刷新首页 → 读收件箱 + 拉取关注大 V 的新内容 + 排序合并
```
| 优点 | 代价 |
|---|---|
| 普通内容读取快 | Feed 读取服务要合并两路候选 |
| 避免大 V 扇出爆炸 | 大 V 内容会成为读时热点,需要缓存 |
| 能按粉丝数阈值分治 | 阈值、灰度和中腰部账号策略要持续调 |
FeedStream 成长期选择:**推拉混合。普通人内容写扩散,大 V 内容读时拉取,两路在 Feed 读取服务里合并。**
关键不在「推还是拉谁更高级」,而在于:
> **粉丝分布极端倾斜,所以必须分而治之。对 99% 便宜情况优化,把 1% 会爆炸的情况单独处理。**
---
## 六、关键架构决策:用 ADR 把为什么留下来
ADR 是 Architecture Decision Record,可以理解成「架构决策记录」。Feed 系统最容易在后面被人问:「为什么时间线只存 ID?为什么大 V 不推?为什么视频要异步转码?为什么审核要影响分发?」这些都应该提前写下来。
### ADR-01:Feed 采用推拉混合,而不是纯推或纯拉
- **背景**:读远多于写,首页刷新必须快;但粉丝数极端倾斜,大 V 写扩散会爆炸。
- **选择**:粉丝数低于阈值的创作者走写扩散,发文时写进粉丝收件箱;头部创作者只写作者流,由粉丝刷新时拉取并合并。
- **放弃**:放弃所有账号同一种分发策略。
- **换来**:普通用户首页读取快,大 V 发文不会打爆扇出队列。
- **风险**:Feed 读取链路更复杂,需要合并、去重、排序和缓存大 V 内容。
- **复审条件**:当中腰部账号频繁触发阈值边界,需要按活跃粉丝、内容热度和账号等级动态调整策略。
### ADR-02:时间线收件箱只存内容 ID,正文和媒体读时批量回填
- **背景**:一条热门内容可能进入百万用户收件箱,如果每份都存正文和媒体信息,空间会爆炸。
- **选择**:时间线收件箱存 `post_id`、作者、时间、轻量排序分等引用信息;读取时批量回填正文、计数和媒体地址。
- **放弃**:放弃在每个收件箱里复制完整内容。
- **换来**:空间可控,热门内容只存一份权威正文,修改审核状态时也更容易统一生效。
- **风险**:读取时多一次批量回填,热门内容正文存储会成为热点。
- **复审条件**:当回填成为瓶颈时,给热门正文、互动计数和整屏 Feed 增加短缓存。
### ADR-03:视频上传后异步转码,通过对象存储 + CDN 分发
- **背景**:源视频巨大,用户网络差异大,源站直发会导致卡顿和带宽成本失控。
- **选择**:上传源视频后立即返回处理中;后台转码为多档分片和 manifest;播放时走 CDN,播放器用 ABR 按网络选择分片清晰度。
- **放弃**:放弃上传请求里同步转码,也放弃源站直接分发视频。
- **换来**:上传体验不卡,播放更流畅,带宽成本由 CDN 命中率控制。
- **风险**:上传后到可播放有延迟;转码队列和 CDN 回源都需要监控。
- **复审条件**:当爆款内容经常回源打满,需要热点预热、回源合并和多 CDN 策略。
### ADR-04:审核状态必须贯穿 Feed、搜索、推荐和 CDN
- **背景**:内容平台会出现违法、有害、侵权或垃圾内容;分发系统越强,错误扩散越快。
- **选择**:内容有统一审核状态;高风险内容先审后扩散;下架事件异步通知 Feed 收件箱、搜索索引、推荐候选、缓存和 CDN;读取时也要二次检查可见性。
- **放弃**:放弃只在内容详情页隐藏违规内容的做法。
- **换来**:违规内容能从主要分发面撤回,可见性规则在写入和读取两侧都生效。
- **风险**:召回链路复杂,可能出现某个分发面漏撤。
- **复审条件**:当平台开始承载 UGC 大规模内容时,审核召回要作为一级能力,并建立下架回归测试。
---
## 七、演进后的结构与数据流
下面只画 FeedStream 的核心结构。它不是一个帖子 CRUD,而是一套内容分发、排序、媒体分发和审核召回系统。
### 起始路径
```
用户发文 → posts 表
用户刷新 → 查关注列表 → 查 posts → 返回
视频播放 → 源站文件地址
```
问题是:读放大、大 V 扇出、视频带宽、审核召回都没有结构化。
### 演进后的结构
```
用户发内容
│
▼
┌──────────────────────────────────────────────┐
│ 内容服务 │
│ 写正文 / 可见性 / 审核状态 / 媒体元数据 │
└──────┬───────────────────────┬───────────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────────────┐
│ 内容存储 │ │ 媒体管线 │
│ post 权威副本 │ │ 上传 → 转码 → 对象存储 → CDN│
└──────┬───────┘ └──────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Feed 分发服务 │
│ 普通人写扩散 → 粉丝收件箱 │
│ 大 V 只写作者流 → 读时拉取 │
└──────┬───────────────────────┬───────────────┘
▼ ▼
┌──────────────┐ ┌──────────────────────┐
│ 时间线收件箱 │ │ 搜索 / 推荐索引 │
│ user -> post_id│ │ 候选召回 / 排序特征 │
└──────┬───────┘ └──────────┬───────────┘
▼ ▼
┌──────────────────────────────────────────────┐
│ Feed 读取服务 │
│ 读收件箱 → 拉大 V → 回填正文 → 过滤可见性 │
│ → 排序 / 去重 / 多样性 → 返回一屏 │
└──────────────────────────────────────────────┘
```
这张图的核心变化不是「多了推荐」,而是结构变清楚了:
- **内容服务**保存权威正文、媒体引用、审核状态和可见性。
- **Feed 分发服务**决定推还是拉,并异步写入时间线收件箱。
- **时间线收件箱**只存内容 ID,服务于低延迟读取。
- **Feed 读取服务**合并普通内容、大 V 内容、推荐候选,再做回填、过滤、排序。
- **媒体管线**把图片 / 视频从业务源站移到对象存储和 CDN。
- **审核召回**贯穿内容、Feed、搜索、推荐、缓存和 CDN。
### 跟一次「普通创作者发文」走到底
```
1. 创作者发一条图文。
2. 内容服务写入 post 权威副本,状态为待分发或已审核。
3. Feed 分发服务查粉丝列表,发现粉丝数 800。
4. 这属于普通账号,异步把 post_id 写入 800 个粉丝的时间线收件箱。
5. 粉丝刷新首页时,直接从自己的收件箱取最新 post_id。
6. Feed 读取服务批量回填正文、互动计数和媒体 URL。
7. 排序服务打分,再做去重和多样性控制。
8. 用户看到这一屏内容。
```
### 跟一次「大 V 发爆款视频」走到底
```
1. 大 V 上传一个短视频。
2. 上传服务把源视频存入对象存储,投递转码任务,立即返回处理中。
3. 转码服务异步生成 1080p / 720p / 480p 等分片和 manifest。
4. 内容审核通过后,内容服务标记视频可分发。
5. 因为这是大 V,Feed 分发服务不把 post_id 写入几百万粉丝收件箱,只写作者流。
6. 粉丝刷新 Feed 时,读取服务发现用户关注了该大 V,拉取作者流里的新视频。
7. 排序服务把它并入候选,如果分数足够高,进入用户首页。
8. 播放器请求 manifest 和视频分片,优先命中 CDN。
9. 如果预测会爆,系统提前预热头部分片到 CDN;未命中回源时做请求合并,避免源站惊群。
```
这里的关键点:
- 大 V 内容不写扩散,避免发文时扇出爆炸。
- 读时拉取大 V 内容必须配热点缓存,否则会把读压力转移到作者流。
- 视频播放不走业务服务,而走对象存储 + CDN。
- 审核没过的内容不能进入 Feed、搜索和推荐候选。
---
## 八、坏了怎么办:故障场景与兜底
| 故障 | 直接后果 | 检测方式 | 架构兜底 |
|---|---|---|---|
| 纯拉模型读放大 | 首页刷新慢,数据库被关注聚合打满 | Feed P95、关注数分布、查询扇出数 | 普通用户改写扩散,预计算时间线收件箱 |
| 纯推模型遇到大 V | 一条内容触发百万级写入,队列堆积 | fanout queue lag、单 post 扇出数 | 大 V 走读时拉取,粉丝数阈值动态调整 |
| 时间线存完整正文 | 爆款内容被复制百万份,空间失控 | 时间线存储膨胀 | 收件箱只存 post_id,读时批量回填 |
| 大 V 作者流无缓存 | 粉丝刷新时把作者流读爆 | 作者流 QPS、热点 post 回填量 | 热点作者流和热门正文短缓存 |
| 扇出同步阻塞发文 | 用户发文卡住甚至失败 | 发文延迟、扇出耗时 | 发文只落权威副本,扇出异步队列 |
| CDN 未命中率飙升 | 视频首帧慢,源站带宽打满 | CDN hit ratio、origin egress | 热点预热、分层缓存、回源请求合并 |
| 转码队列堆积 | 视频上传后长时间不可播 | 转码队列长度、任务耗时 | 转码 worker 弹性扩容,冷内容少转码档 |
| 搜索索引滞后 | 新内容搜不到或旧违规内容还能搜到 | 索引新鲜度、旧状态命中 | 近实时增量索引,下架事件优先处理 |
| 推荐候选重复 / 低质 | 用户刷到重复内容或垃圾内容 | 重复率、负反馈率、停留时长 | 去重、多样性规则、质量过滤、反馈闭环 |
| 违规内容已扩散 | Feed、搜索、缓存里仍可见 | 下架回归、内容状态扫描 | 审核状态贯穿全链路,下架事件召回各索引和缓存 |
| 可见性只在前端判断 | 私密内容进入不该看的人的 Feed | 权限穿透测试、投诉 | 扇出和读取两侧都强制可见性过滤 |
| 互动计数长期错误 | 点赞数、评论数和真实日志不一致 | 计数对账、异常波动 | 计数可缓存,但以互动日志可重算 |
内容分发的成熟度,不是看首页能不能刷出内容,而是看热点、违规、回源、推荐退化这些放大效应有没有被结构兜住。
---
## 📌 拿模板验证这次推演
本案例不是重写社交 Feed 或视频流模板,而是把「内容社区」里最容易互相影响的几条链路放在一起推演。
| 可复用模板 / 章节 | 本案例复用什么 | 本案例重点补什么 |
|---|---|---|
| [社交信息流](../../templates/social-feed/README.md) | 推 / 拉 / 混合、时间线收件箱、大 V 扇出 | 用具体内容社区解释为什么普通人推、大 V 拉 |
| [视频流媒体](../../templates/video-streaming/README.md) | 转码、多码率、对象存储、CDN、预热 | 把视频分发放进 Feed 热点内容场景 |
| [搜索引擎](../../templates/search-engine/README.md) | 倒排索引、召回 + 精排、索引新鲜度 | 说明站内搜索和推荐候选都需要索引与过滤 |
| [通知 / 推送系统](../../templates/notification-system/README.md) | 异步通知、去重、限频 | 互动提醒不能阻塞发文和 Feed 读取 |
| [规模化的力学](../../tutorial/13-规模化的力学.md) | 热点、扇出、缓存、读写放大 | 把大 V、爆款视频、CDN 回源都看成放大问题 |
| [安全与多租户架构](../../tutorial/16-安全与多租户架构.md) | 可见性、权限、隔离 | 把私密内容、拉黑、审核状态落到分发链路 |
> **读法建议**:先读本章,再回看 [社交信息流模板](../../templates/social-feed/README.md) 和 [视频流媒体模板](../../templates/video-streaming/README.md)。你会更容易看懂:Feed 和视频看似两个系统,但热点和分发成本会把它们绑在一起。
---
## 🎯 随堂检验
---
## 本案例小结
- **Feed 不是查 posts 表,而是个性化分发引擎。** 每个人的首页都不同,读远多于写,所以读取路径是主战场。
- **推拉混合是大规模 Feed 的核心取舍。** 普通人走写扩散换读取速度;大 V 走读时拉取避免扇出爆炸。
- **时间线存引用,正文读时回填。** 这是空间、热点缓存和审核一致性的关键。
- **视频内容必须离开业务源站。** 转码、多码率、对象存储、CDN、预热和回源保护决定播放体验和带宽成本。
- **推荐和搜索是召回 + 排序漏斗。** 不要试图每次刷新实时重算全网,而是先召回候选,再对小集合打分。
- **审核召回是分发系统的一部分。** 内容被系统扩散到哪里,下架就必须能撤到哪里。
> **承上启下**:这一章把内容 Feed、搜索、推荐和视频 CDN 放进同一个内容社区。下一章如果继续写 AI Agent / 编码 Agent,压力会再次变化:重点会从内容分发,转向工具调用、权限、沙箱、记忆、上下文和人工审批。
---
## 相关链接
- 模板对照:[社交信息流](../../templates/social-feed/README.md) · [视频流媒体](../../templates/video-streaming/README.md) · [搜索引擎](../../templates/search-engine/README.md) · [通知 / 推送系统](../../templates/notification-system/README.md)
- 方法论:[02 · 架构师的思考框架](../../tutorial/02-架构师的思考框架.md) · [07 · 从 0 到 1 设计一个系统](../../tutorial/07-从0到1设计一个系统.md) · [08 · 架构决策记录与演进](../../tutorial/08-架构决策记录与演进.md)
- 硬骨头:[13 · 规模化的力学](../../tutorial/13-规模化的力学.md) · [16 · 安全与多租户架构](../../tutorial/16-安全与多租户架构.md)