分布式異步擺攤攻略 [Celery]

張大胖有個(gè)同學(xué)叫小A,畢業(yè)后在學(xué)校門口支了個(gè)炒飯攤頭趋翻,為學(xué)弟學(xué)妹們提供美食成了他的事業(yè)芹壕。

小A的炒飯手藝可是一絕窟绷,不僅色香味俱全锯玛,更憑一道拿手的 “香芹炒飯” 成為了黑暗料理界的一哥,每到深夜兼蜈,攤前總圍著抵制不住美食誘惑前來買夜宵的學(xué)生們攘残,小生意也算是紅火。

可是好景不長为狸,學(xué)弟學(xué)妹們一屆比一屆懶肯腕,大家伙不愿意大冬天的跑這么遠(yuǎn),寧愿多加兩塊錢外送費(fèi)在宿舍點(diǎn)起了外賣钥平。這可把小A愁壞了,他就一個(gè)人姊途,只好接完一單立馬炒出一份涉瘾,然后馬不停蹄的送到宿舍去,回來繼續(xù)接單炒下一份捷兰。

“這效率也太低了立叛,一個(gè)晚上只能賣出不到 10 份,這還不夠攤位成本的呢贡茅。我的事業(yè)可算是走到盡頭了秘蛇,哎!” 小A找張大胖傾訴著自己的苦惱顶考。

張大胖無奈的說:“哥們赁还,你就一個(gè)人,能做成這樣已經(jīng)很不容易啦【匝兀現(xiàn)在已經(jīng)不是單打獨(dú)斗的年代了艘策,你真想把這炒飯事業(yè)做下去,得組建團(tuán)隊(duì)一起干才行渊季∨竽瑁”


分工,異步處理

小A覺得張大胖說的不無道理却汉,于是請(qǐng)來了三個(gè)好朋友驯妄,這三人分別是 Redis、大w 和 小w合砂,幾人分工如下:

  • 小A只負(fù)責(zé)接單和炒飯青扔,打包好貼上紙條寫明訂單號(hào)以及派送地址,交給 Redis。
  • Redis 負(fù)責(zé)看管好所有 “待派送” (也稱作 inqueue 狀態(tài)) 的包裹赎懦。
  • 大w和小w是倆兄弟雀鹃,他們的工作內(nèi)容是相同的。從 Redis 那里領(lǐng)取待派送的包裹励两,送到客戶手上黎茎,然后回來繼續(xù)領(lǐng)取包裹,如果包裹全都派送完了当悔,就在 Redis 身邊等著直到有新的待派送的包裹出現(xiàn)傅瞻。他倆有個(gè)共同的昵稱叫 worker。

任務(wù)分配好盲憎,大家伙熱火朝天的干了起來嗅骄,小A還給他們團(tuán)隊(duì)起了個(gè)名字叫 Celery。果然團(tuán)結(jié)就是力量饼疙,大家分工得當(dāng)配合默契溺森,生意又重新紅紅火火起來了。


反饋窑眯,處理異常

可惜好景不長屏积,新的問題出現(xiàn)了,由于小w是個(gè)冒失鬼磅甩,經(jīng)常配送途中把包裹弄丟丟了炊林,這樣經(jīng)常有客戶等了一個(gè)晚上都沒等到他的夜宵,小A收到的投訴越來越多卷要,得想個(gè)辦法解決才行渣聚。

于是小A決定改進(jìn)一下工作流程:讓 Redis 每次交給 worker 一個(gè)包裹后,同時(shí)拿出小本本僧叉,在 “派送中” (也可被稱作 unacked 狀態(tài)) 這一頁填寫上該包裹的訂單號(hào)奕枝。每當(dāng) worker 完成一單派送后,將訂單號(hào)反饋告知 Redis(這個(gè)動(dòng)作被稱作 ack)彪标,Redis 就從小本本上將這條派送中的記錄刪去倍权。

這樣,只要發(fā)現(xiàn)有某個(gè)訂單號(hào)一直處于 “派送中” 狀態(tài)捞烟,并且 worker 都沒在派送它薄声,可以斷定這個(gè)包裹丟了。小A就立馬做一份一樣的交給 Redis题画,等待重新派送默辨。如此一來客戶需要多等待一會(huì)兒,但今晚是一定能吃到香美的炒飯的苍息!

小A很滿意自己的設(shè)計(jì)缩幸,第二天就讓 Redis 和 worker 小組按照他的方案做起來壹置。效果確實(shí)很不錯(cuò),再也沒有收到客戶的投訴了表谊。


定時(shí)任務(wù)

愛吃小A炒飯的回頭客越來越多钞护,其中有不少人向小A提出 “預(yù)約送餐服務(wù)” 的需求,比如提前在8點(diǎn)下好單爆办,預(yù)約到9點(diǎn)再派送上門难咕。

這可難不倒小A,只要在訂單信息中加一欄 “派送時(shí)間” 一同放入交給了Redis 的包裹中就行了距辆,worker 從 Redis 處領(lǐng)取到待派送的包裹后先查看派送時(shí)間余佃,如果是 “立即派送” 就立馬將這個(gè)包裹送出;如果還沒到派送時(shí)間的話跨算,就先不送出爆土,等到了預(yù)定的時(shí)間再進(jìn)行派送。

