celery的理解 - 邱乘屹的个人技术博客

celery是什么?

​ Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度

celery的使用场景?

  1. 有延时需要网络IO的,并且不关心返回结果的数据。例如:你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情
  2. 定时任务(django-crontable)

celery的组成以及原理?

​ 主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)

​ 我们只需要将请求所要处理的任务丢入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务

celery的使用?

  1. 确定broker(消息队列)
  2. 使用django-celery并配置
  3. delay异步调用

使用rabbitmq和redis作为broker的优劣势分别是什么?

  • 可靠消费
    Redis:没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理(list)
    RabbitMQ:具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费

  • 可靠发布
    Reids:不提供,需自行实现
    RabbitMQ:具有发布确认功能,保证消息被发布到服务器

  • 高可用
    Redis:采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案
    RabbitMQ:集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作

  • 持久化
    Redis:将整个Redis实例持久化到磁盘
    RabbitMQ:队列,消息,都可以选择是否持久化

  • 消费者负载均衡
    Redis:不提供,需自行实现
    RabbitMQ:根据消费者情况,进行消息的均衡分发

  • 队列监控
    Redis:不提供,需自行实现
    RabbitMQ:后台可以监控某个队列的所有信息,(内存,磁盘,消费者,生产者,速率等)

  • 流量控制
    Redis:不提供,需自行实现
    RabbitMQ:服务器过载的情况,对生产者速率会进行限制,保证服务可靠性

  • 出入队性能
    对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。
    测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。

rabbitMQ:大而全,更安全,数据处理更快速

redis:使用更方便,开发更快速。

猜你喜欢

转载自blog.csdn.net/weixin_47074764/article/details/106485221
今日推荐