对于Celery原理的简单理解
参考博客:
https://www.cnblogs.com/forward-wang/p/5970806.html
https://blog.csdn.net/cuomer/article/details/81214438
https://blog.csdn.net/showgea/article/details/109362025
提出需求
在注册网站账号时,我们可能会发送一个包含验证码的短信到手机,但是从发送到接收需要一定的时间,这段时间我们不希望让用户干等,我们希望网页还可以正常使用,所以就要引入一种多任务机制以避免产生阻塞。
没有后台处理(多任务)时:
有后台处理(多任务)时:
这种需要等待的任务一般使用异步处理执行,类似的还有上传、加载图像等。Celery就是一个解决方案
Celery
Celery(芹菜)是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。
任务队列是一种跨线程、跨机器工作的一种机制,Celery则是一种分布式任务队列,这使得其允许多个任务同时存在。
概念补充
broker?
broker是一个消息传输的中间件,每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery的worker将会取到消息,进行对于的程序执行。
一个celery系统可以包含很多的worker和broker
Broker有几个方案可供选择:RabbitMQ (消息队列),Redis(缓存数据库)
backend?
celery实现了一个backend,用于存储程序发送的消息以及celery执行的一些消息和结果。
对于 backend,使用数据库即可,也可用 Redis
Celery整体框架
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成
消息中间件
首先,Celery本身没有提供消息服务的组件,我们需要使用第三方组件,如官方推荐的RabbitMQ或者Redis
任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。如注册账号时,发送短信就是一个work
任务执行结果存储
Task result store用来存储Worker执行的任务的结果