使用beanstalk搭建隊(duì)列服務(wù)

一. 應(yīng)用場(chǎng)景

  1. 在web后端服務(wù)的交互中很多場(chǎng)景上游和下游處理的時(shí)間不匹配却嗡,比如上游處理的快在验,下游處理的慢。這時(shí)候就需要隊(duì)列服務(wù)來(lái)緩沖服務(wù)以達(dá)到更高的吞吐率(扛過(guò)高峰)
  2. 延遲處理請(qǐng)求,比如:延遲添加用戶獎(jiǎng)勵(lì)者春,延遲寫(xiě)入mysql等等。邏輯可以只關(guān)注主流程即返回清女。

二. 我們現(xiàn)在的解決方案-beanstalk隊(duì)列服務(wù)

  • 項(xiàng)目介紹
    http://kr.github.io/beanstalkd/

  • 協(xié)議介紹
    https://raw.githubusercontent.com/kr/beanstalkd/master/doc/protocol.txt

  • Beanstalkd設(shè)計(jì)里面的核心概念:

  • job:
    一個(gè)需要異步處理的任務(wù)钱烟,是Beanstalkd中的基本單元,需要放在一個(gè)tube中。

  • tube:
    一個(gè)有名的任務(wù)隊(duì)列拴袭,用來(lái)存儲(chǔ)統(tǒng)一類型的job读第,是producer和consumer操作的對(duì)象。

  • producer:
    Job的生產(chǎn)者拥刻,通過(guò)put命令來(lái)將一個(gè)job放到一個(gè)tube中怜瞒。

  • consumer:
    Job的消費(fèi)者,通過(guò)reserve/release/bury/delete命令來(lái)獲取job或改變job的狀態(tài)般哼。

  • job生命周期:


    job狀態(tài)轉(zhuǎn)移圖
  • 一個(gè)典型的使用流程:** 延遲發(fā)放用戶獎(jiǎng)勵(lì) **
    1)上游put job 并帶有delay設(shè)置(delay n秒后在進(jìn)入ready隊(duì)列)
    2)job進(jìn)入ready狀態(tài)吴汪,下游使用reserve接口取得job內(nèi)容,并使job進(jìn)入reserved狀態(tài)蒸眠。
    3)如果job在RRT時(shí)間內(nèi)處理完成漾橙,則下游直接調(diào)用delete,刪除該job黔宛,表示處理正常完成近刘。如果job在RRT時(shí)間沒(méi)有處理完成,該job會(huì)自動(dòng)變?yōu)閞eady狀態(tài),以供其他的下游worker使用臀晃。
    4)注意:3)中會(huì)有可能1個(gè)job被多個(gè)work處理多次的問(wèn)題觉渴,如果要嚴(yán)格限制job被執(zhí)行一次或者失敗,則可以在2)步驟后由下游直接調(diào)用bury接口將job置為buried狀態(tài)徽惋,這樣其只會(huì)被一個(gè)下游獲取并執(zhí)行案淋。

  • 集群化方案
    開(kāi)源的beanstalk是單機(jī)版本的隊(duì)列,集群化需要自己維護(hù)险绘。
    上游寫(xiě)入客戶端需要做負(fù)載均衡和分組的工作(一致性hash)踢京。
    下游讀取客戶端需要線性掃描讀取每個(gè)隊(duì)列并讀取。這里面有個(gè)問(wèn)題就是:原來(lái)beanstalk設(shè)置的讀取超時(shí)時(shí)間宦棺,會(huì)在現(xiàn)有的策略中放大N倍瓣距。

監(jiān)控和輔助工具

  • 重點(diǎn)關(guān)注如下數(shù)據(jù)項(xiàng)

總體的
bmq.cmd-release
the cumulative number of release commands

bmq.current-connections
the number of currently open connections

bmq.job-timeouts
the cumulative count of times a job has timed out

bmq.total-jobs
the cumulative count of jobs created in this tube in the current beanstalkd process

tube的
bmq.current-jobs-delayed
the number of delayed jobs in this tube

bmq.current-jobs-ready
the number of jobs in the ready queue in this tube

bmq.current-jobs-reserved
the number of jobs reserved by all clients in this tube

