Personal Blog

develop

Celery概念介绍

介绍Celery的基本概念、组件架构等

Celery定义

官网的描述摘抄:

Celery 是一个简单、灵活且可靠的分布式系统,用于处理大量消息,同时为运维工作提供维护该系统所需的工具。 它是一个专注于实时处理的任务队列,同时也支持任务调度。

任务队列是什么?

任务队列是一种用于在多个线程或机器之间分配工作的机制。

任务队列的输入是一个称为任务的工作单元。专门的工作节点(worker)会持续监控任务队列,等待执行新的工作。

Celery 通过消息进行通信,通常使用消息代理节点(broker)在客户端和工作节点(worker)之间进行协调。要启动一个任务,客户端会向队列中添加一条消息,然后消息代理节点(broker)将该消息传递给一个工作节点(worker)。 一个 Celery 系统可以由多个工作节点(worker)和消息代理节点(broker)组成,从而实现高可用性和横向扩展。 当工作节点(worker)执行完任务后,会向消息代理节点(broker)发送一个确认消息,告诉它任务已经完成,并将结果存储在存储代理节点(Backend)中。 除了上述手动触发外,Celery 还支持任务调度。可以通过 Celery Beat 组件来实现任务的定时执行。 最后,还有一个用于常看任务执行情况的flower组件,例如可以通过它来查看任务的执行状态、执行时间、执行结果等。

总结一下,大致由以下组件或节点构成:

  • 客户端(Client):用于提交需要执行的函数或操作(如发送邮件、数据处理)任务到任务队列。
  • 消息代理节点(Broker):用于协调客户端和工作节点之间的通信,常用的存储消息的中间件(如 Redis、RabbitMQ)。
    • 任务队列(Task Queue):代理节点中用于存储待执行的任务具体信息。
  • 工作节点(Worker):用于执行任务队列中定义的特定函数或操作任务。
  • 存储代理节点(Backend):用于存储任务最终的执行结果,常用的有 Redis、Mysql数据库等。
  • Celery Beat(可选):用于执行定长或周期性任务。
  • Celery Flower(可选):用于监控 Celery 任务队列的执行情况。

Celery架构图

graph TD
    subgraph 客户端层
        A[客户端 Client] -->|提交任务| B[Celery Beat可选]
        B -->|调度任务| C
    end
    
    subgraph 通信层
        A -->|提交任务| C[消息代理节点 Broker]
        C -->|存储任务| D[任务队列 Task Queue]
    end
    
    subgraph 执行层
        D -->|分发任务| E[工作节点 Worker]
        E -->|执行任务| E
        E -->|存储结果| F[存储代理节点 Backend]
        E -->|确认完成| C
    end
    
    subgraph 监控层
        G[Celery Flower可选] -->|监控状态| C
        G -->|监控结果| F
        G -->|监控执行| E
    end
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#bbf,stroke:#333,stroke-dasharray: 5 5
    style C fill:#bfb,stroke:#333,stroke-width:2px
    style D fill:#fcf,stroke:#333,stroke-width:2px
    style E fill:#ff9,stroke:#333,stroke-width:2px
    style F fill:#9ff,stroke:#333,stroke-width:2px
    style G fill:#fbb,stroke:#333,stroke-dasharray: 5 5

这个架构图展示了Celery的主要组件及其交互关系:

  1. 客户端层:包括客户端(Client)和可选的Celery Beat调度器
  2. 通信层:由消息代理节点(Broker)和任务队列组成
  3. 执行层:包含工作节点(Worker)和存储代理节点(Backend)
  4. 监控层:可选的Celery Flower监控工具

正式开始前的准备工作

在正式开始之前,我们需要先确定消息代理节点(Broker)和存储代理节点(Backend)的选型,具体的列表参考官方文档

  • 消息代理节点(Broker):常用的有 Redis、RabbitMQ 等,我们后续选择redis作为消息代理节点。
  • 存储代理节点(Backend):常用的有 Redis、Mysql数据库等,我们后续依然选择redis作为存储代理节点。

无论选择了哪种消息代理节点(Broker)或存储代理节点(Backend),请先安装好他们。如果你确实不知道如何安装,推荐使用docker-compose来安装。 各个组件的docker-compose安装请参考各自的官网。

相关代码

Celery系列文章中的所有代码在系列的最后一篇文章中给出。

如果对后续文章中的内容有疑惑,可以对着完整的代码进行更加全面的理解。

DEVELOP · CELERY
develop python3 celery