Fire 系统基础架构
概述
Fire 是一个基于 FastAPI 和 React 的金融交易系统,采用前后端分离架构。本文档描述系统的工程架构设计,不涉及具体业务实现。
核心特性:
- 前后端分离架构,支持独立部署和扩展
- 基于 Redis 的缓存和会话管理
- JWT 认证和 RBAC 权限控制
- WebSocket 实时通信支持
- 模块化设计,职责清晰
📌 注意:业务相关架构(交易、策略、风险等)请参考 量化交易架构文档。
系统架构图
graph TB
subgraph "客户端层"
Browser[浏览器<br/>React SPA]
end
subgraph "前端开发服务器"
Vite[Vite Dev Server<br/>端口: 3000<br/>HMR + Proxy]
end
subgraph "应用层"
API[FastAPI Server<br/>端口: 8000<br/>REST API + WebSocket]
end
subgraph "服务层"
Auth[认证服务<br/>JWT]
Logger[日志服务<br/>Python logging]
Trading[交易服务<br/>策略/风险/通道管理]
end
subgraph "数据层"
Redis[(Redis<br/>端口: 6379<br/>缓存/会话/持久化)]
FS[(文件系统<br/>日志文件)]
end
subgraph "外部服务"
Broker[券商API<br/>LongPort]
end
Browser --> Vite
Vite -->|HTTP Proxy<br/>/api/*| API
Vite -->|WS Proxy<br/>/ws| API
API --> Auth
API --> Logger
API --> Trading
API --> Redis
Logger --> FS
Trading --> Redis
Trading --> Broker
技术栈
后端技术栈
| 组件 | 技术选型 | 版本 | 用途 |
|---|---|---|---|
| 运行时 | Python | 3.13+ | 后端运行环境 |
| Web框架 | FastAPI | ≥0.110.0 | 异步Web框架 |
| ASGI服务器 | Uvicorn | ≥0.27.0 | ASGI服务器 |
| 数据验证 | Pydantic | ≥2.6.0 | 数据模型和验证 |
| 配置管理 | pydantic-settings | ≥2.0.0 | 配置管理 |
| 缓存/数据存储 | Redis | ≥5.0.0 | 会话存储、数据缓存、持久化 |
| 认证 | PyJWT | ≥2.8.0 | JWT令牌生成与验证 |
| 密码哈希 | passlib[bcrypt] | ≥1.7.4 | 密码加密 |
| HTTP客户端 | httpx | ≥0.25.2 | 异步HTTP请求 |
| 券商接口 | longport | ≥3.0.0 | 长桥证券API |
| 数据分析 | pandas | ≥2.3.0 | 数据处理和分析 |
| 技术指标 | pandas-ta | 0.4.71b0 | 技术指标计算 |
| 日志 | Python logging | 内置 | 日志记录 |
前端技术栈
| 组件 | 技术选型 | 版本 | 用途 |
|---|---|---|---|
| 运行时 | Node.js | 18+ | 前端构建环境 |
| 框架 | React | ^18.2.0 | UI框架 |
| 语言 | TypeScript | ^5.2.2 | 类型安全 |
| 构建工具 | Vite | ^5.0.8 | 快速构建和HMR |
| UI组件库 | @douyinfe/semi-ui | ^2.86.0 | 企业级组件库 |
| 状态管理 | Context API + Zustand | ^4.4.0 | 全局状态管理 |
| 路由 | React Router | ^6.8.0 | 客户端路由 |
| 图表 | ECharts + Recharts | ^5.4.3 / ^2.8.0 | 数据可视化 |
| Flow 编辑器 | @xyflow/react | ^12.x | ⭐ 可视化节点编辑器 |
| 代码编辑器 | @monaco-editor/react | ^4.6.0 | ⭐ JSON 配置编辑器 |
| 网络请求 | Axios | ^1.6.2 | HTTP客户端 |
| WebSocket | socket.io-client | ^4.5.4 | 实时通信 |
开发工具链
| 工具 | 版本 | 用途 | 配置文件 |
|---|---|---|---|
| pytest | ≥7.4.0 | Python测试框架 | pytest.ini |
| pytest-asyncio | ≥0.21.0 | 异步测试支持 | pytest.ini |
| Black | ≥23.0.0 | Python代码格式化 | pyproject.toml |
| isort | ≥5.12.0 | Python导入排序 | pyproject.toml |
| flake8 | ≥6.0.0 | Python代码检查 | setup.cfg |
| mypy | ≥1.8.0 | Python类型检查 | - |
| ESLint | ^8.55.0 | TypeScript代码检查 | package.json |
| Shell脚本 | - | 自动化任务 | scripts/ |
工程目录结构
顶层目录结构
fire/
├── backend/ # 后端服务根目录
│ ├── main.py # FastAPI应用入口
│ ├── requirements.txt # Python依赖声明
│ ├── venv/ # Python虚拟环境(不提交)
│ ├── pyproject.toml # Python项目配置
│ │
│ ├── api/ # API接口层
│ │ └── v1/ # API v1版本
│ │ ├── __init__.py # 路由注册
│ │ ├── endpoints/ # 端点实现
│ │ │ ├── auth.py # 认证接口
│ │ │ ├── users.py # 用户管理
│ │ │ ├── custom_templates.py # ⭐ 自定义模板管理
│ │ │ ├── strategies.py # ⭐ 策略元数据查询
│ │ │ ├── websocket.py # WebSocket端点
│ │ │ └── ... # 其他业务端点
│ │ └── dependencies.py # 依赖注入
│ │
│ ├── core/ # 核心业务层(详见下文)
│ │ ├── models/ # 数据模型定义
│ │ ├── services/ # 业务服务
│ │ ├── repositories/ # 数据访问层
│ │ ├── middleware/ # 中间件
│ │ ├── trading/ # ⭐ 交易核心模块(详见下文)
│ │ └── data_source/ # 数据源模块
│ │
│ ├── infrastructure/ # 基础设施层
│ │ ├── cache/ # 缓存服务(预留)
│ │ ├── config/ # 配置管理
│ │ ├── database/ # 数据库连接(Redis)
│ │ ├── external/ # 外部服务(预留)
│ │ └── market_data/ # 市场数据管理
│ │
│ ├── tests/ # 测试目录
│ │ ├── unit/ # 单元测试
│ │ ├── integration/ # 集成测试
│ │ ├── e2e/ # 端到端测试
│ │ └── conftest.py # 测试配置
│ │
│ ├── utils/ # 工具函数
│ ├── data/ # 数据文件
│ ├── logs/ # 日志文件
│ └── scripts/ # 脚本文件
│
├── frontend/ # 前端应用根目录
│ ├── package.json # Node.js依赖声明
│ ├── tsconfig.json # TypeScript配置
│ ├── vite.config.ts # Vite构建配置
│ ├── index.html # HTML入口
│ ├── node_modules/ # Node依赖(不提交)
│ │
│ ├── src/ # 源代码目录
│ │ ├── main.tsx # React应用入口
│ │ ├── App.tsx # 根组件
│ │ │
│ │ ├── components/ # 通用组件
│ │ │ ├── layout/ # 布局组件
│ │ │ ├── common/ # 公共组件
│ │ │ ├── charts/ # 图表组件
│ │ │ └── FlowEditor/ # ⭐ Flow 编辑器组件
│ │ │ ├── FlowEditor.tsx # 主编辑器组件
│ │ │ ├── StrategyNode.tsx # 策略节点组件
│ │ │ ├── OutputNode.tsx # 输出节点组件
│ │ │ ├── StrategyLibrary.tsx # 策略库面板
│ │ │ ├── ParameterSidebar.tsx # 参数编辑面板
│ │ │ ├── FlowToolbar.tsx # 工具栏组件
│ │ │ ├── JsonConfigEditor.tsx # JSON 编辑器
│ │ │ ├── SaveConfigModal.tsx # 保存对话框
│ │ │ ├── UnsavedChangesModal.tsx # 未保存提示
│ │ │ └── types.ts # Flow 类型定义
│ │ │
│ │ ├── pages/ # 页面组件
│ │ │ ├── auth/ # 认证页面
│ │ │ ├── dashboard/ # 仪表板
│ │ │ ├── trading/ # 交易页面
│ │ │ │ └── common/ # ⭐ 交易通用组件
│ │ │ │ ├── ChannelConfigCard.tsx # ⭐ 通道配置卡片 (集成 FlowEditor)
│ │ │ │ ├── ChannelFlowEditor.tsx # 通道编辑器
│ │ │ │ ├── ChannelControlPanel.tsx # 通道控制面板
│ │ │ │ ├── ConfigImportExport.tsx # 配置导入导出
│ │ │ │ ├── PresetSelectorWithTemplates.tsx # 预设选择器(增强版)
│ │ │ │ └── PresetSelector.tsx # 基础预设选择器
│ │ │ ├── settings/ # 设置页面
│ │ │ └── ... # 其他业务页面
│ │ │
│ │ ├── services/ # API服务层
│ │ │ ├── api.ts # ⭐ API客户端基类(含自定义模板、策略元数据)
│ │ │ ├── auth.service.ts # 认证服务
│ │ │ └── ... # 其他服务
│ │ │
│ │ ├── hooks/ # React Hooks
│ │ │ ├── useAuth.ts # 认证Hook
│ │ │ ├── useWebSocket.ts # WebSocket Hook
│ │ │ ├── useFlowEditor.ts # ⭐ Flow 编辑器状态管理
│ │ │ ├── useChannelConfig.ts # ⭐ 多通道配置管理
│ │ │ ├── useStrategyMetadata.ts # ⭐ 策略元数据管理
│ │ │ ├── useSaveConfig.ts # ⭐ 配置保存逻辑
│ │ │ └── useCustomTemplates.ts # ⭐ 自定义模板 CRUD
│ │ │
│ │ ├── contexts/ # React Context
│ │ │ └── AuthContext.tsx # 认证上下文
│ │ │
│ │ ├── utils/ # 工具函数
│ │ │ ├── api-client.ts # HTTP客户端
│ │ │ ├── format.ts # 格式化工具
│ │ │ ├── validation.ts # 验证工具
│ │ │ ├── flowSerializer.ts # ⭐ Flow 图序列化/反序列化
│ │ │ ├── configValidator.ts # ⭐ 客户端配置验证
│ │ │ └── flowLayoutHelper.ts # ⭐ Flow 自动布局算法
│ │ │
│ │ ├── types/ # TypeScript类型定义
│ │ │ ├── api.d.ts # API类型
│ │ │ ├── models.d.ts # 数据模型
│ │ │ └── global.d.ts # 全局类型
│ │ │
│ │ └── styles/ # 样式文件
│ │ ├── global.css # 全局样式
│ │ └── variables.css # CSS变量
│ │
│ ├── public/ # 静态资源
│ └── dist/ # 构建输出(不提交)
│
├── scripts/ # 自动化脚本
│ ├── startup.sh # 启动脚本
│ ├── install.sh # 安装脚本
│ ├── test.sh # 测试脚本
│ ├── lint-fix.sh # 代码检查修复
│ ├── build.sh # 构建脚本
│ └── deploy.sh # 部署脚本
│
├── docs/ # 文档目录
│ ├── architecture/ # 架构文档
│ ├── api/ # API文档
│ ├── development/ # 开发指南
│ └── deployment/ # 部署文档
│
├── data/ # 数据目录
│ ├── redis/ # Redis持久化
│ └── backups/ # 数据备份
│
├── logs/ # 日志目录
│ ├── app/ # 应用日志
│ ├── access/ # 访问日志
│ └── error/ # 错误日志
│
├── .github/ # GitHub配置
│ └── workflows/ # CI/CD工作流
│
├── .env.example # 环境变量示例
├── .gitignore # Git忽略配置
├── README.md # 项目说明
└── CLAUDE.md # AI助手指南
核心模块详解:core/
Fire 系统的核心业务逻辑都在 backend/core/ 目录中,其中最重要的是 core/trading/ 交易核心模块。
core/trading/ - 交易核心模块 ⭐
这是整个系统最核心的模块,包含所有交易相关的业务逻辑:
core/trading/
├── engines/ # 交易引擎
│ ├── trading_engine.py # 订单执行引擎
│ ├── trading_session_engine.py # 会话管理引擎
│ ├── strategy_engine.py # 策略执行引擎
│ ├── channel_manager.py # 多通道管理器
│ ├── trading_channel.py # 单通道实现
│ ├── historical_data_manager.py # 历史数据管理
│ ├── simulation_engine.py # 模拟引擎
│ └── time_series_controller.py # 时序控制器
├── strategies/ # 交易策略
│ ├── base_strategy.py # 策略基类
│ ├── registry.py # 策略注册器
│ ├── metadata.py # 策略元数据
│ ├── strategy_factory.py # 策略工厂
│ ├── momentum/ # 动量策略组
│ │ ├── momentum_breakout.py
│ │ └── rsi_momentum.py
│ ├── trend/ # 趋势策略组
│ │ ├── ma_cross.py
│ │ └── trend_channel.py
│ ├── mean_reversion/ # 均值回归策略组
│ │ └── bollinger_bands.py
│ ├── volatility/ # 波动率策略组
│ │ └── low_volatility.py
│ ├── volume/ # 成交量策略组
│ │ └── volume_spike.py
│ ├── indicators/ # 技术指标
│ │ ├── pandas_ta_wrapper.py # pandas-ta 包装器
│ │ └── cache.py # 指标缓存
│ └── macd_strategy.py # MACD 策略(兼容保留)
├── models/ # 交易数据模型
│ ├── channel.py # 通道模型
│ ├── virtual_position.py # 虚拟持仓模型
│ ├── voting.py # 投票模型
│ ├── strategy_state.py # 策略状态模型
│ ├── strategy_data_requirement.py # 策略数据需求
│ ├── market_data_batch.py # 市场数据批次
│ └── data_loading_context.py # 数据加载上下文
├── services/ # 交易服务
│ ├── voting_service.py # 投票服务
│ ├── alert_system.py # 告警系统
│ ├── channel_state_manager.py # 通道状态管理
│ ├── channel_lifecycle.py # 通道生命周期管理
│ ├── circuit_breaker.py # 熔断器
│ ├── config_manager.py # 配置管理
│ ├── order_coordinator.py # 订单协调器
│ ├── position_netting.py # 持仓净额计算
│ ├── risk_manager.py # 风险管理
│ ├── risk_guard.py # 风险守卫
│ ├── virtual_position_tracker.py # 虚拟持仓追踪
│ └── parallel_strategy_executor.py # 并行策略执行器
├── risk/ # 风险控制
│ └── risk_engine.py # 风险引擎
├── config/ # 配置
│ ├── channel_config.py # 通道配置
│ ├── config_validator.py # 配置验证器
│ └── simple_channel_config_generator.py # 简单通道配置生成器
├── utils/ # 交易工具函数
│ ├── fee_calculator.py # 手续费计算器
│ └── timestamp_registry.py # 时间戳注册表
├── validators/ # 数据验证器
│ └── config_validator.py # 配置验证器
└── exceptions.py # 异常定义
架构原则:
- 职责边界:
- ✅ 交易引擎实现
- ✅ 策略执行逻辑
- ✅ 多通道协调
- ✅ 风险控制
- ✅ 订单管理
- ❌ 数据持久化(由 repositories/ 负责)
- ❌ 外部API(由 api/ 负责)
core/data_source/ - 数据源模块
core/data_source/
├── adapters/ # 数据源适配器
│ └── data_adapter.py # 数据适配器基类
└── factories/ # 工厂类
└── client_factory.py # 客户端工厂(单例模式)
core/models/ - 数据模型
core/models/
├── broker.py # 券商模型
├── trading.py # 交易模型(基础)
├── custom_template.py # ⭐ 自定义模板模型
└── multi_channel/ # 多通道模型
核心模型说明:
- CustomTemplate 模型族 (custom_template.py)
CustomTemplate- 自定义通道配置模板(内部存储)CustomTemplateCreate- 创建模板请求模型CustomTemplateUpdate- 更新模板请求模型CustomTemplateResponse- 模板响应模型(API 返回)- 字段说明:
template_name: 模板名称(1-100 字符,必填)description: 模板描述(0-500 字符,可选)channels_config: 通道配置数组(List[ChannelConfig])
- 用途: 用户保存和管理自定义通道配置
core/repositories/ - 数据访问层
core/repositories/
├── asset_repository.py
├── broker_repository.py
├── custom_template_repository.py # ⭐ 自定义模板存储库
├── settings_repository.py
├── stock_repository.py
├── trading_repository.py
└── user_repository.py
职责边界:
- ✅ Redis 数据访问
- ✅ 数据查询和存储
- ✅ 数据持久化
- ❌ 业务逻辑(由 core/services/ 和 core/trading/ 负责)
新增组件说明:
- CustomTemplateRepository (custom_template_repository.py)
- 职责: 用户自定义通道配置模板的 CRUD 操作
- 数据源: Redis (Hash + Set + 索引)
- 核心方法:
create(user_id, template)- 创建新模板(含名称唯一性校验)get(user_id, template_id)- 获取单个模板list(user_id, sort_by, order)- 列出用户所有模板(支持排序)update(user_id, template_id, update_data)- 更新模板(支持重命名)delete(user_id, template_id)- 删除模板(同步清理索引)
- Redis 键设计:
- 模板数据:
custom_template:{user_id}:{template_id}(Hash - 永久保存) - 用户模板列表:
custom_template_list:{user_id}(Set - 永久保存) - 名称索引:
custom_template_by_name:{user_id}:{template_name}(String - 永久保存)
- 模板数据:
- 特性:
- 同一用户的模板名称唯一性校验
- 支持按创建时间/更新时间排序
- 级联删除(删除模板时同步清理所有索引)
core/services/ - 业务服务
core/services/
├── account_service.py
├── config_validator.py # ⭐ 配置验证服务
├── import_service.py
├── market_data_service.py
├── stock_service.py
├── trading_service.py
├── websocket_service_factory.py
└── multi_channel/ # 多通道服务
新增服务说明:
- ConfigValidator (config_validator.py)
- 职责: 通道配置验证服务(服务端验证)
- 核心方法:
validate_channels_config(channels_config)- 验证多通道配置_validate_single_channel(channel)- 验证单通道配置_validate_strategies(strategies)- 验证策略组配置
- 验证规则:
- 通道数量: 1-3 个
- 策略 ID: 必须在
VALID_STRATEGIES集合中 -
通道类型: aggressivebalancedconservative - 资金分配: 所有启用通道的
capital_allocation总和 = 1.0 - 策略权重: 每个通道内策略
weight总和 = 1.0
- 返回值:
Tuple[bool, List[str]]- (是否有效, 错误消息列表)
命名规范
文件命名
- 使用 snake_case:
trading_engine.py,base_strategy.py - 模块名称应清晰描述功能
目录命名
- 使用 复数形式 表示集合:
strategies/,engines/,models/ - 使用 单数形式 表示单一概念:
risk/,config/
迁移历史
2025-11-16: 清理旧目录
- ❌ 删除
backend/trading/- 空目录(Phase 0 遗留) - ❌ 删除
backend/strategies/- 空目录(Phase 0 遗留) - ✅ 保留
backend/core/trading/- 唯一正确的交易模块位置
分层架构设计
依赖关系
api/ → core/services/ → core/trading/
→ core/repositories/
→ infrastructure/
后端分层
graph TD
subgraph "API Layer"
REST[REST Endpoints]
WS[WebSocket Endpoints]
MW[Middleware]
end
subgraph "Service Layer"
BS[Business Services]
DS[Domain Services]
end
subgraph "Repository Layer"
REPO[Repositories]
DAO[Data Access]
end
subgraph "Infrastructure Layer"
DB[Database]
CACHE[Cache]
EXT[External Services]
end
REST --> BS
WS --> DS
MW --> BS
BS --> REPO
DS --> REPO
REPO --> DB
REPO --> CACHE
BS --> EXT
| 层级 | 职责 | 主要组件 | 依赖方向 |
|---|---|---|---|
| API层 | 请求处理、路由、序列化 | endpoints, middleware | → Service |
| Service层 | 业务逻辑、事务管理 | services, validators | → Repository |
| Repository层 | 数据访问抽象 | repositories, mappers | → Infrastructure |
| Infrastructure层 | 技术实现、外部集成 | database, cache, clients | 无依赖 |
前端分层
graph TD
subgraph "View Layer"
Pages[Pages]
Components[Components]
end
subgraph "State Layer"
Context[Context]
Hooks[Hooks]
end
subgraph "Service Layer"
API[API Services]
WS2[WebSocket Services]
end
subgraph "Utils Layer"
Client[HTTP Client]
Helper[Helpers]
end
Pages --> Context
Components --> Hooks
Context --> API
Hooks --> API
API --> Client
WS2 --> Client
| 层级 | 职责 | 主要组件 | 依赖方向 |
|---|---|---|---|
| View层 | UI渲染、用户交互 | pages, components | → State |
| State层 | 状态管理、业务逻辑 | contexts, hooks | → Service |
| Service层 | API封装、数据转换 | services | → Utils |
| Utils层 | 通用工具、基础设施 | api-client, helpers | 无依赖 |
核心模块交互
请求处理流程
sequenceDiagram
participant Client as 客户端
participant API as API网关
participant Auth as 认证中间件
participant Service as 业务服务
participant Repo as 数据仓库
participant Cache as 缓存
participant DB as 数据库
Client->>API: HTTP Request
API->>Auth: 验证JWT Token
Auth->>Auth: 校验权限
Auth->>Service: 调用业务逻辑
Service->>Repo: 数据操作
Repo->>Cache: 查询缓存
alt 缓存未命中
Repo->>DB: 查询数据库
DB-->>Repo: 返回数据
Repo->>Cache: 更新缓存
end
Cache-->>Repo: 返回数据
Repo-->>Service: 返回结果
Service-->>API: 业务响应
API-->>Client: HTTP Response
WebSocket实时通信
sequenceDiagram
participant Client as 客户端
participant WS as WebSocket服务
participant Redis as Redis PubSub
participant Service as 业务服务
Client->>WS: 建立连接
WS->>Redis: 订阅频道
Service->>Redis: 发布消息
Redis->>WS: 推送消息
WS->>Client: 推送数据
Client->>WS: 发送命令
WS->>Service: 处理命令
Service-->>WS: 返回结果
WS-->>Client: 响应结果
安全架构
认证与授权
graph LR
subgraph "认证流程"
Login[用户登录] --> Validate[验证凭据]
Validate --> JWT[生成JWT]
JWT --> Store[存储Token]
end
subgraph "请求验证"
Request[API请求] --> Extract[提取Token]
Extract --> Verify[验证Token]
Verify --> Check[检查权限]
Check --> Process[处理请求]
end
Store --> Request
| 安全措施 | 实现方式 | 目的 |
|---|---|---|
| 身份认证 | JWT Token (7天有效期) | 验证用户身份 |
| 权限控制 | RBAC基于角色 | 控制资源访问 |
| 数据加密 | HTTPS/TLS | 传输安全 |
| 密码存储 | bcrypt哈希 | 防止明文泄露 |
| 请求限流 | Rate Limiting | 防止暴力攻击 |
| CORS控制 | 白名单机制 | 跨域安全 |
| SQL注入防护 | 参数化查询 | 防止注入攻击 |
| XSS防护 | 输入验证+输出编码 | 防止脚本攻击 |
前后端认证架构
认证流程
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant ApiClient as API客户端
participant Backend as 后端API
participant Redis as Redis缓存
%% 登录流程
User->>Frontend: 输入用户名/密码
Frontend->>ApiClient: login(credentials)
Note over ApiClient: skipAuth: true
ApiClient->>Backend: POST /api/v1/login
Backend->>Backend: 验证凭据
Backend->>Redis: 存储会话
Backend-->>ApiClient: {access_token, user}
ApiClient->>ApiClient: 存储token到localStorage
ApiClient-->>Frontend: 登录成功
Frontend->>User: 跳转主页
%% 后续请求
User->>Frontend: 访问受保护页面
Frontend->>ApiClient: getData()
ApiClient->>ApiClient: 读取localStorage token
ApiClient->>Backend: GET /api/v1/data<br/>Authorization: Bearer {token}
Backend->>Backend: 验证JWT
Backend->>Redis: 检查会话
Backend-->>ApiClient: 返回数据
ApiClient-->>Frontend: 显示数据
%% 认证失败
Frontend->>ApiClient: getData()
ApiClient->>Backend: 无效token
Backend-->>ApiClient: 401 Unauthorized
ApiClient->>ApiClient: 清除localStorage
ApiClient->>Frontend: 跳转登录页
Token管理策略
| 策略 | 前端实现 | 后端实现 | 说明 |
|---|---|---|---|
| 存储位置 | localStorage | 内存+Redis | 前端持久化,后端缓存 |
| 自动添加 | ApiClient拦截器 | - | 所有请求自动添加Authorization header |
| 刷新机制 | 401时重新登录 | JWT 7天过期 | 简化实现,无刷新token |
| 失效处理 | 401/403自动跳转登录 | 返回标准错误响应 | 统一错误处理 |
| 并发控制 | - | 单点登录 | 新登录踢出旧会话 |
API客户端架构
// 前端统一API客户端
class ApiClient {
// 自动Token管理
private buildHeaders(): HeadersInit {
const token = localStorage.getItem('token');
return {
'Content-Type': 'application/json',
'Authorization': token ? `Bearer ${token}` : ''
};
}
// 统一错误处理
private async handleResponse<T>(response: Response): Promise<T> {
if (response.status === 401 || response.status === 403) {
localStorage.removeItem('token');
window.location.href = '/login';
throw new Error('认证失败');
}
// ... 其他错误处理
}
}
性能优化
缓存策略
| 缓存层级 | 实现技术 | 缓存内容 | TTL |
|---|---|---|---|
| 客户端缓存 | localStorage | 用户Token、用户配置 | 永久(手动清除) |
| 应用缓存 | Redis | 会话、用户数据、交易数据 | 根据数据类型配置 |
| 连接池 | Redis连接池 | Redis连接复用 | 长连接 |
优化技术
系统采用以下优化技术:
前端优化:
- 代码分割:使用 Vite 动态导入实现按需加载
- Tree Shaking:自动移除未使用的代码
- 懒加载:路由级别的组件懒加载
后端优化:
- 异步处理:FastAPI 原生异步支持
- 连接池:Redis 连接池复用
- Redis缓存:减少重复计算和数据查询
网络优化:
- HTTP/2:支持多路复用
- Keep-Alive:保持长连接
部署架构
本地开发部署
系统目前仅支持本地开发部署,不涉及生产部署配置。
核心组件:
- 前端: Vite Dev Server (端口 3000) + HMR 热更新
- 后端: Uvicorn ASGI 服务器 (端口 8000) +
--reload自动重载 - 数据库: 本地 Redis (端口 6379)
- 代理: Vite 内置 HTTP/WebSocket 代理
启动方式:
# 方式1: 使用启动脚本 (推荐)
./scripts/startup.sh # 启动所有服务
./scripts/startup.sh --backend-only # 仅启动后端
./scripts/startup.sh --frontend-only # 仅启动前端
./scripts/startup.sh --stop # 停止所有服务
# 方式2: 手动启动后端
cd backend && source venv/bin/activate
uvicorn main:app --reload --port 8000
# 方式3: 手动启动前端
cd frontend && npm run dev
访问地址:
- 前端应用: http://localhost:3000
- 后端 API: http://localhost:8000
- API 文档: http://localhost:8000/docs
- 健康检查: http://localhost:8000/health
数据存储:
- Redis 端口: localhost:6379
- 数据持久化目录:
data/redis/(如果配置) - 日志目录:
backend/logs/,logs/
开发特性:
- ✅ 前端 HMR (Hot Module Replacement) - 代码修改实时刷新
- ✅ 后端 Auto-reload - Python 文件修改自动重启
- ✅ WebSocket 自动重连 - 后端重启时前端自动恢复连接
- ✅ Vite Proxy - 自动转发
/api/*和/ws到后端 8000 端口 - ❌ 无 Nginx - 开发环境不需要反向代理
- ❌ 无 Docker - 目前不使用容器化部署
- ❌ 无生产构建 - 仅本地开发环境
日志架构
日志实现
Fire 使用 Python 内置的 logging 模块进行日志记录,日志输出到本地文件系统。
日志级别:
- DEBUG: 调试信息
- INFO: 常规信息
- WARNING: 警告信息
- ERROR: 错误信息
- CRITICAL: 严重错误
日志存储:
- 应用日志:
backend/logs/ - 系统日志:
logs/backend.log - Redis日志:
logs/redis.log
日志配置:
- 配置文件:通过代码中的 logging 配置
- 日志级别:通过
settings.log_level配置(默认 INFO)
相关文档
架构文档
- 量化交易架构 - 交易业务架构设计
- 交易引擎模块 - 交易引擎详细设计
- 策略系统模块 - 策略系统详细设计
- 风险管理模块 - 风险控制详细设计
- 数据管道模块 - 数据处理详细设计
- 券商适配器模块 - 券商接口详细设计
- WebSocket 模块 - 实时通信详细设计
- 前端模块 - 前端架构详细设计