消息隊(duì)列

Title: 消息隊(duì)列
Date: 2018-08-09 10:02:40
Category: 數(shù)據(jù)
keywords: kafka,消息隊(duì)列

在高并發(fā)系統(tǒng)或處理耗時任務(wù)時变隔,消息隊(duì)列便會被聯(lián)想到匣缘,現(xiàn)在介紹下消息隊(duì)列應(yīng)用場景和kafka和rabbitmq的對比

消息隊(duì)列

消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件孵户,主要解決應(yīng)用解耦,異步消息检柬,流量削鋒等問題竖配,實(shí)現(xiàn)高性能进胯,高可用胁镐,可伸縮和最終一致性架構(gòu)。目前使用較多的消息隊(duì)列有ActiveMQ颇玷,RabbitMQ帖渠,ZeroMQ竭宰,Kafka,MetaMQ狞甚,RocketMQ

異步處理

場景說明:用戶注冊后入愧,需要發(fā)注冊郵件和注冊短信棺蛛。傳統(tǒng)的做法有兩種

  • 串行的方式
  • 并行方式

a巩步、串行方式:將注冊信息寫入數(shù)據(jù)庫成功后椅野,發(fā)送注冊郵件籍胯,再發(fā)送注冊短信杖狼。以上三個任務(wù)全部完成后蝶涩,返回給客戶端絮识。

2018-08-09-10-24-55

b次舌、并行方式:將注冊信息寫入數(shù)據(jù)庫成功后,發(fā)送注冊郵件的同時挪圾,發(fā)送注冊短信逐沙。以上三個任務(wù)完成后酱吝,返回給客戶端务热。與串行的差別是崎岂,并行的方式可以提高處理的時間

2018-08-09-10-25-07

假設(shè)三個業(yè)務(wù)節(jié)點(diǎn)每個使用50毫秒鐘冲甘,不考慮網(wǎng)絡(luò)等其他開銷江醇,則串行方式的時間是150毫秒陶夜,并行的時間可能是100毫秒裆站。
因?yàn)镃PU在單位時間內(nèi)處理的請求數(shù)是一定的条辟,假設(shè)CPU1秒內(nèi)吞吐量是100次黔夭。則串行方式1秒內(nèi)CPU可處理的請求量是7次(1000/150)。并行方式處理的請求量是10次(1000/100)

小結(jié):如以上案例描述羽嫡,傳統(tǒng)的方式系統(tǒng)的性能(并發(fā)量本姥,吞吐量,響應(yīng)時間)會有瓶頸杭棵。如何解決這個問題呢婚惫?

引入消息隊(duì)列,將不是必須的業(yè)務(wù)邏輯颜屠,異步處理辰妙。改造后的架構(gòu)如下:

按照以上約定,用戶的響應(yīng)時間相當(dāng)于是注冊信息寫入數(shù)據(jù)庫的時間甫窟,也就是50毫秒。注冊郵件,發(fā)送短信寫入消息隊(duì)列后懒构,直接返回,因此寫入消息隊(duì)列的速度很快,基本可以忽略蚁阳,因此用戶的響應(yīng)時間可能是50毫秒。因此架構(gòu)改變后,系統(tǒng)的吞吐量提高到每秒20 QPS届榄。比串行提高了3倍靖苇,比并行提高了兩倍。

應(yīng)用解耦

場景說明:用戶下單后,訂單系統(tǒng)需要通知庫存系統(tǒng)。傳統(tǒng)的做法是旨怠,訂單系統(tǒng)調(diào)用庫存系統(tǒng)的接口。如下圖:

2018-08-09-10-33-08

傳統(tǒng)模式的缺點(diǎn):假如庫存系統(tǒng)無法訪問课锌,則訂單減庫存將失敗,從而導(dǎo)致訂單失敗丑掺,訂單系統(tǒng)與庫存系統(tǒng)耦合

如何解決以上問題呢兼丰?引入應(yīng)用消息隊(duì)列后的方案黍翎,如下圖:

2018-08-09-10-34-06

訂單系統(tǒng):用戶下單后,訂單系統(tǒng)完成持久化處理,將消息寫入消息隊(duì)列铛嘱,返回用戶訂單下單成功
庫存系統(tǒng):訂閱下單的消息纹磺,采用拉/推的方式,獲取下單信息历极,庫存系統(tǒng)根據(jù)下單信息氏义,進(jìn)行庫存操作
假如:在下單時庫存系統(tǒng)不能正常使用。也不影響正常下單,因?yàn)橄聠魏笱纪埽唵蜗到y(tǒng)寫入消息隊(duì)列就不再關(guān)心其他的后續(xù)操作了睁宰。實(shí)現(xiàn)訂單系統(tǒng)與庫存系統(tǒng)的應(yīng)用解耦

流量削鋒

流量削鋒也是消息隊(duì)列中的常用場景硫兰,一般在秒殺或團(tuán)搶活動中使用廣泛劫映。
應(yīng)用場景:秒殺活動祖今,一般會因?yàn)榱髁窟^大,導(dǎo)致流量暴增,應(yīng)用掛掉。為解決這個問題,一般需要在應(yīng)用前端加入消息隊(duì)列。

a、可以控制活動的人數(shù)

