第 8 章 · 架构演进与综合案例
本章以 「社区电商 MVP→企业级」 串联 ch1~7,并 逐条对齐 L3 认证交付物。本案例为备考 母版:换业务域时保留工件结构。
前置:ch1~7;运维全课;L3 任务书 scenario-ecommerce-minimal。
8.1 四阶段演进
| 阶段 | 特征 | 指标 | 团队 | 进入下一阶段信号 |
|---|
| MVP | 单体+单库 | DAU<5万 | 1~3 | 发布耦合 |
| 成长 | 模块化+Redis+MQ | 5~30万 | 3~8 | 写TPS>800 |
| 规模 | 微服务+网关+可观测 | 30~200万 | 8~20 | 独立扩缩 |
| 企业 | 多环境+HA+合规 | 99.95%+ | 20+ | 跨城容灾 |
原则:不过度设计,但预留扩展点(事件、配置外置、可观测钩子)。
| 扩展点 | MVP 预留 | 企业落地 |
|---|
| 会话 | Cookie | Redis+JWT(ch06) |
| 下单 | 同步写库 | 事务消息(ch05) |
| 搜索 | SQL | CDC→ES(ch11) |
8.2 C4 Container 与 Namespace
[ Ingress / APISIX ]
catalog-api order-api user-api
│ │ │
MySQL/Redis ← Kafka → notify-worker
MinIO Prometheus/Grafana/Jaeger/Loki
| NS | 内容 |
|---|
prod-app | 3 API + worker |
prod-middleware | MySQL、Redis、MQ、MinIO |
monitor | 可观测三件套 |
PaaS 清单(L3 ≥4 类)
| 组件 | 商店 id | 用途 |
|---|
| MySQL | mysql | 订单/商品/用户 |
| Redis | redis | Session/库存缓存 |
| Kafka/RMQ | kafka | OrderCreated |
| MinIO | minio | 商品图 |
| 网关 | APISIX | 入口限流 |
8.3 下单时序(L3 额外交付)
用户→网关→order-api→Redis扣库存→MySQL写单→MQ发事件→201
└→worker通知
| 步骤 | 一致性 | 失败处理 |
|---|
| Redis 库存 | 最终一致 | 回滚/补偿 |
| MySQL 订单 | 强一致 | 事务回滚 |
| MQ | 至少一次 | 本地消息表 |
| 通知 | 最终一致 | 重试+死信 |
8.4 ADR 摘要
# ADR-008-01 订单与商品分服务
## 决策:catalog-api / order-api 独立 Deployment
## 理由:独立扩缩;catalog 读多 order 写密
## 后果:网关路由;跨服务 trace
| ADR | 决策 | 理由 |
|---|
| 002 事务消息 | 本地事务+MQ | 削峰解耦 notify |
| 003 Session | JWT+Redis refresh | 多副本无状态 |
| 004 可观测 | 三件套(ch07) | L3 证据 |
| 005 容量 | 大促 6 副本 | ch09:50QPS/180×1.35→N+1 |
8.5 与 L3 认证逐条对齐
| L3# | 交付物 | 本案例落点 |
|---|
| 1 | C4 Context+Container | §8.2 |
| 2 | 架构说明 | NS、数据流 |
| 3 | ADR≥2 | §8.4 |
| 4 | 容量表 | ch09 |
| 5 | SLO | ch13 |
| 6 | 代码+docs/architecture | README |
| 7 | 部署说明 | 运维 ch02 |