首先,mq的作用有三個:
1.實作異步通信
同步通信是什么樣的?發出一個呼叫請求之后,在沒有得到結果之前,就不回傳,由呼叫者主動等待這個呼叫的結果,而異步是相反的,在呼叫發出之后,這個呼叫就直接回傳了,所以沒有回傳結果,也就是說,當一個異步程序呼叫發出后,呼叫者不會馬上得到結果,而是在呼叫發出后,被呼叫者通過狀態,通知來通知呼叫者,或者通過回呼函式處理這個呼叫
2.實作系統解耦
在我們的分布式系統中,一個業務流程涉及多個系統的時候,他們之間就會形成一個依賴關系,

比如我們以 12306 網站退票為例,在傳統的通信方式中,訂單系統發生了退貨的動作,那么要依次呼叫所有下游系統的API,比如呼叫庫存系統的 API 恢復庫存,因為這張火車票還要釋放出去給其他乘客購買;呼叫支付系統的 API,不論是支付寶微信還是銀行 卡,要把手續費扣掉以后,原路退回給消費者;呼叫通知系統 API 通知用戶退貨成功,
這個程序是串行執行的,如果在恢復庫存的時候發生了例外,那么后面的代碼都不 會執行,由于這一系列的動作,恢復庫存,資金退還,發送通知,本質上沒有一個嚴格 的先后順序,也沒有直接的依賴關系,也就是說,只要用戶提交了退貨的請求,后面的這些動作都是要完成的,庫存有沒有恢復成功,不影響資金的退還和發送通知.
所以,這種情況下,我們可以引入MQ實作系統之間依賴關系
引入MQ之后:

訂單系統只需要把退貨的訊息發送到訊息佇列上,由各個下游的業務系統自己創建 佇列,然后監聽佇列消費訊息, 在這種情況下訂單系統里面就不需要配置其他系統的 IP、埠、介面地址了,因為它不需要關心消費者在網路上的什么位置,所以下游系統改 IP 沒有任何影響,甚至不需要關心消費者有沒有消費成功,它只需要把消費發到訊息佇列的服務器上就可以了,
這樣,我們就實作了系統之間依賴關系的解耦,
3.實作流量削峰
第三個主要功能,是實作流量削峰, 在很多的電商系統里面,有一個瞬間流量達到峰值的情況,比如京東的 618,淘寶的雙11,還有小米搶購,普通的硬體服務器肯定支撐不了這種百萬或者千萬級別的并發 量,就像 2012 年的小米一樣,動不動服務器就崩潰, 如果通過堆硬體的方式去解決,那么在流量峰值過去以后就會出現巨大的資源浪費, 那要怎么辦呢?如果說要保護我們的應用服務器和資料庫,限流也是可以的,但是這樣又會導致訂單的丟失,沒有達到我們的目的, 為了解決這個問題,我們就可以引入 MQ,MQ 既然是佇列,一定有佇列的特性, 我們知道佇列的特性是什么? (先進先出 FIFO) 這樣,我們就可以先把所有的流量承接下來,轉換成 MQ 訊息發送到訊息佇列服務 器上,業務層就可以根據自己的消費速率去處理這些訊息,處理之后再回傳結果,就像 我們在火車站排隊一樣,大家只能一個一個買票,不會因為人多就導致售票員忙不過來, 如果要處理快一點,大不了多開幾個視窗(增加幾個消費者),
4.總結:
1)對于數量量大或者處理耗時長的操作,可以引入MQ實作異步通信,減少客戶端的等待,提升回應速度.
2)對于改動影響大的系統之間,可以引入MQ實作解耦,減少系統之間的直接依賴
3)對于出現瞬間的流量峰值的系統,可以引入MQ實作流量削峰,達到保護應用和資料庫的目的
5.使用訊息佇列帶來的一些問題
1)系統可用性降低:原來是兩個節點的通信,現在還需要獨立運行一個服務,如果MQ服務器或者通信網路出現問題,就會導致請求失敗
2)系統復雜性提高:第一開發者必須要理解相關的模型和概念,才能正確的配置和使用MQ,第二使用MQ發送訊息必須要考慮訊息丟失和訊息重復消費的問題,一旦訊息沒有被正確的消費,就會帶來資料一致性的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/238529.html
標籤:其他
上一篇:手機掃碼解決傳統貸款流程
下一篇:權限系統的基本概念和架構