預(yù)約送餐的新服務(wù)正式施行诸蚕,獲得學(xué)弟學(xué)妹的一致好評(píng)步势。


perStop,優(yōu)雅的結(jié)束 worker

好日子沒過多久背犯,小w又鬧出幺蛾子了立润,他新交了個(gè)女朋友,經(jīng)常外賣送到一半就溜號(hào)去約會(huì)了媳板,手頭上的包裹也順手給扔了,這可耽誤整個(gè)團(tuán)隊(duì)的工作泉哈。

小A召集大家伙開會(huì)蛉幸,讓大家伙獻(xiàn)計(jì)獻(xiàn)策解決這個(gè)問題,Redis 拍桌子道:“小w丛晦,你這家伙也太普靠譜啦奕纫,我建議你還是回家洗洗睡吧,咱再找其他人來接替你烫沙!”

大w為弟弟辯解:“我這弟弟雖然有點(diǎn)冒失和不懂事匹层,但畢竟是自己人啊,如果再換個(gè)人锌蓄,就一定能比小w干的好升筏?”

小w扭捏的說道:“對(duì)不起,是我的錯(cuò)瘸爽,給大家添麻煩了您访。我提個(gè)方案,你們看行不行剪决,我們 worker 在領(lǐng)取到包裹后在 Redis 那里都會(huì)有 unacked 記錄嘛灵汪,如果在派送過程中臨時(shí)有事要離開檀训,就將 unacked 的包裹全還給 Redis,Redis 將這些包裹重新放回待派送區(qū)域享言,同時(shí)將這些 unacked 記錄刪除峻凫。”

Redis 可不開心了:“這不是增加我的工作量嘛览露,你們的錯(cuò)荧琼,要我來背鍋,也太欺負(fù)人啦肛循!”

小A站出來調(diào)停:“我覺得小w說的方案可行铭腕,就按這么做吧。Redis 你能者多勞多糠,辛苦一些累舷,回頭給你加工資〖锌祝”

就這樣解決了眼下所有的問題被盈,小A的炒飯事業(yè)終于正式揚(yáng)帆起航了。


后記

直到有一天搭伤,有個(gè)名叫 RabbitMQ 的外賣小哥前來拜訪只怎,問了 Redis 一個(gè)問題:“你考慮過萬一 worker 派送途中遇到急事離開,沒告知你怜俐,也沒把包裹還給你身堡。那時(shí)你該咋辦嗎?” Redis 面露難色不足如何作答拍鲤。
RabbitMQ 笑而不語贴谎,留下一張名片給小A后,頭也不回的走了...

PS:
1季稳、小A的名字是致敬 celery 的作者 Ask Solem Hoel
2擅这、參考了我曾經(jīng)寫的一篇簡書文章: http://www.reibang.com/p/52552c075bc0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市景鼠,隨后出現(xiàn)的幾起案子仲翎,更是在濱河造成了極大的恐慌,老刑警劉巖铛漓,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溯香,死亡現(xiàn)場離奇詭異,居然都是意外死亡浓恶,警方通過查閱死者的電腦和手機(jī)逐哈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來问顷,“玉大人昂秃,你說我怎么就攤上這事禀梳。” “怎么了肠骆?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵算途,是天一觀的道長。 經(jīng)常有香客問我蚀腿,道長嘴瓤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任莉钙,我火速辦了婚禮廓脆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘磁玉。我一直安慰自己停忿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布蚊伞。 她就那樣靜靜地躺著席赂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪时迫。 梳的紋絲不亂的頭發(fā)上颅停,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音掠拳,去河邊找鬼癞揉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溺欧,可吹牛的內(nèi)容都是我干的烧董。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胧奔,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了预吆?” 一聲冷哼從身側(cè)響起龙填,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拐叉,沒想到半個(gè)月后岩遗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凤瘦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年宿礁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬芥。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梆靖,死狀恐怖控汉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情返吻,我是刑警寧澤姑子,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站测僵,受9級(jí)特大地震影響街佑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捍靠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一沐旨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榨婆,春花似錦磁携、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拖吼,卻和暖如春鳞上,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吊档。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工篙议, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怠硼。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓鬼贱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親香璃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子这难,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • redis集群分為服務(wù)端集群和客戶端分片,redis3.0以上版本實(shí)現(xiàn)了集群機(jī)制葡秒,即服務(wù)端集群姻乓,3.0以下使用客戶...
    hadoop_null閱讀 1,596評(píng)論 0 6
  • 1.定義: Celery是一個(gè)異步的任務(wù)隊(duì)列(也叫做分布式任務(wù)隊(duì)列) 2.工作結(jié)構(gòu) Celery分為3個(gè)部...
    四號(hào)公園_2016閱讀 28,747評(píng)論 5 60
  • 創(chuàng)建產(chǎn)品目錄模型(models) image = models.ImageField(upload_to='pro...
    lijun_m閱讀 914評(píng)論 0 0
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 9,012評(píng)論 0 13
  • 去年十一結(jié)婚,立馬從安徽菇?jīng)鲎兂闪松轿飨眿D兒眯牧。南方的春節(jié)比較嘈雜蹋岩,而山西的春節(jié)比較安靜,正好安靜之余学少,隨手用手機(jī)拍...
    S超然物外閱讀 436評(píng)論 2 1