主题
互联网常用方案 — 学习路线
本目录是一组横切设计方案,不是某一款中间件的使用手册。索引只做导航:每篇讲一个问题的机制、最小验证和边界,具体参数与版本以正文为准。
怎么读
先读 01、03、05、11,建立「唯一 ID、缓存、身份、流量控制」四个基础件;再读 02、10、09、04,理解跨服务一致性、重复请求、分区取舍和秒杀链路;最后读 12、13,看流量与数据如何按版本、按客户切开。06、07、08 相对独立,按需查阅。
篇目与产出
| # | 篇目 | 读完能产出什么 |
|---|---|---|
| 01 | 分布式 ID 生成 | 能选 Snowflake、号段、UUID v7;能写出原子的取号 SQL,并处理时钟回拨和 workerId 冲突 |
| 02 | 分布式事务 | 能按一致性要求选 2PC/TCC/Saga/本地消息表/Seata AT;能解释 AT 的全局锁和 undo_log 边界 |
| 03 | 缓存设计 | 能写 Cache Aside 读写路径,处理穿透/击穿/雪崩;能说清 Write Behind 的丢数据窗口 |
| 04 | 秒杀系统设计 | 能画出层层过滤链路,用 Lua 原子扣库存,并把成功请求经收件箱搬到 MQ |
| 05 | 认证与鉴权 | 能区分 OAuth2 与 OIDC,配 PKCE,按 JWKS 校验 JWT 的 alg/iss/aud/exp |
| 06 | 序列化与负载均衡 | 能按 schema、体积、兼容性选序列化;能写对平滑加权轮询和一致性哈希 |
| 07 | 海量数据处理 | 能用分治、Bitmap、布隆、HyperLogLog 解题,并说清各自不能做什么 |
| 08 | 文件传输方案 | 能设计断点续传、分片校验和重试;能解释为什么分段 MD5 不能合并 |
| 09 | CAP 与共识 | 能用 CAP/PACELC 判断组件取舍,讲清 Raft 的 leader/term/log 和多数派边界 |
| 10 | 幂等性设计 | 能用唯一索引、Token、状态机、乐观锁做幂等;能补状态机崩溃后的超时重抢与补偿 |
| 11 | 限流算法详解 | 能区分固定窗口、滑动窗口、漏桶、令牌桶,并按下游能否接受突发选型 |
| 12 | 蓝绿灰度与多级路由 | 能设计染色、透传、路由、生效、回滚五环节;能说清熔断不是回滚 |
| 13 | 单元化架构 | 能设计按客户分片的单元、DLS/GNS 路由、四阶段迁移和分级容灾 |
篇目依赖
| 篇目 | 建议先读 | 读完接哪篇 |
|---|---|---|
| 01 分布式 ID | 无 | 04、13 |
| 02 分布式事务 | 01 | 04、10、13 |
| 03 缓存设计 | 无 | 04、11 |
| 04 秒杀系统 | 03、10、11 | 12 |
| 05 认证鉴权 | 无 | 12、18 卷安全架构 |
| 06 序列化与负载均衡 | 无 | 12、13 |
| 07 海量数据处理 | 无 | 03、08 |
| 08 文件传输 | 07 | 13 |
| 09 CAP 与共识 | 02 | 13 |
| 10 幂等性设计 | 02 | 04、13 |
| 11 限流算法 | 03 | 04、12 |
| 12 蓝绿灰度 | 11 | 13、K8s 卷 |
| 13 单元化 | 02、09、12 | K8s 卷企业级特性 |
依赖只表示概念上的先后,不是硬性前置;每篇都尽量自包含,遇到跨篇概念会给出链接。
版本基线
正文中的版本前提集中在各篇开头,常用基线如下:
- MySQL 8.0+、Redis 7.x/8.x、RocketMQ 5.x、Kafka 3.x。
- Nginx 1.24+、Sentinel 1.8+、Guava 33.x、Seata 2.x。
- OAuth 2.1 草案、OIDC 1.0、RFC 7636(PKCE)、RFC 7517(JWKS)。
- Protocol Buffers 3.x、etcd 3.5+、Consul 1.16+、Apollo 2.x。
版本只用于说明命令和默认值的适用范围;升级前以官方 Release Notes 为准。
三条阅读路径
交易链路:01 → 02 → 10 → 04 → 03 → 11。重点看同一笔业务在「发号、跨库、重复请求、抢购、缓存、限流」上分别怎么保证正确。
流量与发布:11 → 12 → 13 → 09。重点看流量如何被限制、如何按版本和客户切开,以及切开之后一致性怎么退化。
数据与传输:07 → 08 → 06 → 03。重点看内存放不下时怎么分治、大文件怎么续传和校验、RPC 怎么编码和选节点。
交叉引用
- 容器化发布与单元化:03-灰度发布与交付平台、05-企业级K8s核心特性。
- 缓存与消息的组件细节:04_Redis、09_RocketMQ。
- 安全协议与 Web 攻防:18_安全架构。
- 领域拆分与一致性:28_DDD领域驱动设计。
什么时候拆成独立专栏
这一组是横切方案的暂存区,不追求每个主题都独立成卷。一个主题同时满足下面三条时,再拆成独立专栏:
- 至少有 3 篇能各自独立成篇的内容,分别是机制、工程落地、故障处置,而不是同一个观点的三种写法。
- 共性跨组件,不属于某一款中间件;只讲 Redis 或只讲 Dubbo 的内容留在对应卷。
- 有企业落地素材,且已去掉公司名、内部产品名、内部类名和具体业务数据。
按这个标准,当前最接近拆出的是「流量治理」(灰度、限流、单元化、多入口拉入拉出)和「可靠事件」(事务消息、本地消息表、幂等、重试与死信)。在篇目不够之前,仍留在这里,避免出现只有一篇的空专栏。
约定
- 每篇按「一句话、为什么需要、核心机制、最小上手、生产动作、边界、讲清楚」组织。
- 命令和配置标明版本前提;经验值会明确写成「经验值/示例」,不冒充基准测试。
- 近似算法、异步链路和跨单元方案,都要在接口或报表里标明一致性与精度边界。