bmq.current-jobs-urgent
the number of ready jobs with priority < 1024 in this tube

管理界面

系統(tǒng)性能數(shù)據(jù)

系統(tǒng)穩(wěn)定性

  • 當(dāng)開(kāi)啟-b啟動(dòng)持久化后,其會(huì)將binlog每隔N秒(N可配置為0)刷入到硬盤(pán)代咸,類似redis的aof持久化方式

系統(tǒng)容量

  • 依賴內(nèi)存大小(持久化只是把binlog刷到硬盤(pán))

系統(tǒng)性能

  • 可以保守認(rèn)為job 的body size小于1k時(shí)蹈丸,qps可以到put 10k,reserve+delete 9k
  • 單 server 最大 put 速度
    client 開(kāi) 50 進(jìn)程呐芥,每進(jìn)程寫(xiě)入 10k 條 “00”逻杖,用時(shí) 36s,平均 13800/s
  • 單 server 最大 reserve + delete 速度
    client 開(kāi) 50 進(jìn)程思瘟,每進(jìn)程 10k 條荸百,用時(shí) 52s,平均 9600/s
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滨攻,一起剝皮案震驚了整個(gè)濱河市够话,隨后出現(xiàn)的幾起案子蓝翰,更是在濱河造成了極大的恐慌,老刑警劉巖女嘲,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霎箍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡澡为,警方通過(guò)查閱死者的電腦和手機(jī)漂坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)媒至,“玉大人顶别,你說(shuō)我怎么就攤上這事【軉” “怎么了驯绎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谋旦。 經(jīng)常有香客問(wèn)我剩失,道長(zhǎng),這世上最難降的妖魔是什么册着? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任拴孤,我火速辦了婚禮,結(jié)果婚禮上甲捏,老公的妹妹穿的比我還像新娘演熟。我一直安慰自己,他們只是感情好司顿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布芒粹。 她就那樣靜靜地躺著,像睡著了一般大溜。 火紅的嫁衣襯著肌膚如雪化漆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天钦奋,我揣著相機(jī)與錄音座云,去河邊找鬼。 笑死锨苏,一個(gè)胖子當(dāng)著我的面吹牛疙教,可吹牛的內(nèi)容都是我干的棺聊。 我是一名探鬼主播伞租,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼限佩!你這毒婦竟也來(lái)了葵诈?” 一聲冷哼從身側(cè)響起裸弦,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎作喘,沒(méi)想到半個(gè)月后理疙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泞坦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年窖贤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贰锁。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赃梧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豌熄,到底是詐尸還是另有隱情授嘀,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布锣险,位于F島的核電站蹄皱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芯肤。R本人自食惡果不足惜巷折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崖咨。 院中可真熱鬧盔几,春花似錦、人聲如沸掩幢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)际邻。三九已至芯丧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間世曾,已是汗流浹背缨恒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轮听,地道東北人骗露。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像血巍,于是被迫代替她去往敵國(guó)和親萧锉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • 總括 beanstalkd協(xié)議基于ASCII編碼運(yùn)行在tcp上述寡∈料叮客戶端連接服務(wù)器并發(fā)送指令和數(shù)據(jù)叶洞,然后等待響應(yīng)并關(guān)...
    零一間閱讀 1,213評(píng)論 0 1
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,509評(píng)論 0 23
  • 題目描述輸入一個(gè)正整數(shù)數(shù)組,把數(shù)組里所有數(shù)字拼接起來(lái)排成一個(gè)數(shù)禀崖,打印能拼接出的所有數(shù)字中最小的一個(gè)衩辟。例如輸入數(shù)組{...
    NoFacePeace閱讀 208評(píng)論 0 0
  • 【經(jīng)文】神啊,求你為我造清潔的心波附,使我里面重新有正直(“正直”或作“堅(jiān)定”)的靈艺晴。——詩(shī)篇51:10 溫良的舌掸屡,是...
    斐斐feifei閱讀 1,836評(píng)論 0 1
  • 一财饥、概述 Spring MVC中的Front controller、Page controller Spring ...
    遠(yuǎn)o_O閱讀 323評(píng)論 0 1