celery 基础教程(一):工作流程,架构以及概念
1.工作流程
celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。
一个celery系统可以包含很多的worker和broker,可增强横向扩展性和高可用性能。
2.概念介绍
Brokers
Celery支持多种消息中间件作为Broker,即中间人。来在应用程序和Worker之间传递消息。
broker是一个消息传输的中间件,可以理解为一个邮箱。每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行对于的程序执行。好吧,这个邮箱可以看成是一个消息队列。其中Broker的中文意思是 经纪人 ,其实就是一开始说的 消息队列 ,用来发送和接受消息。这个Broker有几个方案可供选择:RabbitMQ (消息队列),Redis(缓存数据库),数据库(不推荐),等等
消息中间件 | 支持适配状态 | 支持监控 | 支持远程控制 |
---|---|---|---|
RabbitMQ | 稳定 | 是 | 是 |
Redis | 稳定 | 是 | 是 |
Amazon SQS | 稳定 | 否 | 否 |
Zookeeper | 实验 | 否 | 否 |
backend
通常程序发送的消息,发完就完了,可能都不知道对方时候接受了。为此,celery实现了一个backend,用于存储这些消息以及celery执行的一些消息和结果。Backend是在Celery的配置中的一个配置项 CELERY_RESULT_BACKEND ,作用是保存结果和状态,如果你需要跟踪任务的状态,那么需要设置这一项,可以是Database backend,也可以是Cache backend
Worker
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
3 分布式任务队列 异步处理框架
它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。我们需要一个消息队列来下发我们的任务。首先要有一个消息中间件,此处选择rabbitmq (也可选择 redis 或 Amazon Simple Queue Service(SQS)消息队列服务)。推荐 选择 rabbitmq 。使用RabbitMQ是官方特别推荐的方式,因此我也使用它作为我们的broker。
可以看到,Celery 主要包含以下几个模块:
任务模块 Task
包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。
消息中间件 Broker
Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。
任务执行单元 Worker
Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。
任务结果存储 Backend
Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, redis 和 MongoDB 等。
最新文章
- N皇后问题—初级回溯
- oracle当前的连接数
- 如何让VS2013编写的程序
- MVC控制器取参数值
- lua的栈
- Robotium 测试方法
- CocoaPods一个Objective-C第三方库的管理利器
- 使用Mybatis Generator 生产 AS400中的数据表对象
- Swift 学习笔记1
- VS2005 检测内存泄漏的方法(转载)
- JavaScript学习总结【10】、DOM 事件
- 知识库总结mysql常用cmd命令
- application/json IE 兼容问题
- Ajax动态刷新验证码图片
- PHP运行出现Notice : Use of undefined constant
- HPU--1141 蜗牛爬树
- markdown 字体颜色
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
- 2019.03.09 codeforces620E. New Year Tree(线段树+状态压缩)
- Hibernatede 一对多映射配置
热门文章
- 凭这份pdf让我轻松拿下了蚂蚁金服、字节跳动、小米等大厂的offer
- Java——八种基本数据类型(常用类)
- cb41a_c++_STL_算法_填充新值fill_generate
- 为什么启动线程是start方法?
- 天津开发票/v电13543443967
- 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
- Maven搭建Spring MVC
- 前端基础:HTTP 协议详解
- Java synthetic
- I/O模式及select、 poll、 epoll