mirror of
https://git.oceanpay.cc/danial/kami_apple_exchage.git
synced 2025-12-18 21:23:49 +00:00
本次提交将后端的任务队列系统从Celery迁移到了Arq,以支持基于协程的任务处理。主要改动包括: - 更新文档和配置文件,反映架构变化。 - 修改健康检查和服务初始化逻辑,以适应Arq的使用。 - 移除与Celery相关的代码,并添加Arq任务定义和调度器。 - 更新Dockerfile和相关脚本,确保Arq worker能够正确运行。 - 调整API和业务服务中的任务处理逻辑,移除对Celery的依赖。 这些改动旨在提高系统的异步处理能力和整体性能。
6.7 KiB
6.7 KiB
分布式爬虫系统项目结构
项目概述
这是一个基于Playwright的分布式爬虫系统,支持多副本部署和Kubernetes环境,具备Redis分布式锁、Arq任务队列、状态管理和故障恢复等功能。
目录结构
backend/
├── app/ # 应用主目录
│ ├── __init__.py
│ ├── main.py # FastAPI应用入口
│ ├── api/ # API层
│ │ ├── __init__.py
│ │ └── v1/ # API版本1
│ │ ├── __init__.py
│ │ └── endpoints/ # API端点
│ │ ├── __init__.py
│ │ ├── health_extended.py # 扩展健康检查
│ │ └── orders.py # 订单相关API
│ ├── core/ # 核心功能模块
│ │ ├── arq_worker.py # Arq worker配置
│ │ ├── comprehensive_logging.py # 综合日志系统
│ │ ├── config.py # 应用配置
│ │ ├── database.py # 数据库连接
│ │ ├── distributed_lock.py # 分布式锁实现
│ │ ├── exceptions.py # 自定义异常
│ │ ├── graceful_shutdown.py # 优雅关闭处理
│ │ ├── logging.py # 基础日志配置
│ │ ├── middleware.py # 中间件
│ │ ├── redis.py # Redis连接
│ │ ├── state_manager.py # 状态管理
│ │ └── task_recovery.py # 任务恢复机制
│ ├── models/ # 数据模型
│ │ ├── base.py # 基础模型
│ │ └── order.py # 订单模型
│ ├── repositories/ # 数据访问层
│ │ ├── __init__.py
│ │ ├── base_repository.py # 基础仓储
│ │ └── order_repository.py # 订单仓储
│ ├── schemas/ # Pydantic模式
│ │ ├── __init__.py
│ │ ├── health.py # 健康检查模式
│ │ └── order.py # 订单模式
│ ├── services/ # 业务逻辑层
│ │ ├── file_service.py # 文件服务
│ │ ├── health_service.py # 健康检查服务
│ │ ├── order_business_service.py # 订单业务服务
│ │ ├── order_service.py # 订单服务
│ │ └── playwright_service.py # Playwright服务
│ └── tasks/ # Celery任务
│ ├── __init__.py
│ ├── cleanup_tasks.py # 清理任务
│ ├── crawler_tasks.py # 爬虫任务
│ └── screenshot_tasks.py # 截图任务
├── docs/ # 文档目录
│ └── DISTRIBUTED_ARCHITECTURE.md # 架构文档
├── k8s/ # Kubernetes配置
│ ├── configmap.yaml # 配置映射
│ ├── deployment.yaml # 部署配置
│ ├── hpa.yaml # 水平扩展配置
│ ├── ingress.yaml # 入口配置
│ ├── namespace.yaml # 命名空间
│ ├── persistent-volumes.yaml # 持久化存储
│ ├── secret.yaml # 密钥配置
│ └── service.yaml # 服务配置
├── scripts/ # 脚本目录
│ └── Makefile # 构建脚本
├── tests/ # 测试目录
│ ├── integration/ # 集成测试
│ │ ├── test_distributed_lock.py # 分布式锁测试
│ │ └── test_task_recovery.py # 任务恢复测试
│ └── unit/ # 单元测试
├── .editorconfig # 编辑器配置
├── .flake8 # Flake8配置
├── .gitignore # Git忽略文件
├── .pre-commit-config.yaml # 预提交钩子
├── .python-version # Python版本
├── docker-compose.yml # Docker Compose配置
├── docker-entrypoint.sh # Docker入口脚本
├── Dockerfile # Docker镜像构建
├── PROJECT_STRUCTURE.md # 项目结构说明(本文件)
├── pyproject.toml # Python项目配置
├── pytest.ini # Pytest配置
├── README.md # 项目说明
├── redis.conf # Redis配置
└── uv.lock # UV锁文件
核心组件说明
1. API层 (app/api/)
- health_extended.py: 扩展的健康检查端点,包含依赖服务检查
- orders.py: 订单相关的API端点,支持任务提交和状态查询
2. 核心模块 (app/core/)
- distributed_lock.py: Redis分布式锁实现,使用Lua脚本保证原子性
- arq_worker.py: Arq worker配置,包含异步任务处理和重试策略
- state_manager.py: 基于Redis的分布式状态管理
- task_recovery.py: 任务恢复机制,处理失败和中断的任务
- graceful_shutdown.py: 优雅关闭处理,确保任务完整性
3. 任务模块 (app/tasks/)
- crawler_tasks.py: 爬虫相关的Celery任务
- screenshot_tasks.py: 截图处理任务
- cleanup_tasks.py: 系统清理任务
4. 服务层 (app/services/)
- file_service.py: 文件存储抽象层,支持多种存储后端
- playwright_service.py: Playwright浏览器自动化服务
- order_business_service.py: 订单业务逻辑处理
5. 部署配置
- Docker: 容器化部署配置
- Kubernetes: 生产环境部署清单
- Redis: 缓存和消息队列配置
技术栈
- 后端框架: FastAPI
- 任务队列: Celery + Redis
- 浏览器自动化: Playwright
- 数据库: PostgreSQL
- 缓存: Redis
- 容器化: Docker
- 编排: Kubernetes
- 监控: Prometheus + Grafana
部署方式
开发环境
# 使用Docker Compose
docker-compose up -d
生产环境
# 部署到Kubernetes
kubectl apply -f k8s/
特性
- 分布式锁机制: 解决多副本任务竞争问题
- 任务队列解耦: API服务与爬虫逻辑完全分离
- 状态管理: 基于Redis的分布式状态存储
- 故障恢复: 自动检测和恢复异常任务
- 持久化存储: 支持错误截图的持久化保存
- 高可用性: 支持多副本部署和自动扩缩容
- 监控告警: 完整的健康检查和指标收集
开发指南
详细的架构说明和开发指南请参考 docs/DISTRIBUTED_ARCHITECTURE.md。