Files
kami_apple_exchage/backend/docs/PROJECT_STRUCTURE.md
danial 8ad2a5366a refactor(backend): 将Celery替换为Arq进行协程任务处理
本次提交将后端的任务队列系统从Celery迁移到了Arq,以支持基于协程的任务处理。主要改动包括:
- 更新文档和配置文件,反映架构变化。
- 修改健康检查和服务初始化逻辑,以适应Arq的使用。
- 移除与Celery相关的代码,并添加Arq任务定义和调度器。
- 更新Dockerfile和相关脚本,确保Arq worker能够正确运行。
- 调整API和业务服务中的任务处理逻辑,移除对Celery的依赖。

这些改动旨在提高系统的异步处理能力和整体性能。
2025-09-18 16:02:05 +08:00

6.7 KiB
Raw Blame History

分布式爬虫系统项目结构

项目概述

这是一个基于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/

特性

  1. 分布式锁机制: 解决多副本任务竞争问题
  2. 任务队列解耦: API服务与爬虫逻辑完全分离
  3. 状态管理: 基于Redis的分布式状态存储
  4. 故障恢复: 自动检测和恢复异常任务
  5. 持久化存储: 支持错误截图的持久化保存
  6. 高可用性: 支持多副本部署和自动扩缩容
  7. 监控告警: 完整的健康检查和指标收集

开发指南

详细的架构说明和开发指南请参考 docs/DISTRIBUTED_ARCHITECTURE.md