b侣颂、可以緩解短時間內(nèi)高流量壓垮應(yīng)用

2018-08-09-10-37-29

用戶的請求,服務(wù)器接收后,首先寫入消息隊(duì)列婆翔。假如消息隊(duì)列長度超過最大數(shù)量,則直接拋棄用戶請求或跳轉(zhuǎn)到錯誤頁面依溯。
秒殺業(yè)務(wù)根據(jù)消息隊(duì)列中的請求信息拜隧,再做后續(xù)處理

日志處理

日志處理是指將消息隊(duì)列用在日志處理中雀费,比如Kafka的應(yīng)用逛尚,解決大量日志傳輸?shù)膯栴}滤钱。架構(gòu)簡化如下

2018-08-09-10-41-28

日志采集客戶端痊末,負(fù)責(zé)日志數(shù)據(jù)采集,定時寫受寫入Kafka隊(duì)列
Kafka消息隊(duì)列幔嫂,負(fù)責(zé)日志數(shù)據(jù)的接收切心,存儲和轉(zhuǎn)發(fā)
日志處理應(yīng)用:訂閱并消費(fèi)kafka隊(duì)列中的日志數(shù)據(jù)

kafka vs rabbitmq

rabbitmq kafka
消息確認(rèn)機(jī)制 具有生產(chǎn)者confirm機(jī)制以及消費(fèi)者的消息應(yīng)答機(jī)制ack 不具有應(yīng)答機(jī)制
消息的順序 在一個隊(duì)列里面,rabbitmq的消息是嚴(yán)格順序的肤晓,按照先進(jìn)先出盈匾。 在同一個partition中消息是有序的葵孤,但是生產(chǎn)者put到Kafka中數(shù)據(jù)會分布在不同的partition中宰啦,所有總體是無序的
吞吐量 根據(jù)測試茶鉴,RabbitMQ在不使用ACK機(jī)制的惭蹂,Msg大小為1K的情況下,QPS可達(dá)6W+割粮。再雙方ACK機(jī)制盾碗,Msg大小為1K的情況下,QPS瞬間降到了1W+ Kafka具有巨大的吞吐量舀瓢,數(shù)據(jù)的存儲以及獲取是本地磁盤的批量處理置尔,可以達(dá)到百萬/s
可靠性 RabbitMQ使用了MirrorQueue的機(jī)制,也可以做到多個機(jī)器進(jìn)行熱備 Kafka的broker支持主備模式
持久化 支持 支持
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氢伟,一起剝皮案震驚了整個濱河市榜轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朵锣,老刑警劉巖谬盐,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诚些,居然都是意外死亡飞傀,警方通過查閱死者的電腦和手機(jī)皇型,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砸烦,“玉大人弃鸦,你說我怎么就攤上這事〈倍唬” “怎么了唬格?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颜说。 經(jīng)常有香客問我购岗,道長,這世上最難降的妖魔是什么门粪? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任喊积,我火速辦了婚禮,結(jié)果婚禮上玄妈,老公的妹妹穿的比我還像新娘乾吻。我一直安慰自己,他們只是感情好拟蜻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布溶弟。 她就那樣靜靜地躺著,像睡著了一般瞭郑。 火紅的嫁衣襯著肌膚如雪辜御。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天屈张,我揣著相機(jī)與錄音擒权,去河邊找鬼。 笑死阁谆,一個胖子當(dāng)著我的面吹牛碳抄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播场绿,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剖效,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焰盗?” 一聲冷哼從身側(cè)響起璧尸,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熬拒,沒想到半個月后爷光,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎粟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年蛀序,在試婚紗的時候發(fā)現(xiàn)自己被綠了欢瞪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡徐裸,死狀恐怖遣鼓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情重贺,我是刑警寧澤骑祟,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站檬姥,受9級特大地震影響曾我,放射性物質(zhì)發(fā)生泄漏粉怕。R本人自食惡果不足惜健民,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贫贝。 院中可真熱鬧秉犹,春花似錦、人聲如沸稚晚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽客燕。三九已至鸳劳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間也搓,已是汗流浹背赏廓。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傍妒,地道東北人幔摸。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像颤练,于是被迫代替她去往敵國和親既忆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • 以下是消息隊(duì)列以下的大綱嗦玖,本文主要介紹消息隊(duì)列概述患雇,消息隊(duì)列應(yīng)用場景和消息中間件示例(電商,日志系統(tǒng))宇挫。 本次分享...
    文檔隨手記閱讀 1,886評論 0 28
  • 一庆亡、 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合捞稿、異步消息又谋、流量削鋒等問題拼缝。實(shí)現(xiàn)高性能...
    步積閱讀 56,929評論 10 138
  • 1 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合彰亥,異步消息咧七,流量削鋒等問題。實(shí)現(xiàn)高性能任斋,...
    Bobby0322閱讀 10,860評論 0 24
  • 原文http://blog.csdn.net/konglongaa/article/details/5220827...
    不是山峰的鋒閱讀 866評論 0 1
  • 一個好演員继阻,不是單靠顏值,更是靠實(shí)力废酷!彭于晏瘟檩,就是這樣一個執(zhí)著認(rèn)真的演員,為《危城》練刀練槍澈蟆,讓人不禁直呼這是第二...
    探知Health閱讀 497評論 0 1