doc : update readme

This commit is contained in:
zenfun
2025-12-22 13:27:02 +08:00
parent de1d23cce5
commit ca0be28aba

102
README.md
View File

@@ -4,55 +4,74 @@ EZ-API 网关系统的管理中心和控制平面。
## 目标 ## 目标
EZ-API 是"大脑"。它管理事实来源 (Source of Truth)。 EZ-API 是“控制平面”,负责管理事实来源 (Source of Truth)。
负责 主要承担
1. **管理 API**: 提供商 (Providers)、API 密钥 (Keys) 和模型 (Models) 的 CRUD 操作。 1. **资源管理**Master/Key/Provider/Model/Binding/Namespace 的 CRUD 与批量操作。
2. **状态同步**: 将配置快照推送到 Redis供 Balancer 使用。 2. **状态同步**将配置快照与 Feature Flags 推送到 Redis供 Balancer 使用。
3. **日志摄取**: 异步将访问日志写入 PostgreSQL 3. **日志与统计**:日志摄取/统计、操作日志、实时计数回写
4. **运行配置**CORS、模型注册表、配额重置等运维能力。
## 架构设计 ## 架构设计
控制平面采用了传统的三层构,但有一个关键的转折:它主动将状态推送到边缘 (Redis) 控制平面采用三层构,主动将状态推送到 Redis。
- **数据库**: PostgreSQL (持久化存储) - **数据库**: PostgreSQL(主库),可选独立日志库(`EZ_LOG_PG_DSN`
- **缓存/总线**: Redis (向 Balancer 分发配置) - **缓存/总线**: Redis配置快照、实时计数、Feature Flags
- **框架**: Gin + GORM。 - **框架**: Gin + GORM。
## API 端点 ## API 端点
### 管理接口 ### 基础
- `POST /providers`: 注册新的上游 AI 提供商。 - `GET /health`
- `POST /keys`: 创建新的客户端 API 密钥。 - `GET /api/status/test`
- `POST /models`: 注册支持的模型。 - `GET /swagger/*any`
- `GET /models`: 列出所有模型。
- `POST /admin/masters/{id}/keys`: 代某个 master 签发子 key子 key 仍归属该 master仅审计 `issued_by=admin`)。
### Feature Flags给未来前端用 ### Internal
- `POST /internal/stats/flush`Balancer 统计回写。
- `GET /internal/metrics`:内部指标。
控制平面会把轻量“开关配置”存到 Redis 的 hash`meta:features`,并提供管理接口: ### Admin
- `/admin/masters`CRUD + batch + manage
- `/admin/masters/:id/realtime`
- `/admin/masters/:id/keys`
- `/admin/providers`CRUD + test + fetch-models + batch
- `/admin/models`CRUD + batch
- `/admin/bindings`CRUD + batch
- `/admin/namespaces`CRUD
- `/admin/logs``/admin/logs/stats``/admin/logs/webhook`
- `/admin/features``/admin/operation-logs``/admin/stats`
- `GET /admin/features` ### Master
- `PUT /admin/features`body 为 JSON map - `/v1/self`
- `/v1/tokens`CRUD
- `/v1/logs``/v1/logs/stats`
- `/v1/stats``/v1/realtime`
常用 flags ### 说明
- Master 的 `global_qps` 默认 `0` 表示限流关闭;仅当 `global_qps > 0` 才会在数据面生效。
- `dp_state_store_backend`: `memory`(默认)/ `redis`
- `dp_claude_cross_upstream`: `true` / `false`
### 系统接口
- `POST /sync/snapshot`: 强制将 DB 状态全量重新同步到 Redis。
- `POST /logs`: 供 Balancer 推送日志的内部端点 (异步)。
## 配置说明 ## 配置说明
| 变量名 | 默认值 | 说明 | | 变量名 | 默认值 | 说明 |
|--------|--------|------| |--------|--------|------|
| `EZ_API_PORT` | `8080` | 监听端口。 | | `EZ_API_PORT` | `8080` | 监听端口。 |
| `EZ_PG_DSN` | `host=localhost...` | PostgreSQL 连接字符串。 | | `EZ_PG_DSN` | `host=localhost...` | PostgreSQL 主库 DSN。 |
| `EZ_LOG_PG_DSN` | `` | 日志库 DSN可选。 |
| `EZ_REDIS_ADDR` | `localhost:6379` | Redis 地址。 | | `EZ_REDIS_ADDR` | `localhost:6379` | Redis 地址。 |
| `EZ_LOG_QUEUE` | `10000` | 日志缓冲通道的容量。 | | `EZ_REDIS_PASSWORD` | `` | Redis 密码。 |
| `EZ_LOG_BATCH_SIZE` | `10` | 单次 DB 事务写入的日志数量。 | | `EZ_REDIS_DB` | `0` | Redis DB。 |
| `EZ_LOG_LEVEL` | `info` | 日志级别,支持 `debug``info``warn``error`。 | | `EZ_CORS_ALLOW_ORIGINS` | `*` | 允许的 Origin 列表(逗号分隔)。 |
| `EZ_LOG_QUEUE` | `10000` | 日志缓冲队列容量。 |
| `EZ_LOG_BATCH_SIZE` | `10` | 单次 DB 写入日志数。 |
| `EZ_LOG_FLUSH_MS` | `1000` | 日志批量刷新间隔(毫秒)。 |
| `EZ_LOG_RETENTION_DAYS` | `30` | 日志保留天数。 |
| `EZ_LOG_MAX_RECORDS` | `1000000` | 日志最大记录数。 |
| `EZ_LOG_PARTITIONING` | `off` | 日志分区off/month/day。 |
| `EZ_MODEL_REGISTRY_ENABLED` | `false` | 模型注册表开关。 |
| `EZ_MODEL_REGISTRY_REFRESH_SECONDS` | `1800` | 模型注册表刷新间隔。 |
| `EZ_MODEL_REGISTRY_CACHE_DIR` | `./data/model-registry` | 模型注册表缓存目录。 |
| `EZ_QUOTA_RESET_INTERVAL_SECONDS` | `300` | 配额重置间隔。 |
| `EZ_INTERNAL_STATS_TOKEN` | `` | 内部统计回写鉴权 token。 |
配置读取优先级:环境变量 > 配置文件 > 默认值。通过 [Viper](https://github.com/spf13/viper) 支持 `./config.yaml`(或 `./config/config.yaml`),也可用 `EZ_CONFIG_FILE` 指定路径。示例: 配置读取优先级:环境变量 > 配置文件 > 默认值。通过 [Viper](https://github.com/spf13/viper) 支持 `./config.yaml`(或 `./config/config.yaml`),也可用 `EZ_CONFIG_FILE` 指定路径。示例:
@@ -80,7 +99,28 @@ auth:
go run cmd/server/main.go go run cmd/server/main.go
``` ```
### Docker 运行 ### Docker Compose推荐
在 `ez-api` 目录使用自带的 `docker-compose.yml` 拉起完整栈Postgres + Redis + ez-api + balancer
```bash
cd ez-api
docker compose up -d
```
常用可选变量(写入 `.env`
```env
EZ_ADMIN_TOKEN=admin123
EZ_INTERNAL_STATS_TOKEN=internal123
EZ_BALANCER_LOG_SINK_ENABLED=false
EZ_BALANCER_LOG_SINK_BASE_URL=http://ez-api:8080
EZ_BALANCER_STATS_FLUSH_ENABLED=false
EZ_BALANCER_STATS_FLUSH_BASE_URL=http://ez-api:8080
EZ_BALANCER_STATS_FLUSH_TOKEN=internal123
```
### Docker 单独运行
```bash ```bash
docker build -t ez-api . docker build -t ez-api .