定義
基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)中“先進(jìn)先出”的一種數(shù)據(jù)結(jié)構(gòu)育特。
Message Queue的優(yōu)點(diǎn)
解耦
在項(xiàng)目啟動(dòng)之初來預(yù)測(cè)將來項(xiàng)目會(huì)碰到什么需求,是極其困難的以故。消息隊(duì)列在處理過程中間插入了一個(gè)隱含的屯耸、基于數(shù)據(jù)的接口層,兩邊的處理過程都要實(shí)現(xiàn)這一接口送丰。 這允許你獨(dú)立的擴(kuò)展或修改兩邊的處理過程缔俄,只要確保它們遵守同樣的接口約束。
冗余
有些情況下器躏,處理數(shù)據(jù)的過程會(huì)失敗俐载。除非數(shù)據(jù)被持久化,否則將造成丟失登失。消息隊(duì)列把數(shù)據(jù)進(jìn)行持久化直到它們已經(jīng)被完全處理遏佣,通過這一方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)。 在被許多消息隊(duì)列所采用的”插入——獲取——?jiǎng)h除”范式中揽浙,在把一個(gè)消息從隊(duì)列中刪除之前状婶,需要你的處理過程明確的指出該消息已經(jīng)被處理完畢,確保你的數(shù)據(jù)被安全的保 存直到你使用完畢捏萍。
擴(kuò)展性
因?yàn)橄㈥?duì)列解耦了你的處理過程太抓,所以增大消息入隊(duì)和處理的頻率是很容易的;只要另外增加處理過程即可令杈。不需要改變代碼走敌、不需要調(diào)節(jié)參數(shù)。擴(kuò)展就像調(diào)大電力按鈕一樣簡單逗噩。
靈活性 & 峰值處理能力
在訪問量劇增的情況下掉丽,應(yīng)用仍然需要繼續(xù)發(fā)揮作用,但是這樣的突發(fā)流量并不常見异雁; 如果為以能處理這類峰值訪問為標(biāo)準(zhǔn)來投入資源隨時(shí)待命無疑是巨大的浪費(fèi)捶障。使用消息隊(duì)列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力,而不會(huì)因?yàn)橥话l(fā)的超負(fù)荷的請(qǐng)求而完全 崩潰纲刀。
可恢復(fù)性
當(dāng)體系的一部分組件失效项炼,不會(huì)影響到整個(gè)系統(tǒng)。消息隊(duì)列降低了進(jìn)程間的耦合度, 所以即使一個(gè)處理消息的進(jìn)程掛掉锭部,加入隊(duì)列中的消息仍然可以在系統(tǒng)恢復(fù)后被處 理暂论。而這種允許重試或者延后處理請(qǐng)求的能力通常是造就一個(gè)略感不便的用戶和一個(gè)沮喪透頂?shù)挠脩糁g的區(qū)別。
送達(dá)保證
消息隊(duì)列提供的冗余機(jī)制保證了消息能被實(shí)際的處理拌禾,只要一個(gè)進(jìn)程讀取了該隊(duì)列即 可取胎。在此基礎(chǔ)上,IronMQ 提供了一個(gè)”只送達(dá)一次”保證湃窍。無論有多少進(jìn)程在從隊(duì)列 中領(lǐng)取數(shù)據(jù)闻蛀,每一個(gè)消息只能被處理一次。這之所以成為可能您市,是因?yàn)楂@取一個(gè)消息 只是”預(yù)定”了這個(gè)消息觉痛,暫時(shí)把它移出了隊(duì)列。除非客戶端明確的表示已經(jīng)處理完了 這個(gè)消息墨坚,否則這個(gè)消息會(huì)被放回隊(duì)列中去秧饮,在一段可配置的時(shí)間之后可再次被處理映挂。
順序保證
在大多使用場(chǎng)景下泽篮,數(shù)據(jù)處理的順序都很重要。消息隊(duì)列本來就是排序的柑船,并且能保證數(shù)據(jù)會(huì)按照特定的順序來處理帽撑。IronMO 保證消息通過 FIFO(先進(jìn)先出)的順序來處理,因此消息在隊(duì)列中的位置就是從隊(duì)列中檢索他們的位置鞍时。
緩沖
在任何重要的系統(tǒng)中亏拉,都會(huì)有需要不同的處理時(shí)間的元素。例如逆巍,加載一張圖片比應(yīng)用過濾器花費(fèi)更少的時(shí)間及塘。消息隊(duì)列通過一個(gè)緩沖層來幫助任務(wù)最高效率的執(zhí)行——寫入隊(duì)列的處理會(huì)盡可能的快速,而不受從隊(duì)列讀的預(yù)備處理的約束锐极。該緩沖有助于控 制和優(yōu)化數(shù)據(jù)流經(jīng)過系統(tǒng)的速度笙僚。
理解數(shù)據(jù)流
在一個(gè)分布式系統(tǒng)里,要得到一個(gè)關(guān)于用戶操作會(huì)用多長時(shí)間及其原因的總體印象灵再, 是個(gè)巨大的挑戰(zhàn)肋层。消息系列通過消息被處理的頻率,來方便的輔助確定那些表現(xiàn)不佳 的處理過程或領(lǐng)域翎迁,這些地方的數(shù)據(jù)流都不夠優(yōu)化栋猖。
異步通信
很多時(shí)候,你不想也不需要立即處理消息汪榔。消息隊(duì)列提供了異步處理機(jī)制蒲拉,允許你把 一個(gè)消息放入隊(duì)列,但并不立即處理它。你想向隊(duì)列中放入多少消息就放多少雌团,然后 -在你樂意的時(shí)候再去處理它們爆班。