# 专业架构深度评审报告 > 评审日期:2026-03-18 > 评审方法:架构评审 + 模式分析 + 行业对标 > 评审范围:整体架构与技术决策 --- ## 1. 评审团队与方法 ### 1.1 评审专家 - **云原生架构师** - 负责微服务架构评审 - **分布式系统专家** - 负责数据一致性评审 - **性能工程师** - 负责性能与扩展性评审 ### 1.2 评审框架 | 维度 | 评估方法 | |------|----------| | 架构合理性 | 模式对照 + 反模式检测 | | 可扩展性 | 容量规划 + 水平扩展能力 | | 可用性 | SLO分析 + 故障模式分析 | | 可维护性 | 模块化 + 依赖管理 | | 性能 | 基准测试 + 瓶颈分析 | --- ## 2. 架构整体评估 ### 2.1 当前架构概述 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 控制面 (Control Plane) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 租户管理 │ │ 计费引擎 │ │ 策略引擎 │ │ 管理后台 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 数据面 (Data Plane) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Router │ │Provider │ │ 熔断 │ │ 计费 │ │ │ │ Core │ │ Adapter │ │ 器 │ │ 收集器 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ subapi (外部集成) │ └─────────────────────────────────────────────────────────────────┘ ``` ### 2.2 架构评分 | 维度 | 评分 | 说明 | |------|------|------| | 模块化 | 7/10 | 控制面/数据面分离清晰 | | 可扩展性 | 6/10 | 水平扩展能力需验证 | | 可用性 | 7/10 | 故障隔离机制需完善 | | 性能 | 7/10 | 60ms目标可达 | | 可维护性 | 6/10 | subapi耦合需解耦 | **架构综合评分:6.5/10** --- ## 3. 深度问题分析 ### 3.1 严重问题(Critical) #### 问题 A-01:Router Core 自研技术风险 **发现**: 规划中 S2 阶段要自研 Router Core 接管 60% 流量,这是一个重大技术决策: **风险分析**: ``` 自研 Router Core 的挑战: 1. 复杂度 - 需要实现完整的路由决策逻辑 - 需要实现熔断、降级、重试 - 需要实现成本优化策略 2. 时间 - S2 只有 16 周(含 buffer) - 需要达到 60% 接管率 - 需要保证稳定性 3. 稳定性 - 初期稳定性可能不如 subapi - 需要双轨运行 - 需要快速回滚能力 ``` **行业对标**: ``` Litellm: 3年+ 开源社区维护 OpenRouter: 2年+ 商业化验证 我们的团队: 初次自研 ``` **建议**: 1. **降低预期**:首年目标调整为 30-40% 2. **分阶段**: - S2-A: 10% 流量(验证稳定性) - S2-B: 30% 流量(优化性能) - S2-C: 50% 流量(功能完善) 3. **技术准备**: - 提前 2 个月启动 Router Core 原型开发 - 建立性能基准测试 - 准备完整回滚方案 **风险评级**:🔴 P0 --- #### 问题 A-02:subapi 耦合风险 **发现**: 当前方案依赖 subapi 作为核心能力,存在供应商锁定风险: **耦合点分析**: | 耦合项 | 风险 | 影响 | |--------|------|------| | API 协议 | 中 | subapi 升级可能破坏兼容 | | 错误码映射 | 高 | 需要维护映射表 | | Usage 格式 | 中 | 计费可能出错 | | 认证机制 | 高 | 安全漏洞无法自行修复 | **建议**: 1. **接口抽象层**: ```python # 定义抽象接口 class ProviderAdapter(ABC): @abstractmethod def chat_completion(self, request: Request) -> Response: pass @abstractmethod def get_usage(self, response: Response) -> Usage: pass @abstractmethod def map_error(self, error: Exception) -> ErrorCode: pass # subapi 适配器 class SubapiAdapter(ProviderAdapter): def __init__(self, subapi_client): self.client = subapi_client # 自研 Router Core 适配器 class RouterCoreAdapter(ProviderAdapter): def __init__(self, router_client): self.client = router_client ``` 2. **契约测试**:为每个适配器建立契约测试 3. **双轨运行**:确保随时可以切换 **风险评级**:🔴 P0 --- #### 问题 A-03:数据一致性风险 **发现**: 计费系统涉及资金,需要强一致性,但当前设计可能存在风险: **问题分析**: ``` 当前设计: ┌─────────────┐ ┌─────────────┐ │ 请求处理 │ ──▶ │ 计费收集器 │ │ (实时) │ │ (异步) │ └─────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ │ Usage表 │ │ (最终一致) │ └─────────────┘ ``` **风险场景**: 1. 异步写入失败 → 计费丢失 2. 进程崩溃 → 计费未落库 3. 分布式事务未处理 → 数据不一致 **建议**: 1. **同步预扣**: ```python async def handle_request(request: Request): # 1. 同步预扣额度 await billing.reserve(request.user_id, request.estimated_cost) # 2. 处理请求 response = await router.route(request) # 3. 同步扣减实际额度 actual_cost = calculate_actual_cost(response) await billing.charge(request.user_id, actual_cost) ``` 2. **对账机制**: - 实时对账:请求级别 - 定期对账:小时级别 - 差异追踪:分钟级别告警 3. **补偿事务**: - 失败重试 - 异常队列 - 人工干预 **风险评级**:🔴 P0 --- ### 3.2 高风险问题(High) #### 问题 A-04:缺乏容量规划 **发现**: 当前规划未明确容量相关数字: **缺失信息**: | 指标 | 当前 | 行业参考 | |------|------|----------| | 单实例 QPS | 未明确 | 1k-5k | | 集群最大实例 | 未明确 | 10-100 | | Redis 容量 | 未明确 | 10GB/月 | | 数据库连接 | 未明确 | 100-500 | **建议**: 1. **基线测试**:确定单实例性能基线 2. **扩展公式**: ``` 实例数 = 峰值QPS / 单实例QPS * 冗余系数 ``` 3. **容量模型**: ```python def calculate_capacity(peak_qps, p99_latency): instances = ceil(peak_qps * p99_latency / 1000) return { 'instances': instances * 2, # 高可用 'redis_gb': estimate_redis(peak_qps), 'db_connections': instances * 10 } ``` **风险评级**:🟡 P1 --- #### 问题 A-05:故障隔离不完善 **发现**: 当前架构缺乏故障隔离设计: **问题场景**: ``` 1. 供应商故障 - OpenAI 故障 → 所有用户受影响 - 应该有降级到其他供应商的能力 2. 租户故障 - 某个租户耗尽配额 → 影响其他租户 - 应该有限流和隔离 3. 内部服务故障 - 计费服务故障 → 请求处理受影响 - 应该有熔断和降级 ``` **建议**: 1. **租户级隔离**: - 独立连接池 - 独立队列 - 独立限流 2. **服务级熔断**: - 快速失败 - 降级策略 - 恢复重试 3. **多供应商路由**: - 主供应商 + 备用供应商 - 自动故障转移 - 成本感知路由 **风险评级**:🟡 P1 --- #### 问题 A-06:可观测性不足 **发现**: 当前只提到"可观测数据聚合",但缺乏具体设计: **缺失指标**: | 类别 | 指标 | 重要性 | |------|------|--------| | 业务 | 请求成功率 | P0 | | 业务 | 计费准确率 | P0 | | 性能 | P99 延迟 | P0 | | 性能 | 吞吐量 | P1 | | 稳定性 | 错误率 | P0 | | 稳定性 | 供应商可用性 | P1 | **建议**: 1. **指标体系**(SLI): ```yaml slis: - name: request_success_rate objective: 99.9% method: sum(rate(requests_total{service="router"}[5m])) / sum(rate(requests_total[5m])) - name: billing_accuracy objective: 99.99% method: 1 - (billing_discrepancies / total_billing_records) ``` 2. **SLA 设定**: ``` - 可用性: 99.95% (月级) - 延迟: P99 < 200ms - 准确性: 99.99% ``` 3. **告警规则**: ``` - 可用性 < 99.9% → P1 - 可用性 < 99% → P0 - 延迟 P99 > 500ms → P1 - 计费差异 > 0.1% → P0 ``` **风险评级**:🟡 P1 --- ### 3.3 中等风险问题(Medium) | 问题编号 | 问题 | 建议 | 风险等级 | |----------|------|------|----------| | A-07 | 技术选型未明确 | 明确Go版本、框架 | 🟢 P2 | | A-08 | 部署架构未设计 | 设计多区域部署 | 🟢 P2 | | A-09 | 监控告警不具体 | 明确告警阈值 | 🟢 P2 | | A-10 | 灾备方案缺失 | 设计数据备份 | 🟢 P2 | --- ## 4. 技术决策评估 ### 4.1 控制面 + 数据面分离 **评估**:✅ 合理 ``` 优点: - 控制面可以独立扩展 - 数据面可以高性能 - 故障隔离 注意事项: - 需要可靠的内网通信 - 需要协调两个面的部署 - 增加运维复杂度 ``` ### 4.2 使用 subapi 作为集成底座 **评估**:⚠️ 有风险但可行 ``` 优点: - 快速上线 - 社区验证 - 功能丰富 缺点: - 供应商锁定 - 定制困难 - 升级风险 建议: - 建立抽象层 - 准备自研替代 - 监控版本变化 ``` ### 4.3 渐进式接管策略 **评估**:✅ 合理 ``` 优点: - 降低风险 - 逐步验证 - 可回滚 注意事项: - 双轨运维复杂度 - 需要精确的流量控制 - 回滚需要快速 ``` --- ## 5. 扩展性分析 ### 5.1 水平扩展能力 | 组件 | 扩展方式 | |当前状态 | |------|----------|---------| | API Gateway | 无状态 | ✅ | 需评估 | | Router Core | 无状态 | ✅ | 需设计 | | Provider Adapter | 有状态 | ⚠️ | 需优化 | | Redis | 分片 | ✅ | 需规划 | | PostgreSQL | 分片/读写分离 | ✅ | 需规划 | ### 5.2 容量规划建议 ``` 阶段 QPS 实例 Redis DB ------------------------------------------------ S0 (MVP) 100 2 2GB 10GB S1 (上线) 500 4 10GB 50GB S2 (增长) 2000 8-10 50GB 200GB S3 (规模) 10000 20+ 200GB 1TB ``` --- ## 6. 总结 ### 6.1 架构评分 | 维度 | 评分 | 说明 | |------|------|------| | 模块化 | 7/10 | 控制面/数据面分离清晰 | | 可扩展性 | 6/10 | 水平扩展能力需验证 | | 可用性 | 7/10 | 故障隔离机制需完善 | | 性能 | 7/10 | 60ms目标可达 | | 可维护性 | 6/10 | subapi耦合需解耦 | | 安全性 | 6/10 | 详见安全评审 | **架构综合评分:6.5/10** ### 6.2 关键行动项 | 优先级 | 行动项 | |--------|--------| | 🔴 P0 | Router Core 降低首年预期至 30-40% | | 🔴 P0 | 建立 Provider Adapter 抽象层 | | 🔴 P0 | 设计同步预扣 + 异步确认的计费流程 | | 🟡 P1 | 完成容量规划(单实例基线测试) | | 🟡 P1 | 设计完整的故障隔离机制 | | 🟡 P1 | 建立完整的 SLI/SLO 体系 | | 🟢 P2 | 明确技术选型(Go版本、框架) | | 🟢 P2 | 设计多区域部署架构 | --- ## 7. 附录:行业对标 ### 7.1 竞品架构对比 | 产品 | 架构 | 日处理请求 | 特点 | |------|------|------------|------| | Litellm | 微服务 | 10亿+/月 | 开源、社区活跃 | | OpenRouter | 分布式 | 10亿+/月 | 多供应商聚合 | | 我们的方案 | 双平面 | 目标1亿+/月 | 控制面自研 | ### 7.2 技术指标参考 | 指标 | 行业水平 | 我们的目标 | |------|----------|------------| | 可用性 | 99.9-99.99% | 99.95% | | P99延迟 | 50-200ms | <200ms | | 计费准确性 | 99.99% | 99.99% | --- **评审完成时间**:2026-03-18 **下次评审**:架构设计细化后