下载工作台
企业级架构运维

C4 模型与架构工件交付包

试读上半部分 · 解锁后可读全文

第 14 章 · C4 模型与架构工件交付包

本章提供 可直接用于 ARB 评审与 L3 认证 的架构工件标准:C4 图、时序图、ADR、接口契约、容量工作表与交付目录规范。原独立 deliverables/ 目录已移除,全部模板内嵌本章,跟练章节 ch16~ch18 直接引用。

前置:ch01 分层与 NFR;ch13 ARB 流程与材料清单。

交叉引用:ch09 容量工作表;ch13 SLO 面板;ch16/ch17/ch18 跟练提交物。


14.1 为什么用 C4,而不是「一张大图」

问题单张大图C4 分层
受众混杂老板看不懂细节Context 给全员,Container 给工程师
维护成本改一处牵全身按层级独立更新
评审效率20 分钟讲不清边界先 Context 2 分钟,再 Container 5 分钟

C4 四层模型

层级英文受众内容粒度评审是否必须
1Context产品、管理层、新人系统与外部角色/系统✅ 必须
2Container开发、运维、架构应用、DB、MQ、部署单元✅ 必须
3Component开发服务内部模块详细设计阶段
4Code开发类/包(IDE 生成)可选
命名注意:C4 的 Container = 部署容器(进程/应用),≠ Docker 容器。贤紫课程中 Deployment/Pod 映射到 C4 Container。

14.2 Context 图(贤紫社区电商)

目的:回答「系统与谁交互、解决什么业务问题」。

flowchart LR
  subgraph 用户侧
    C[消费者]
    M[商家]
    CS[客服]
  end
  subgraph 贤紫社区电商
    SHOP[社区电商系统]
  end
  subgraph 外部系统
    PAY[微信支付/支付宝]
    SMS[短信网关]
    LOG[物流开放平台]
    AI[小紫 AI 客服]
  end
  C -->|浏览/下单| SHOP
  M -->|上架/发货| SHOP
  CS -->|工单/退款| SHOP
  SHOP -->|支付请求| PAY
  PAY -->|回调| SHOP
  SHOP -->|验证码| SMS
  SHOP -->|运单查询| LOG
  SHOP -->|智能问答| AI

Context 图标注规范

元素写法
系统边界虚线框 + 系统名
关系动词短语:下单支付回调
技术细节不写(留给 Container)
导出Mermaid Live / draw.io → PNG/SVG

14.3 Container 图(生产拓扑)

目的:回答「有哪些可部署单元、用什么技术、如何通信」。

flowchart TB
  subgraph 接入层
    GW[APISIX Ingress<br/>TLS 终止]
  end
  subgraph 应用层 prod-app
    BFF[web-bff]
    CAT[catalog-api<br/>Django]
    ORD[order-api<br/>Django]
    USR[user-api<br/>Django]
    PAY[payment-worker]
  end
  subgraph 数据层 prod-middleware
    MY[(MySQL 8<br/>主从)]
    RD[(Redis 7<br/>集群)]
    KF[Kafka 3 Broker]
    ES[(Elasticsearch)]
    MO[MinIO]
  end
  subgraph 可观测
    PR[Prometheus]
    GF[Grafana]
    LO[Loki]
  end
  C[用户] --> GW
  GW --> BFF & CAT & ORD & USR
  BFF --> CAT & ORD
  ORD --> MY & RD & KF
  CAT --> MY & MO & ES
  USR --> MY & RD
  KF --> PAY
  PAY --> MY
  ORD -.-> PR
  GW -.-> PR
  PR --> GF

Container 图必备标注

标注项示例
Namespaceprod-appprod-middleware
副本数order-api ×6(大促,见 ch16)
协议HTTPSgRPCTCP 3306
数据流向实线同步,虚线异步/监控

与 ch12/ch18 交叉:双活时在 Container 图注明 cluster-a / cluster-b 各副本数与 GSLB 权重。


14.4 Component 图(order-api 内部,选学)

