Celery分佈式任務隊列框架 - 邱乘屹的個人技術博客

celery基本介紹

celery是一個基於python開發的分佈式任務隊列框架,支持使用任務隊列的方式在分佈的機器/進程/線程上執行任務調度

celery的使用場景

  1. 有延時需要網絡IO的,並且不關心返回結果的數據。例如:你想對100臺機器執行一條批量命令,可能會花很長時間 ,但你不想讓你的程序等着結果返回,而是給你返回 一個任務ID,你過一段時間只需要拿着這個任務id就可以拿到任務執行結果, 在任務執行ing進行時,你可以繼續做其它的事情
  2. 定時任務

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:使用更方便,開發更快速。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章