主题
11 · 全栈中间件路线图(架构师视角)
目标:在 01~10 站稳后,按后端架构能力学中间件,而不是零基础扫清单。
前置:10 · 迷你 HTTP API · 系列入口:go/README
原则:官方/权威文档优先;Node/Koa 对照;项目驱动(手帐/博客场景举例)。
1. 你的优势不是语法
一年前端 + Node 熟 + Go 基础已过关,意味着:
| 已有 | 意味着学中间件时该怎么做 |
|---|---|
| Web 开发思维(路由、鉴权、错误码、分层) | 直接对标「生产 API 能力」,少重复 Express 入门课 |
| 异步 / Promise 心智 | 对照 goroutine、MQ、任务队列,学何时拆异步 |
| Journal 实战(Koa + Mongo + 上传等) | 每学一个中间件,问:手帐里哪块会用到? |
不要:把 Redis、RabbitMQ、K8s 当互不相关的工具说明书逐本背。
要:按「能独立扛一块后端」的能力阶梯往上爬。
2. 学习主线(固定顺序)
text
Go基础(01-10)
│
▼
Gin 生产栈(12-18) ← 能写生产级 Web API
│
▼
Redis(19-21) ⭐⭐⭐⭐⭐ ← 第一个必须吃透的中间件
│
▼
Docker(22) ⭐⭐⭐⭐⭐
│
▼
RabbitMQ + Asynq + Cron(23-25)
│
▼
MinIO + Elasticsearch(26-27)
│
▼
gRPC(28) → Kafka(29)
│
▼
Prometheus + OTel(30-31) → K8s(32)
│
▼
微服务框架扫读(33)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
本系列定稿取舍
| 议题 | 选择 | 原因 |
|---|---|---|
| Web 框架 | Gin | 生态大、资料多;Fiber 仅作对比一句 |
| MQ | 先 RabbitMQ,后 Kafka | Rabbit 心智更清晰,适合先建立 Exchange/Queue |
| 任务队列 | Asynq | Redis 已会后再学;对标「异步发邮件 / 导出」 |
| 对象存储 | MinIO | 私有 S3;与 Journal COS 只做概念对照 |
| 实践载体 | 独立练手仓(如 notesapi 升级版) | 不暑假重写整个 Journal 后端 |
3. 完整目录与状态
阶段一 · 已写(基础)
阶段二 · 中间件(本季起)
| # | 文档 | 优先级 | 建议时间盒 | 状态 |
|---|---|---|---|---|
| 11 | 本文 · 路线图 | — | 30′ 读完 | 已写 |
| 12 | Gin 入门与 net/http 对照 | ⭐⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 13 | 配置管理 Viper | ⭐⭐⭐⭐ | 1~2 天 | 已写 |
| 14 | 结构化日志 Zap | ⭐⭐⭐⭐ | 1~2 天 | 已写 |
| 15 | 参数校验 Validator | ⭐⭐⭐⭐ | 1~2 天 | 已写 |
| 16 | JWT 鉴权 | ⭐⭐⭐⭐⭐ | 2~3 天 | 已写 |
| 17 | GORM 与 MySQL | ⭐⭐⭐⭐⭐ | 4~7 天 | 已写 |
| 18 | 生产栈迷你项目串烧 | ⭐⭐⭐⭐⭐ | 1 周 | 已写 |
| 19 | Redis 数据结构与原理 | ⭐⭐⭐⭐⭐ | 1~1.5 周 | 已写 |
| 20 | go-redis 实战 | ⭐⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 21 | Redis 业务场景合集 | ⭐⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 22 | Docker 与 Compose | ⭐⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 23 | RabbitMQ 入门 | ⭐⭐⭐⭐ | 1~2 周 | 已写 |
| 24 | Asynq 任务队列 | ⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 25 | Cron 定时任务 | ⭐⭐⭐ | 1~2 天 | 已写 |
| 26 | MinIO 对象存储 | ⭐⭐⭐ | 3~5 天 | 已写 |
| 27 | Elasticsearch 搜索 | ⭐⭐⭐⭐ | 1~2 周 | 已写 |
| 28 | gRPC + ProtoBuf | ⭐⭐⭐⭐⭐ | 1~2 周 | 已写 |
| 29 | Kafka 概览 | ⭐⭐⭐⭐⭐ | 1~2 周 | 已写 |
| 30 | Prometheus + Grafana | ⭐⭐⭐⭐ | 1 周 | 已写 |
| 31 | OpenTelemetry 链路追踪 | ⭐⭐⭐⭐ | 3~5 天 | 已写 |
| 32 | Kubernetes 入门 | ⭐⭐⭐⭐ | 2~3 周 | 已写 |
| 33 | 微服务框架扫读与总复盘 | ⭐⭐⭐ | 3~5 天 | 已写 |
11~33 正文已齐;按主线顺序读,不必一次啃完。Kafka / K8s 等可「概念必会、实操可缩」。
4. 各阶段学什么(能力视角)
第一阶段:Go Web 生产栈(12~18)
目标:能写一个生产级 Web API。
text
Gin → Viper → Zap → Validator → JWT → GORM + MySQL → 串烧项目1
做到以后,可以独立写:用户系统、博客、手帐后台、商城后台这一类。
第二阶段:Redis(19~21)
第一个必须精通的中间件。几乎所有互联网项目都会用。
建议:2~3 周吃透(数据结构 → 持久化/事务/PubSub/Lua/Cluster 扫读 → go-redis → 业务场景)。
第三阶段起(23+)
| 阶段 | 学什么 | 为何排这里 |
|---|---|---|
| MQ | Rabbit 再 Kafka | 先理解路由语义,再学高吞吐日志型 |
| 任务队列 | Asynq | Redis 之上的「异步 job」心智 |
| 对象存储 / 搜索 | MinIO / ES | 上传与全文检索是常见缺口 |
| RPC | gRPC | Go 生态服务间通信标配 |
| 可观测 | Prom / OTel | 会写还要会看慢在哪 |
| 编排 | Docker → K8s | 先容器化,再编排 |
| 框架 | go-zero / Kratos | 最后扫读,避免被框架淹没 |
5. 与 Node / Journal 对照
| Node / Journal 侧印象 | Go 侧对应 | 本系列篇 |
|---|---|---|
| Express / Koa | net/http → Gin | 07、12 |
| dotenv / config | Viper | 13 |
| winston / pino | Zap | 14 |
| joi / zod | validator | 15 |
| jsonwebtoken | JWT(golang-jwt) | 16 |
| mongoose / prisma | GORM + MySQL | 17 |
| ioredis | go-redis | 20 |
| bull / 自写队列 | Asynq / RabbitMQ | 23~24 |
| 腾讯云 COS | MinIO(S3 语义) | 26 |
| 进程内 setInterval | robfig/cron | 25 |
Journal 生产方案仍在 docs/spec/;本系列只用「手帐场景」举例,不改仓库后端实现。
6. 项目驱动:手帐场景映射
| 中间件 | 可落地场景(练手仓) | 简历可讲 STAR 锚点 |
|---|---|---|
| Redis | 登录 Token、验证码、热门手帐、排行榜、点赞、分布式锁 | 「用 Redis 扛热点读 + 防超卖式锁」 |
| RabbitMQ / Asynq | 异步生成 PDF、通知、图片压缩、AI 总结 | 「同步接口削峰,异步可重试」 |
| MinIO | 图片、附件、导出文件 | 「预签名上传,不经业务机中转大文件」 |
| Elasticsearch | 手帐全文、标签、联想 | 「倒排索引支撑搜索体验」 |
| gRPC | 用户 / 手帐 / AI 拆服务后的调用 | 「IDL 契约 + 拦截器统一鉴权」 |
| Prom + OTel | 接口耗时、QPS、错误率、慢请求定位 | 「用指标和链路证明瓶颈」 |
| Docker + K8s | 一键起依赖、扩容 | 「从本机 Compose 到可扩容部署」 |
7. 节奏与暑假约束
算法仍是暑期主线时:
| 项 | 约定 |
|---|---|
| 平日 | 算法后 30~45′ 中间件(读 1 篇或敲 demo) |
| 周末 | 半天 冲当前阶段里程碑(如 18 串烧、Compose 拉起) |
| 能量不够 | 砍新篇,不砍「本周一个可跑 demo」 |
| 明确不做 | 第一周并行 Gin + gRPC + K8s;暑假重写整个 Journal |
8. 单篇怎么读(模板)
后续 12~33 统一结构:
- 目标 + 前置 + 官方入口
- 概念(为何需要 · Node 对照)
- 最小可跑 demo
- 动手清单 / 验收
- 项目驱动场景
- 常见坑 + AI 审查要点
- 下一篇预告
9. 验收(读完本文)
- [ ] 能默写主线顺序(至少到 Docker)
- [ ] 说清为何 Redis 排在 MQ / K8s 前面
- [ ] 指出 Journal 里 3 个「以后可用中间件」的点(不必现在做)
- [ ] 打开 12 · Gin 开始生产栈
