Celery 源码分析(二): 基础架构
💡
原文中文,约4500字,阅读约需11分钟。
📝
内容提要
Celery是一个分布式的任务队列框架,有五个主要组件:worker、broker、beat、producer和result backend。worker负责监听消息队列,从broker中拉取任务并分配给子进程执行;broker是消息中间件,接收任务消息并按顺序分发给指定的任务消费者;beat是任务调度器,周期性地将任务放入任务队列;producer是任务生产者,通过函数、装饰器或调用Celery API来产生任务;result backend用于存储任务执行结果。Worker之间通过Gossip协议进行交互,决定任务由哪个Worker执行。Celery使用Kombu操作消息队列。
🎯
关键要点
- Celery是一个分布式的任务队列框架,主要组件包括worker、broker、beat、producer和result backend。
- worker是Celery的核心组件,负责监听消息队列并执行任务。
- broker是消息中间件,接收任务消息并按顺序分发给任务消费者,常用的有RabbitMQ和Redis。
- beat是任务调度器,周期性地将任务放入任务队列。
- producer是任务生产者,通过函数、装饰器或调用Celery API来产生任务。
- result backend用于存储任务执行结果,支持多种存储媒介。
- 任务的生命周期包括任务生产、任务分发、任务执行和结果存储。
- Exchange在RabbitMQ中起到路由器的作用,将消息发送到指定的队列。
- Celery通过Kombu操作消息队列,Kombu是一个兼容AMQP协议的消息队列抽象库。
- Worker之间通过Gossip协议进行交互,决定任务由哪个Worker执行。
- Gossip协议存在音讯推迟、音讯冗余和拜占庭问题等缺陷。
- Worker的组成部分包括Hub、Pool、Beat、Timer、StateDB、Consumer和WorkerComponent。
➡️