164 lines
6.9 KiB
Markdown
164 lines
6.9 KiB
Markdown
# 优化技术架构设计(最小可运营栈 + 触发式扩容)
|
||
|
||
- 版本:v2.1
|
||
- 日期:2026-03-27
|
||
- 目标:降低 S0/S1 运维复杂度,同时保证 S2 替换目标可达。
|
||
|
||
---
|
||
|
||
## 1. 架构优化原则
|
||
|
||
1. 先跑通核心链路,再引入复杂中间件。
|
||
2. 每增加一个基础设施组件,必须有可量化触发条件。
|
||
3. 控制面集中、数据面可灰度、回滚可自动化。
|
||
4. 与主栈强一致:Go + PostgreSQL + Redis。
|
||
|
||
---
|
||
|
||
## 2. 分阶段目标架构
|
||
|
||
### 2.0 极简模式(S0/S1优先,推荐默认)
|
||
|
||
| 层 | 组件 | 说明 |
|
||
|---|---|---|
|
||
| 北向入口 | 云负载均衡(L4/L7) | 仅做 TLS 终止与基础转发 |
|
||
| 业务层 | Gateway Core(Go 单体) | 内含 Auth/RateLimit/Router/Billing/subapi connector |
|
||
| 数据层 | PostgreSQL 15 | 交易、计费、审计主存储 |
|
||
| 缓存层 | Redis 7 | 分布式限流、并发门控、短期状态 |
|
||
| 观测层 | Prometheus + 云日志(stdout) | 指标+日志最小闭环,不默认引入 Loki |
|
||
| 外部集成 | subapi(内网) | mTLS 双向认证,作为外部模块接入 |
|
||
|
||
默认不引入(极简模式):
|
||
1. API 网关产品层(Kong/Traefik)作为必选组件。
|
||
2. Loki/ELK 独立日志平台。
|
||
3. Kafka、Istio、多集群服务治理。
|
||
|
||
极简模式退出条件(任一触发):
|
||
1. 需要在入口层做复杂插件治理(统一 WAF/插件策略/多协议细粒度控制)。
|
||
2. 网关核心服务发布耦合导致两次以上周更失败。
|
||
3. 观测检索 SLA 无法满足(日志检索 < 1 分钟)且云日志能力不足。
|
||
|
||
### 2.1 S0/S1 最小可运营栈(必须)
|
||
|
||
| 层 | 组件 | 说明 |
|
||
|---|---|---|
|
||
| 北向入口 | 单一入口层(极简默认:云LB + Go;增强模式:Kong) | 统一鉴权、限流、协议归一 |
|
||
| 业务层 | Go 服务(模块化单体优先) | Router/Auth/Billing/Adapter 在同一部署单元 |
|
||
| 数据层 | PostgreSQL 15 | 交易、计费、审计主存储 |
|
||
| 缓存层 | Redis 7 | 限流、并发门控、短期状态 |
|
||
| 观测层 | Prometheus + Grafana(日志默认走云日志) | 指标/日志最小闭环 |
|
||
| 外部集成 | subapi(内网) | 通过 connector 接入,mTLS 双向认证 |
|
||
|
||
不引入项(S0/S1 禁止默认引入):
|
||
1. 服务网格(Istio)。
|
||
2. Kafka 作为默认依赖。
|
||
3. ELK 全套日志平台。
|
||
4. Loki(仅在日志检索SLA不满足时引入)。
|
||
|
||
### 2.2 S2 目标架构(有条件增强)
|
||
|
||
1. Router Core 成为主路径执行引擎。
|
||
2. subapi 保留长尾协议与回退通道。
|
||
3. 按需引入异步事件总线,先从 PG outbox 开始,再评估 Kafka。
|
||
|
||
---
|
||
|
||
## 3. 触发式扩容条件(唯一准入)
|
||
|
||
| 组件 | 引入前替代方案 | 触发条件(任一满足) | 引入后验收 |
|
||
|---|---|---|---|
|
||
| Kafka | PostgreSQL Outbox + Worker | 异步事件持续 > 5k msg/s 且 backlog > 15min;或跨域消费者>=3类 | 消费延迟 P95 < 5s,消息丢失=0 |
|
||
| Istio | 网关 + 应用内 mTLS/熔断 | 服务数量 > 8 且跨服务调用路径 > 20;或多集群流量治理需求明确 | 变更可观测、故障域隔离验证通过 |
|
||
| ELK | Loki + 对象存储归档 | 日志检索需求超出 Loki 能力,且安全审计检索 SLA < 1min | 检索 SLA 达标,成本可控 |
|
||
| 服务拆分 | 模块化单体 | 单服务 CPU>70% 持续7天;发布耦合导致周更失败>=2次 | 拆分后发布失败率下降 >=50% |
|
||
|
||
---
|
||
|
||
## 4. 部署拓扑(简化且可靠)
|
||
|
||
```text
|
||
Internet
|
||
-> Cloud LB (or Kong in enhanced mode)
|
||
-> Gateway Core (Go)
|
||
-> Router Core / subapi connector
|
||
-> Providers
|
||
-> PostgreSQL
|
||
-> Redis
|
||
-> Observability (Prometheus/Grafana + Cloud Logs)
|
||
```
|
||
|
||
可靠性要求:
|
||
1. 回滚:10分钟触发、30分钟恢复。
|
||
2. 灰度:5% -> 20% -> 50% -> 100%。
|
||
3. 故障域:按租户分批升波,避免全量冲击。
|
||
|
||
---
|
||
|
||
## 5. 运维简化设计
|
||
|
||
1. 单一控制面:路由、开关、灰度比例统一发布入口。
|
||
2. 单一门禁:发布必须通过唯一验收门禁表。
|
||
3. 标准 Runbook:告警 -> 判断 -> 操作 -> 验证。
|
||
4. 证据包制度:每次升波必须产出日志+指标+结论。
|
||
|
||
---
|
||
|
||
## 6. 与现有文档关系
|
||
|
||
1. 本文档替代 `technical_architecture_design_v1_2026-03-18.md` 中“默认重组件组合”的实现建议。
|
||
2. 本文档与以下文档共同构成实施基线:
|
||
- `llm_gateway_subapi_evolution_plan_v4_2_2026-03-24.md`
|
||
- `acceptance_gate_single_source_v1_2026-03-18.md`
|
||
- `test_plan_go_aligned_v1_2026-03-18.md`
|
||
- `dependency_compatibility_audit_baseline_v1_2026-03-27.md`
|
||
- `database_domain_model_and_governance_v1_2026-03-27.md`
|
||
|
||
---
|
||
|
||
## 7. 首周落地动作
|
||
|
||
1. 冻结 S0/S1 最小栈,不引入 Istio/Kafka/ELK。
|
||
2. 默认采用极简模式(Cloud LB + Go Core),Kong/Loki按退出条件评审后引入。
|
||
3. 发布扩容触发条件评审模板(无触发条件不得引入组件)。
|
||
4. 将运维看板与门禁阈值绑定到唯一验收门禁表。
|
||
5. 完成一次“升级 + 灰度 + 自动回滚”全链路演练。
|
||
|
||
---
|
||
|
||
## 8. 依赖兼容性审计(新增强制门禁)
|
||
|
||
1. 发布前必须产出四类证据:SBOM、锁文件差异、兼容矩阵、风险清单。
|
||
2. 对 `subapi/provider SDK` 执行精确版本锁定(`X.Y.Z`),禁止“仅锁主次版本”。
|
||
3. 任一依赖发生 major 变更,必须附兼容影响评估与回滚演练记录。
|
||
4. 依赖审计结果接入门禁指标 `M-017`,要求 `dependency_compat_audit_pass_pct=100%`。
|
||
5. 运行时、数据层、构建镜像三类版本必须可追溯到同一发布包,禁止“文档版本”和“运行版本”漂移。
|
||
|
||
---
|
||
|
||
## 9. 分阶段质量检查(防偏离主线)
|
||
|
||
### 9.1 阶段门禁定义
|
||
|
||
| 阶段 | Gate | 必达条件 | 阻断动作 |
|
||
|---|---|---|---|
|
||
| G0 需求冻结 | Requirement Gate | P0/P1 需求、按钮、接口状态全部冻结 | 禁止进入开发 |
|
||
| G1 设计冻结 | Design Gate | 数据模型、OpenAPI、状态机与审计字段齐套 | 禁止进入联调 |
|
||
| G2 开发自检 | Dev Gate | 单元/契约测试通过,覆盖率达标 | 禁止合并 |
|
||
| G3 集成验证 | Integration Gate | DB/缓存/外部依赖集成测试通过 | 禁止预发布 |
|
||
| G4 发布演练 | Release Gate | 回滚演练、性能门禁、安全门禁通过 | 禁止生产发布 |
|
||
| G5 发布观察 | Post Gate | 24h 指标稳定,无 P0/P1 回归 | 冻结后续升波 |
|
||
|
||
### 9.2 防偏航机制
|
||
|
||
1. 需求追踪覆盖率(`M-019`)必须 100%,每条 P0 需求都能映射到 API/测试/指标/Gate。
|
||
2. 阶段通过率(`M-018`)必须 100%,任一阶段失败禁止“跳阶段推进”。
|
||
3. 每日执行“需求-设计-测试-门禁”一致性巡检,发现漂移 24h 内关闭。
|
||
4. 所有变更按 `request_id + trace_id` 留痕,确保故障可逆向定位到需求与提交。
|
||
|
||
---
|
||
|
||
## 10. 本版补充结论
|
||
|
||
1. 架构基线从“最小可运营栈”扩展为“最小可运营栈 + 依赖可审计 + 分阶段质量闭环”。
|
||
2. 未完成依赖兼容审计或阶段门禁的变更,不得进入 `GO` 决策。
|