| # HF Space 部署优化方案 |
|
|
| 根据HF Space部署约束,本方案旨在对现有系统进行重构优化,以提高性能、降低资源消耗并增强可维护性。 |
|
|
| ## 1. 内存缓存设计 |
|
|
| * **目标**:将后端 `FastAPICache` 从 `RedisBackend` 切换到基于内存的LRU缓存,并为现有内存缓存(如 `backend/data/data_service_memory.py` 中的 `data_cache`)设置上限和自动清理机制,以更好地支持新华财经数据的高效处理。 |
| * **具体步骤**: |
| * **评估现有缓存使用情况**: |
| * 检查 `backend/app/main.py` 中 `FastAPICache` 的使用范围,确定哪些API端点使用了缓存。 |
| * 检查 `backend/data/data_service_memory.py` 中 `data_cache` 的使用情况,了解其存储的数据类型和访问模式。 |
| * **引入LRU缓存库**: |
| * 对于Python后端,考虑使用 `functools.lru_cache` 或第三方库(如 `cachetools`)来实现LRU缓存。 |
| * **修改 `FastAPICache` 配置**: |
| * 在 `backend/app/main.py` 中,将 `FastAPICache.init` 的后端从 `RedisBackend` 更改为内存LRU后端。 |
| * 配置LRU缓存的最大容量,防止内存溢出。 |
| * **增强现有内存缓存**: |
| * 在 `backend/data/data_service_memory.py` 中,如果 `data_cache` 不是LRU实现,则将其替换为LRU缓存,并设置缓存上限。 |
| * 实现自动清理机制,例如基于时间或大小的清理策略。 |
|
|
| ## 2. 轻量监控方案 |
|
|
| * **目标**:在不引入额外监控服务的情况下,提供基本的系统健康和性能洞察。 |
| * **具体步骤**: |
| * **内置健康检查API端点**: |
| * 在 `backend/app/api/v1/api.py` 或新建一个 `health.py` 文件中,添加一个 `/health` 或 `/status` API端点。该端点应返回简单的状态信息(如 `{"status": "ok"}`),并可选择包含内存使用情况、CPU负载等基本指标。 |
| * 集成 `backend/app/services/data_monitor.py` 模块,将其提供的 `/market-data/status` API纳入整体健康检查和状态报告。 |
| * **实时日志流分析**: |
| * 确保所有关键操作和错误都通过标准日志库(如Python的 `logging` 模块)输出到控制台。 |
| * HF Space会自动捕获这些日志,用户可以通过HF Space界面查看实时日志流。 |
| * 在日志中包含关键信息,如请求处理时间、缓存命中率等,以便进行简单的日志分析。 |
| * **简易状态仪表盘(基于内存数据)**: |
| * 在后端维护一些内存中的统计数据,例如: |
| * API请求计数 |
| * 缓存命中/未命中次数 |
| * 内存使用峰值 |
| * 通过一个新的API端点(例如 `/metrics`)暴露这些内存中的统计数据,供用户或简单的脚本查询。 |
| * 前端可以开发一个简单的页面来展示这些数据,或者用户可以直接通过 `curl` 命令获取。 |
|
|
| ## 3. 代理池适配 |
|
|
| * **目标**:优化代理池的使用,使其适应HF Space的资源限制,并增加内存使用监控和动态调整策略。 |
| * **具体步骤**: |
| * **精简代理池容量**: |
| * 在 `backend/app/core/config.py` 中配置 `PROXY_POOL`,并确保其容量限制在10个以内,以适应HF Space的资源限制。 |
| * **增加内存使用监控**: |
| * 在 `backend/app/utils/proxy_manager.py` 中集成内存使用情况的检查。当代理池的内存使用量接近预设阈值时,触发警告日志。 |
| * **动态调整策略**: |
| * 在 `backend/app/utils/proxy_manager.py` 中实现动态调整机制,例如: |
| * 如果代理使用失败率高,则尝试更换代理。 |
| * 如果系统内存紧张,则暂时减少活跃代理的数量。 |
| * 利用 `tenacity` 库的重试机制,增强代理的健壮性。 |
|
|
| ## 4. HF构建流程 |
|
|
| * **目标**:优化Docker镜像大小和HF Space的健康检查配置,并引入内存使用预警机制。 |
| * **具体步骤**: |
| * **优化Docker镜像大小**: |
| * 检查 `Dockerfile`,采用多阶段构建(Multi-stage build)来减小最终镜像大小,并确保正确安装所有必要的依赖(包括新华财经数据集成所需的 `httpx`, `fake_useragent`, `tenacity`, `feedparser` 等)。 |
| * 移除不必要的构建依赖和运行时依赖。 |
| * 使用更小的基础镜像(如 `alpine` 版本)。 |
| * 清理缓存和临时文件。 |
| * **配置HF Space健康检查**: |
| * 在 `Dockerfile` 或 HF Space 的配置中,指定上一步创建的健康检查API端点(例如 `/health`)作为HF Space的健康检查路径。 |
| * 配置健康检查的频率和超时时间。 |
| * **内存使用预警机制**: |
| * 在应用程序启动时,记录初始内存使用量。 |
| * 定期(例如每隔几分钟)检查当前内存使用量,并与预设的阈值进行比较。 |
| * 如果内存使用量超过阈值,则通过日志输出警告信息,提示可能存在内存泄漏或资源使用过高。 |
| * 考虑使用Python的 `resource` 模块或 `psutil` 库来获取内存信息。 |
|
|
| ## 方案概览图 |
|
|
| ```mermaid |
| graph TD |
| A[当前系统] --> B{HF Space 部署约束} |
| |
| subgraph 内存缓存设计 |
| B --> C[LRU 内存缓存替代 Redis] |
| C --> D[设置缓存上限] |
| C --> E[实现自动清理机制] |
| end |
| |
| subgraph 轻量监控方案 |
| B --> F[内置健康检查 API] |
| F --> G[实时日志流分析] |
| F --> H[简易状态仪表盘] |
| end |
| |
| subgraph 代理池适配 |
| B --> I[精简代理池容量] |
| I --> J[增加内存使用监控] |
| I --> K[动态调整策略] |
| end |
| |
| subgraph HF 构建流程 |
| B --> L[优化 Docker 镜像大小] |
| L --> M[配置 HF Space 健康检查] |
| L --> N[内存使用预警机制] |
| end |
| |
| C & D & E & F & G & H & I & J & K & L & M & N --> O[HF 特化优化方案] |