消息代理,做爲臨時儲存任務的中間媒介,爲 Celery 提供了隊列服務。生產者將任務發送到 Broker,消費者再從 Broker 獲取任務。git
Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等 做爲消息代理,但適用於生產環境的只有RabbitMQ和Redis,至於其餘的方式,一是支持有限, 二是可能得不到更好的技術支持。
Celery官方推薦的是RabbitMQ,Celery的做者Ask Solem Hoel最初在VMware就是爲RabbitMQ工做的,Celer最初的設計就是基於RabbitMQ,因此使用 RabbitMQ會很是穩定,成功案例不少。若是使用Redis,則有可能發生忽然斷電之類的問題 形成Redis忽然終止後的數據丟失等後果。
任務調度器,負責調度並觸發 Celery 定時週期任務。Beat 進程讀取 CeleryConfig 中自定義的定時週期任務列表,將到期須要執行的定時任務發送到任務隊列中。github
任務執行單元,實際負責執行任務的服務進程,每個 Worker 都有一個併發池(Prefork/Eventlet/Gevent/Thread)來支持多併發。Worker 會監聽訂閱的任務隊列,當隊列中有任務時,就會獲取任務並執行。web
任務執行狀態和結果存儲,Celery 支持任務實時處理,也就是說 Celery 能夠把任務執行的實時狀態和最終結果回傳生產者。這種回傳也須要經過中間存儲媒介。docker