flowchart LR
  subgraph order-api
    CTRL[OrderController]
    SVC[OrderService]
    INV[InventoryClient]
    PAY[PaymentPublisher]
    CACHE[StockCache]
  end
  CTRL --> SVC
  SVC --> INV & PAY & CACHE
  INV -->|HTTP| CAT
  CACHE -->|TCP| RD[(Redis)]
  SVC -->|SQL| MY[(MySQL)]
  PAY -->|Produce| KF[Kafka]

Component 级评审关注:缓存击穿点(ch17 StockCache)、事务边界幂等键


14.5 时序图:下单链路(Tier-0)

sequenceDiagram
  autonumber
  participant U as 用户
  participant G as APISIX
  participant O as order-api
  participant R as Redis
  participant M as MySQL
  participant K as Kafka
  participant P as payment-worker
  U->>G: POST /api/v1/orders
  G->>G: JWT 校验 + 限流
  G->>O: 转发(traceId)
  O->>R: GET stock:{skuId}
  alt 缓存命中
    R-->>O: qty
  else 缓存未命中
    O->>M: SELECT qty FROM inventory
    M-->>O: qty
    O->>R: SETEX + TTL 抖动
  end
  O->>M: BEGIN; INSERT order; UPDATE inventory
  O->>K: OrderCreated
  O-->>G: 201 {orderId}
  G-->>U: 201
  K->>P: consume
  P->>M: 更新支付状态

时序图评审检查点

步骤风险关联章节
Redis GET击穿ch17
MySQL 事务死锁、慢查询ch10
Kafka 发送重复消费ch05
限流大促保护ch16

14.6 ADR 完整模板(Architecture Decision Record)

以下模板为 L3 认证与 ch16/ch17/ch18 跟练 的统一格式。每份 ADR 一个文件,编号连续。
# ADR-{编号} {简短标题}

| 元数据 | 值 |
|--------|-----|
| 状态 | 提议中 / 已采纳 / 已废弃 / 已取代 |
| 日期 | 2026-08-18 |
| 决策者 | 张三(架构)、李四(SRE) |
| 关联评审 | ARB-2026-0818-001 |
| 取代 | ADR-000(如有) |

## 背景(Context)

描述业务与技术背景:要解决什么问题?约束是什么?
- 业务:双 11 下单峰值预计 150 QPS(见 ch16 §16.2)
- 技术:当前 3 副本,k6 实测 QPS>170 时 P99 超标
- 约束:RTO < 15min(ch18)、错误预算政策(ch13)

## 决策(Decision)

我们决定:**将 order-api 常态副本从 3 扩至 6,HPA maxReplicas=10**。

## 备选方案(Options Considered)

### 方案 A:垂直扩容(单 Pod 8C16G)
- 优点:改动小
- 缺点:单点风险、HPA 无效、成本不一定更低
- 结论:**拒绝**

### 方案 B:水平扩容至 6 副本 + HPA
- 优点:符合无状态设计(ch03)、可回缩
- 缺点:+3 Pod 成本(ch09 §9.5)
- 结论:**采纳**

### 方案 C:拆分为 order-write / order-read 微服务
- 优点:读写分离彻底
- 缺点:工期 6 周+,大促前来不及
- 结论:**延期至 Q1**

## 后果(Consequences)

### 正面
- P99 在大促毛刺下维持 <400ms
- 符合 ch13 SLO 99.95%

### 负面 / 风险
- 月成本 +0.45 单位(ch09)
- MySQL 连接数增加:6×20=120,需确认 max_connections
- 需更新 C4 Container 图副本标注

## 验证计划(Validation)

- [ ] staging k6:80 VU 稳态 P99 <400ms,错误率 <0.1%
- [ ] Grafana 截图归档
- [ ] 大促后缩容至 3 副本(Runbook 步骤 8)

## 合规与安全(如适用)

- 不涉及新增个人数据处理(ch15)
- 无新的外网暴露面

## 参考

- ch09 容量公式、ch13 ARB 流程、ch16 跟练任务二

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。