celery分布式設(shè)計(jì)

Celery的架構(gòu)

  • Celery包含如下組件:
  1. Celery Beat:任務(wù)調(diào)度器,Beat進(jìn)程會(huì)讀取配置文件的內(nèi)容募寨,周期性地將配置中到期需要執(zhí)行的任務(wù)發(fā)送給任務(wù)隊(duì)列(一般用于定時(shí)任務(wù)使用)智绸。
  2. Celery Worker:執(zhí)行任務(wù)的消費(fèi)者澈蝙,通常會(huì)在多臺(tái)服務(wù)器運(yùn)行多個(gè)消費(fèi)者來(lái)提高執(zhí)行效率。
  3. Broker:消息代理寄疏,或者叫作消息中間件是牢,接受任務(wù)生產(chǎn)者發(fā)送過(guò)來(lái)的任務(wù)消息,存進(jìn)隊(duì)列再按序分發(fā)給任務(wù)消費(fèi)方(本方案使用redis)陕截。
  4. Producer:調(diào)用了Celery提供的API驳棱、函數(shù)或者裝飾器而產(chǎn)生任務(wù)并交給任務(wù)隊(duì)列處理的都是任務(wù)生產(chǎn)者。
  5. Result Backend:任務(wù)處理完后保存狀態(tài)信息和結(jié)果农曲,以供查詢社搅。(本方案使用redis來(lái)存儲(chǔ)結(jié)果)

Celery的架構(gòu)圖如圖所示驻债。

celery架構(gòu)圖

根據(jù)celery架構(gòu)圖將分布式設(shè)計(jì)方案如下。

  1. 任務(wù)發(fā)布者:產(chǎn)品在后臺(tái)添加股票完成之后形葬,點(diǎn)擊回測(cè)合呐,然后分發(fā)任務(wù)都不同的機(jī)器。
  2. 任務(wù)調(diào)度:按照設(shè)定的時(shí)間調(diào)用delay方法笙以。
  3. 消息代理:使用redis來(lái)存儲(chǔ)股票代碼淌实。每次執(zhí)行的股票代碼都是從redis讀取。
  4. 任務(wù)消費(fèi)者:在不同的機(jī)器上開(kāi)啟worker猖腕,執(zhí)行調(diào)度的股票進(jìn)行回測(cè)拆祈。
  5. 回測(cè)結(jié)果:存放在redis中,然后讀取出渲染在后臺(tái)上展示出來(lái)倘感。

需要用到

from kombu import Queue
from flask import Flask

部分代碼如下:

CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_QUEUES = (  # 定義任務(wù)隊(duì)列
    Queue("default", routing_key="distributed.#"),
    Queue("tasks_A", routing_key="A.#"),
    Queue("tasks_B", routing_key="B.#"), 
)

CELERY_ROUTES = (
    [
        ("web_management.web.trade.distributed.add", {"queue": "default"}),  
        ("web_management.web.trade.distributed.taskA", {"queue": "tasks_A"}), 
        ("web_management.web.trade.distributed.taskB", {"queue": "tasks_B"}), 
    ],
)

CELERY_RESULT_SERIALIZER = "json"  

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 
app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'redis://' + ppt.redis_ip + ':' + ppt.redis_port + '/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://' + ppt.redis_ip + ':' + ppt.redis_port + '/1'
app.config['CELERY_QUEUES'] = CELERY_QUEUES
app.config['CELERY_TIMEZONE'] = CELERY_TIMEZONE
app.config['CELERY_ROUTES'] = CELERY_ROUTES
app.config['CELERY_RESULT_SERIALIZER'] = CELERY_RESULT_SERIALIZER
app.config['CELERY_TASK_RESULT_EXPIRES'] = CELERY_TASK_RESULT_EXPIRES
celery = Celery('distributed', backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

開(kāi)啟work的方式

celery worker -A web_management.web.trade.distributed.celery -Q tasks_A --concurrency=30 -l info -Q后面為方法對(duì)應(yīng)的隊(duì)列名稱 --concurrency= 后面 為開(kāi)啟的worker數(shù)目放坏,也可以使用 -c= 具體開(kāi)啟是數(shù)目根據(jù)你的電腦CPU個(gè)數(shù)確定,小于等于cpu個(gè)數(shù)即可

備注

  • celery 使用4.1.1版本
  • kombu 使用4.2.0版本
    *先安裝kombu,然后安裝celery
  • 可以解決如圖問(wèn)題
  • 版本選擇
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侠仇,一起剝皮案震驚了整個(gè)濱河市轻姿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逻炊,老刑警劉巖互亮,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異余素,居然都是意外死亡豹休,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)桨吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)威根,“玉大人,你說(shuō)我怎么就攤上這事视乐÷宀螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵佑淀,是天一觀的道長(zhǎng)留美。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伸刃,這世上最難降的妖魔是什么谎砾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮捧颅,結(jié)果婚禮上景图,老公的妹妹穿的比我還像新娘。我一直安慰自己碉哑,他們只是感情好挚币,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布亮蒋。 她就那樣靜靜地躺著,像睡著了一般忘晤。 火紅的嫁衣襯著肌膚如雪宛蚓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天设塔,我揣著相機(jī)與錄音凄吏,去河邊找鬼。 笑死闰蛔,一個(gè)胖子當(dāng)著我的面吹牛痕钢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播序六,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼任连,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了例诀?” 一聲冷哼從身側(cè)響起随抠,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎繁涂,沒(méi)想到半個(gè)月后拱她,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扔罪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年秉沼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矿酵。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唬复,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出全肮,到底是詐尸還是另有隱情敞咧,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布辜腺,位于F島的核電站妄均,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哪自。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一禁熏、第九天 我趴在偏房一處隱蔽的房頂上張望壤巷。 院中可真熱鬧,春花似錦瞧毙、人聲如沸胧华。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叔营。三九已至爸吮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悲没,已是汗流浹背篮迎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留示姿,地道東北人甜橱。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栈戳,于是被迫代替她去往敵國(guó)和親岂傲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容