# 优化技术架构设计（最小可运营栈 + 触发式扩容）

- 版本：v2.0
- 日期：2026-03-18
- 目标：降低 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`

---

## 7. 首周落地动作

1. 冻结 S0/S1 最小栈，不引入 Istio/Kafka/ELK。
2. 默认采用极简模式（Cloud LB + Go Core），Kong/Loki按退出条件评审后引入。
3. 发布扩容触发条件评审模板（无触发条件不得引入组件）。
4. 将运维看板与门禁阈值绑定到唯一验收门禁表。
5. 完成一次“升级 + 灰度 + 自动回滚”全链路演练。
