Files
lijiaoqiao/docs/experts/00_PROJECT_OVERVIEW.md
Your Name 45c4160eed docs: 清理架构文档中Kafka/etcd误填内容,标记废弃说明
- 00_PROJECT_OVERVIEW.md: 清除虚构的5个环境问题描述
- technical_architecture_design_v1: 标记废弃说明,架构图标注Redis/Kafka未使用
- llm_gateway_product_technical_blueprint_v1: 标注Message Queue已由PostgreSQL替代
- resource_assessment_plan_v1: 移除Kafka作为备选方案引用

代码库中无任何Kafka/etcd/CloudWatch运行时依赖,详见TEST_ENVIRONMENT_ISSUES.md
2026-04-18 11:48:29 +08:00

202 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 立交桥项目专家评审 — 项目概况
## 1. 项目基本信息
- **项目名称**立交桥lijiaoqiao
- **路径**`/home/long/project/立交桥`
- **语言**Go 1.21/1.22
- **架构**单体服务3 个独立进程),保持单体架构不变
- **总规模**:约 170,000 行 Go 代码不含竞品目录112 个 .go 文件
- **依赖**Go modules无 vendor 目录
---
## 2. 三个核心服务
### 2.1 Gateway入口网关
**定位**OpenAI 兼容入口网关,负责接入鉴权、限流、上游路由、基础审计。
**端口**8080
**技术栈**
- 标准库 `net/http`(无 Gin
- 中间件Auth、CORS、RateLimit、RequestID 注入
- 路由策略:`latency` / `round_robin` / `weighted` / `availability`(已接入主链路);`cost_based` / `cost_aware` / `fallback`(实验性,未接入)
- Provider 注册:支持多 provider 配置,动态路由
- 审计发射器PostgreSQL 或内存
**关键文件**
- `internal/handler/handler.go` — OpenAI 兼容 HTTP handlerChat/Completion/Models
- `internal/middleware/cors.go` — CORS 配置(生产要求显式白名单)
- `internal/app/bootstrap.go` — 启动装配,`BuildMux`
- `internal/router/router.go` — 路由选择、打分
**环境变量**
- `GATEWAY_ENV`dev/staging/production
- `PASSWORD_ENCRYPTION_KEY`(生产必填)
- `GATEWAY_CORS_ALLOW_ORIGINS`(生产必填)
- `GATEWAY_TRUSTED_PROXIES`
- `GATEWAY_TOKEN_RUNTIME_MODE`inmemory / remote_introspection
**已修复的安全问题**
- 生产环境默认密钥检测并 panic
- CORS 生产模式强制显式白名单
- X-Request-ID 字符白名单过滤(防日志注入)
- IP 伪造防护TrustedProxies 检查)
---
### 2.2 Platform Token Runtime
**定位**:平台级 token 生命周期管理、introspection 与审计查询。
**端口**18081
**技术栈**
- 标准库 `net/http`
- Token 生命周期issue / refresh / revoke / introspect
- Store 实现内存dev 默认)+ PostgreSQLstaging/prod 可选)
- 审计事件:内存 / PostgreSQL
**关键文件**
- `internal/httpapi/token_api.go` — HTTP APIissue/refresh/revoke/introspect/audit-events
- `internal/auth/service/runtime_store.go` — 内存 runtime store含并发保护 mutex
- `internal/auth/service/inmemory_runtime.go` — token 生命周期实现
- `internal/auth/middleware/token_auth_middleware.go` — Bearer token 校验
- `internal/auth/middleware/query_key_reject_middleware.go` — 拒绝外部 query key
- `internal/auth/service/postgres_runtime_store.go` — PostgreSQL 持久化
- `internal/auth/service/postgres_audit_store.go` — PostgreSQL audit store
**环境变量**
- `TOKEN_RUNTIME_ENV`dev/staging/production
- `TOKEN_RUNTIME_DATABASE_URL`PostgreSQL DSN
**已修复的安全问题**
- Refresh 后 TTL 变更持久化到 store
- InMemoryRuntimeStore 并发读写加 RWMutex 保护
- audit-events 接口强制 Bearer token 鉴权
---
### 2.3 Supply API
**定位**供应链业务服务负责账户、套餐、结算、审计、IAM、Outbox 与补偿链路。
**端口**18080
**技术栈**
- 标准库 `net/http`
- 数据库PostgreSQL必选dev 模式可部分降级)
- SMS 验证(默认关闭态)
- Outbox pattern事务性发件箱
- 补偿框架account.create / package.publish / settlement.withdraw / quota.deduct
**关键文件**
- `internal/httpapi/supply_api.go` — 供应侧业务接口accounts/packages/billing/earnings/settlements
- `internal/httpapi/alert_api.go` — 告警接口
- `internal/repository/` — DB-backed 仓储与集成测试
- `internal/audit/` — 审计事件、处理器、批量缓冲
- `internal/outbox/` — Outbox processor
- `internal/compensation/` — 补偿执行器(当前 fail-closed
- `internal/iam/` — IAM 实现(默认关闭,条件启用)
- `internal/domain/settlement.go` — 结算领域模型(含提现门禁)
- `internal/security/kms_service.go` — DEK 派生HKDF-SHA256
- `internal/app/bootstrap.go` — 启动装配
- `internal/app/runtime.go` — runtime 构造与依赖注入
**环境变量**
- `SUPPLY_API_ENV`dev/staging/production
- `SMS_VERIFIER_IMPL`(可选)
- `SETTLEMENT_WITHDRAW_ENABLED`(默认 false
- `SERVER_IAM_ENABLED`(默认 false
**已修复的安全问题**
- KMS DEK 派生从简单字节轮换升级为 HKDF-SHA256
- 生产环境强制拒绝 HS256/HS384/HS512只接受 RSA
- 补偿执行器从假成功改为 fail-closed
- IP 伪造防护TrustedProxies 注入)
- BruteForce 暴力破解保护5 次失败 / 15 分钟锁定)
---
## 3. 数据库
### 3.1 DDL 文件
- `sql/postgresql/token_runtime_schema_v1.sql` — token runtime 表结构
- `sql/postgresql/platform_core_schema_v1.sql` — 平台侧审计事件
- `sql/postgresql/supply_core_schema_v2.sql` — supply-api 核心表accounts/packages/settlements/earnings
- `sql/postgresql/partition_strategy_v1.sql` — 分区策略
- `sql/postgresql/outbox_pattern_v1.sql` — Outbox 表
- `sql/postgresql/token_status_registry_v1.sql` — token 状态注册表
- `sql/postgresql/audit_alerts_v1.sql` — 告警审计表
### 3.2 关键数据库模式观察
- `auth_token_runtime` 表存储 token 生命周期数据
- `auth_token_audit_events` 表存储 token 审计事件token runtime 侧)
- `supply_*` 系列表存储供应侧业务数据
- `outbox` 表实现事务性发件箱模式
- 分区策略:按时间或哈希分区
---
## 4. 测试现状
### 4.1 测试类型
- **单元测试**:各模块内部逻辑测试(`*_test.go`
- **集成测试**`supply-api` 仓储层有 `bash scripts/run_integration_tests.sh`
- **E2E 测试**`supply-api/e2e/production_flow_test.go`(使用 mock 替身,非真实外部依赖)
### 4.2 测试覆盖的关键功能
- Gateway handler 测试Chat/Completion/Models/error response
- Token lifecycle 测试issue/refresh/revoke/introspect
- Token audit events 测试query / authorization enforcement
- Supply API 核心业务流程测试
### 4.3 环境状态 — 无已知环境问题
**所有测试均为纯内存或 PostgreSQL 驱动**,三服务 `go test -count=1 ./...` 全部通过,无任何外部中间件运行时依赖。
以下内容**历史上曾被错误填入**,现已全部清除:
- ~~etcd broker 在 2379~~ — 代码中无 etcd 引用
- ~~Kafka broker 在 9092~~ — 代码中无 Kafka 引用
- ~~AWS CloudWatch 凭据~~ — 代码中无 CloudWatch 引用
早期架构文档(`technical_architecture_design_v1``llm_gateway_product_technical_blueprint_v1` 等)中确有 Kafka/etcd 讨论,但那属于**早期设计规划**,实际代码实现时已弃用,文档与实现存在不一致,详见 `TEST_ENVIRONMENT_ISSUES.md`
---
## 5. CI/CD 与验证
- `scripts/ci/repo_integrity_check.sh` — 仓库级统一验证(已升级为 `go test -count=1`
- 各模块独立验证:`go test -count=1 ./...`
- Supply API 额外:`bash scripts/run_integration_tests.sh ./internal/repository`
- 迁移脚本:`scripts/migrate.sh`
---
## 6. 文档
- `TEST_ENVIRONMENT_ISSUES.md` — 5 个环境问题记录
- `review/SYSTEMATIC_REPAIR_PLAN_2026-04-17.md` — 21 个问题的修复计划
- `review/REPORT_CORRECTION_2026-04-17.md` — 纠偏版报告
- `docs/plans/2026-04-17-remediation-execution-checklist.md` — 执行清单13 tasks 全部完成)
- `docs/product/completed_feature_inventory_v1_2026-04-17.md` — 已完成功能清单 v1
- 各服务 README 记录了"当前真实状态"
---
## 7. 项目约束
- **架构约束**:保持单体服务架构,不拆分为微服务
- **优化目标**:代码质量、性能、可靠性、运维简单性
- **已知技术债务**
- 立交桥项目是单体架构但实际上代码规模不小,三个服务各自独立,有各自的 DB
- 有些能力"已写出但未接入主链路"(如高级路由策略)
- E2E 测试依赖 mock不等价于真实环境全链路
- 部分 Go module path 为 `lijiaoqiao/<module>`,对 GOPATH 有一定要求