Spaces:
Sleeping
Sleeping
File size: 2,358 Bytes
543ec94 b7791c2 543ec94 b7791c2 543ec94 b7791c2 543ec94 b7791c2 543ec94 b7791c2 543ec94 b7791c2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# 系统模式 (System Patterns)
## 架构概述
本项目将采用基于 FastAPI 的微服务架构。核心是一个 FastAPI 应用,负责接收所有进来的请求,并根据数据库中的配置将请求转发到相应的后端服务,并管理 API Key。
```mermaid
graph LR
Client --> Proxy[FastAPI Proxy]
Proxy --> Database[SQLite Database]
Proxy --> BackendA[Backend Service A]
Proxy --> BackendB[Backend Service B]
Proxy --> BackendC[Backend Service C]
Database --> Proxy
```
## 设计模式
- **API Gateway Pattern**: FastAPI 应用充当 API 网关,作为客户端访问后端服务的单一入口点。
- **Database Pattern**: 使用 SQLite 数据库存储 Key 类别、Key 实例和代理规则配置。
- **Configuration Pattern**: 代理规则和 Key 信息通过数据库进行管理,而非静态配置文件。
- **Middleware Pattern**: 利用 FastAPI 的中间件功能处理请求和响应的通用逻辑(如日志、认证等)。
## 关键组件
- **FastAPI Application**: 核心应用,处理路由、请求转发和 Key 管理 API。
- **SQLite Database**: 存储 Key 类别 (`key_categories`)、API Key 实例 (`api_keys`) 和代理规则 (`proxy_rules`)。
- **SQLAlchemy Models**: 定义与数据库表对应的 Python 模型 (`KeyCategory`, `APIKey`)。
- **CRUD Operations**: 实现对数据库中 Key 类别和 Key 实例的增删改查逻辑 (`app/crud.py`)。
- **Key Selection Logic**: 根据代理规则从 Key 池中选择合适 Key 的逻辑。
- **HTTP Client**: 用于向后端服务发起请求(例如使用 `httpx` 库)。
- **Request/Response Transformer (Optional)**: 根据配置修改请求和响应。
## 数据流
1. 客户端发起请求到 FastAPI Proxy。
2. FastAPI Proxy 接收请求。
3. **Proxy 查找数据库**: 根据请求查找数据库 (`proxy_rules` 表) 获取匹配的代理规则。
4. **Key 选择 (如果需要)**: 如果匹配规则需要 Key,Proxy 查询数据库 (`api_keys` 表) 获取 Key 池,并根据策略选择一个 Key。
5. **应用 Key 并转发**: Proxy 根据规则中定义的应用方式,将选定的 Key 应用到转发请求中。使用 HTTP Client 向后端服务发起请求。
6. 后端服务返回响应。
7. Request/Response Transformer (如果存在) 修改响应。
8. FastAPI Proxy 将响应返回给客户端。
|