资讯专栏INFORMATION COLUMN

分布式任务框架之celery

fredshare / 776人阅读

摘要:架构消息代理,作为临时储存任务的中间媒介,为提供了队列服务。生产者将任务发送到,消费者再从获取任务。如果使用,则有可能发生突然断电之类的问题造成突然终止后的数据丢失等后果。任务调度器,负责调度并触发定时周期任务。

架构

Broker

消息代理,作为临时储存任务的中间媒介,为 Celery 提供了队列服务。生产者将任务发送到 Broker,消费者再从 Broker 获取任务。

Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等 作为消息代理,但适用于生产环境的只有RabbitMQ和Redis,至于其他的方式,一是支持有限, 二是可能得不到更好的技术支持。
Celery官方推荐的是RabbitMQ,Celery的作者Ask Solem Hoel最初在VMware就是为RabbitMQ工作的,Celer最初的设计就是基于RabbitMQ,所以使用 RabbitMQ会非常稳定,成功案例很多。如果使用Redis,则有可能发生突然断电之类的问题 造成Redis突然终止后的数据丢失等后果。

Beat

任务调度器,负责调度并触发 Celery 定时周期任务。Beat 进程读取 CeleryConfig 中自定义的定时周期任务列表,将到期需要执行的定时任务发送到任务队列中。

Worker

任务执行单元,实际负责执行任务的服务进程,每一个 Worker 都有一个并发池(Prefork/Eventlet/Gevent/Thread)来支持多并发。Worker 会监听订阅的任务队列,当队列中有任务时,就会获取任务并执行。

Result Backend/Store

任务执行状态和结果存储,Celery 支持任务实时处理,也就是说 Celery 可以把任务执行的实时状态和最终结果回传生产者。这种回传也需要通过中间存储媒介。

web监控管理 添加管理任务

任务的监控

celery的魅力

高可用

对于celery worker来说,其实部署在多个节点上,就是高可用的。

对于borker来说,我们使用了rabbitmq集群来保证高可用(我们线上同时也有其他celery服务使用了AWS的SQS作为borker,其本身就是保证高可用的)。

对于celerybeat(就是启动定时任务的程序)来说,只能使用单节点启动,很难保证高可用,但是我们这边线上,并没有使用celerybeat来启动celery定时任务,而是使用了第三方服务(AWS lambda)来发送定时任务到celery borker中(相当于实现了celerybeat功能),这样就用第三方的这个服务保证高可用。
其实除了使用AWS lambda的这种方案,我们还使用了在docker集群中部署celerybeat的方案,这种其实也是能保证celerybeat的高可用的

参考文献:

Celery+RabbitMQ的多机器worker节点介绍

celery有什么难理解的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42927.html

相关文章

  • Python爬虫使用celery加速爬虫

    摘要:是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。本文将介绍如何使用来加速爬虫。本文爬虫的例子来自文章爬虫的种姿势。虽然没有这个爬虫框架和异步框架来的快,但这也可以作为一种爬虫的思路。   celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。关于celery的更多介绍及例子,笔者可以参考文章Python之celery的简...

    baihe 评论0 收藏0
  • 基于Celery布式爬虫管理平台: Crawlab

    摘要:基于的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架。后台程序会自动发现这些爬虫项目并储存到数据库中。每一个节点需要启动应用来支持爬虫部署。任务将以环境变量的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。 Crawlab 基于Celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架。 Github: https://github.com/tikazyq/...

    legendaryedu 评论0 收藏0
  • Pythoncelery的简介与使用

    摘要:的简介是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。目前支持等作为消息代理,但适用于生产环境的只有和官方推荐。任务处理完后保存状态信息和结果,以供查询。 celery的简介   celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能被...

    LeexMuller 评论0 收藏0
  • tornado配合celery及rabbitmq实现web request异步非阻塞

    摘要:主要是为了实现系统之间的双向解耦而实现的。问题及优化队列过长问题使用上述方案的异步非阻塞可能会依赖于的任务队列长度,若队列中的任务过多,则可能导致长时间等待,降低效率。 Tornado和Celery介绍 1.Tornado Tornado是一个用python编写的一个强大的、可扩展的异步HTTP服务器,同时也是一个web开发框架。tornado是一个非阻塞式web服务器,其速度相当快。...

    番茄西红柿 评论0 收藏0
  • 布式队列神器 Celery

    摘要:是什么是一个由编写的简单灵活可靠的用来处理大量信息的分布式系统它同时提供操作和维护分布式系统所需的工具。专注于实时任务处理,支持任务调度。说白了,它是一个分布式队列的管理工具,我们可以用提供的接口快速实现并管理一个分布式的任务队列。 Celery 是什么? Celery 是一个由 Python 编写的简单、灵活、可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工...

    赵春朋 评论0 收藏0

发表评论

0条评论

fredshare

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<