標籤:大量 bit 分析 知乎 來源 賬戶 consumer 資料庫 使用者
訊息佇列的使用情境是怎樣的?經常聽到諸如rebbitmq,activemq,請教一下各位前輩訊息佇列的使用情境是怎樣的,什麼時候會用到它
- 校正使用者名稱等資訊,如果沒問題會在資料庫中添加一個使用者記錄
- 如果是用郵箱註冊會給你發送一封註冊成功的郵件,手機註冊則會發送一條簡訊
- 分析使用者的個人資訊,以便將來向他推薦一些志同道合的人,或向那些人推薦他
- 發送給使用者一個包含操作指南的系統通知
- 等等……
除了這些之外,比較常用的就是起到消峰時需要用到:
比如你的伺服器一秒能處理100個訂單,但秒殺活動1秒進來1000個訂單,持續10秒,在後端能力無法增加的情況下,你可以用訊息佇列將總共10000個請求壓在隊列裡,後台consumer按原有能力處理,100秒後處理完所有請求(而不是直接宕機丟失訂單資料)。
技術都是解決問題的,訊息佇列解決的是將突發大量請求轉換為後端能承受的隊列請求。
很輕很安靜
連結:https://www.zhihu.com/question/34243607/answer/127666030
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 ScienJus
連結:https://www.zhihu.com/question/34243607/answer/58314162
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
個人認為訊息佇列的主要特點是非同步處理,主要目的是減少請求回應時間和解耦。所以主要的使用情境就是將比較耗時而且不需要即時(同步)返回結果的操作作為訊息放入訊息佇列。同時由於使用了訊息佇列,只要保證訊息格式不變,訊息的發送方和接收方並不需要彼此聯絡,也不需要受對方的影響,即解耦和。
使用情境的話,舉個例子:
假設使用者在你的軟體中註冊,服務端收到使用者的註冊請求後,它會做這些操作:
- 校正使用者名稱等資訊,如果沒問題會在資料庫中添加一個使用者記錄
- 如果是用郵箱註冊會給你發送一封註冊成功的郵件,手機註冊則會發送一條簡訊
- 分析使用者的個人資訊,以便將來向他推薦一些志同道合的人,或向那些人推薦他
- 發送給使用者一個包含操作指南的系統通知
- 等等……
但是對於使用者來說,註冊功能實際只需要第一步,只要服務端將他的賬戶資訊存到資料庫中他便可以登入上去做他想做的事情了。至於其他的事情,非要在這一次請求中全部完成嗎?值得使用者浪費時間等你處理這些對他來說無關緊要的事情嗎?所以實際當第一步做完後,服務端就可以把其他的操作放入對應的訊息佇列中然後馬上返回使用者結果,由訊息佇列非同步進行這些操作。
或者還有一種情況,同時有大量使用者註冊你的軟體,再高並發情況下註冊請求開始出現一些問題,例如郵件介面承受不住,或是分析資訊時的大量計算使cpu滿載,這將會出現雖然使用者資料記錄很快的添加到資料庫中了,但是卻卡在發郵件或分析資訊時的情況,導致請求的回應時間大幅增長,甚至出現逾時,這就有點不划算了。面對這種情況一般也是將這些操作放入訊息佇列(生產者消費者模型),訊息佇列慢慢的進行處理,同時可以很快的完成註冊請求,不會影響使用者使用其他功能。
所以在軟體的正常功能開發中,並不需要去刻意的尋找訊息佇列的使用情境,而是當出現效能瓶頸時,去查看商務邏輯是否存在可以非同步處理的耗時操作,如果存在的話便可以引入訊息佇列來解決。否則盲目的使用訊息佇列可能會增加維護和開發的成本卻無法得到可觀的效能提升,那就得不償失了。
java訊息佇列怎麼用