跳转至

后端和代理

Celery 支持多种消息传输替代方案。

代理概览

名称 状态 监控 远程控制
RabbitMQ Stable Yes Yes
Redis Stable Yes Yes
Amazon SQS Stable No No
Zookeeper Experimental No No
Kafka Experimental No No
GC PubSub Experimental Yes Yes

实验性代理可能功能正常,但它们没有专门的维护者。

缺少监控支持意味着传输不实现事件,因此 Flower、celery eventscelerymon 和其他基于事件的监控工具将无法工作。

远程控制意味着能够在运行时使用 celery inspectcelery control 命令(以及使用远程控制 API 的其他工具)检查和管理工作器。

摘要

本节并非对后端和代理的全面介绍。

Celery 能够与许多不同的后端(结果存储)和代理(消息传输)进行通信和存储。

Redis

Redis 既可以作为后端(backend)也可以作为代理(broker)。

作为代理: Redis 适用于快速传输小消息。大消息可能会阻塞系统。

作为后端: Redis 是一个超快的键值存储,使其在获取任务调用结果时非常高效。与 Redis 的设计一样,您需要考虑可用于存储数据的有限内存,以及如何处理数据持久性。如果结果持久性很重要,请考虑为后端使用另一个数据库。

RabbitMQ

RabbitMQ 是一个代理(broker)。

作为代理: RabbitMQ 处理大消息比 Redis 更好,但是如果消息非常快速地大量涌入,扩展性可能成为问题,除非 RabbitMQ 运行在非常大的规模上,否则应考虑使用 Redis 或 SQS。

作为后端: RabbitMQ 可以通过 rpc:// 后端存储结果。此后端为每个客户端创建单独的临时队列。

注意:RabbitMQ(作为代理)和 Redis(作为后端)经常一起使用。如果结果存储需要更可靠的长时期持久性,请考虑使用 PostgreSQL 或 MySQL(通过 SQLAlchemy)、Cassandra 或自定义定义的后端。

SQS

SQS 是一个代理(broker)。

如果您已经与 AWS 紧密集成,并且熟悉 SQS,它作为一个代理是一个很好的选择。它极其可扩展且完全托管,任务委派方式与 RabbitMQ 类似。但它缺少 RabbitMQ 代理的一些功能,例如 worker remote control commands

SQLAlchemy

SQLAlchemy 是一个后端(backend)。

它允许 Celery 与 MySQL、PostgreSQL、SQLite 等接口。它是一个 ORM,是 Celery 可以使用 SQL 数据库作为结果后端的方式。

GCPubSub

Google Cloud Pub/Sub 是一个代理(broker)。

如果您已经与 Google Cloud 紧密集成,并且熟悉 Pub/Sub,它作为一个代理是一个很好的选择。它极其可扩展且完全托管,任务委派方式与 RabbitMQ 类似。