為什么使用MQ(消息隊列),這是一個很經(jīng)典的問題,在互聯(lián)網(wǎng)公司里,MQ是必須用到的,有以下場景:
例如有一個表單提交,涉及多個系統(tǒng)的交互,形成一個冗長的流程,同步處理完畢,再返回給用戶,則需要一定的時間,用戶體驗不好。
異步
而如果引入MQ,把關(guān)鍵步驟,照舊同步處理完畢,直接返回給用結(jié)果,非關(guān)鍵步驟,我們通過MQ,讓系統(tǒng)背后慢慢消費,慢慢處理。
這樣用戶體驗好,數(shù)據(jù)也最終一致性。
有一個應(yīng)用的接口,調(diào)用方特別多,如果每當(dāng)來一個請求,服務(wù)器就進(jìn)行處理,當(dāng)瞬間來批量的請求,容易一下子把機器打死。
肖峰
而使用了MQ,多了一個消息隊列,相當(dāng)于多了一個緩存區(qū)。每增加一個請求,服務(wù)器可能不會立刻響應(yīng),而是先放到消息隊列里邊。服務(wù)器可以依次進(jìn)行,在自己的性能范圍內(nèi),不斷地消費消息,處理請求。
互聯(lián)網(wǎng)公司里邊,每個部門,各負(fù)責(zé)各自系統(tǒng),如果彼此的聯(lián)系,僅僅通過rpc的接口調(diào)用,如此一來,雙方的每次系統(tǒng)迭代更新,都要對彼此提供的client做一定的考量,增加一個字段、修改一個字段、增加一個參數(shù)、減少一個參數(shù)、修改個參數(shù)名,都要及時通知對方,很不方便。
而彼此之間增加MQ之后,雖然也是要留意下消息體字段,但是就沒有那么苛刻,系統(tǒng)雙方,顯得靈活些。