消息隊列和遠程調用比較

架構模型

RPC的特點是:

  • 客戶端同步調用服務器上的方法、過程
  • 客戶端的請求只能由一個服務器處理,雖然請求可以分發到不同的服務器,但一次只能由一個服務器處理
  • 架構簡單、明晰

MQ的特點是:

  • 消息的發送者和消費者解耦,即消息的產生和處理是異步的
  • 一條消息的消費者可以有多個
  • 消息可以保存在MQ系統中,消費者可以重新消費
  • 架構比RPC稍顯複雜

適用場景

RPC比較適合

- 客戶端調用哪個服務器比較明確
- 調用需要立即得到返回結果

- 架構簡單

在一個由多個微服務構成的大系統中,某些關鍵服務間的調用應當在較短的時間內返回,而且各個微服務的專業化程度較高,同一個請求的關注者只有一個。這個時候就應該用RPC。

比如在一個ERP系統中,有一個管理倉儲的微服務,以及一個負責訂單的微服務。新建訂單時需要查知當前的存貨是否充足,如果不充足就通知用戶;提交訂單時預訂指定數量的貨物,如果此時貨物不錯,也要終止訂單的提交,並通知用戶。顯然在這種場景下是不允許較大的延遲,否則會影響用戶體驗。所以應該使用RPC,及時返回倉儲情況。

MQ比較適合

- 消息的發送者和消費者需要解耦的情況
- 發送者並不明確誰是消費者
- 發送者並不關心誰來消費消息
- 各個消費者可以從不同的角度入手處理消息
- 消費者的處理結果也不返回給發送者
- 消息的發送和處理是異步的

- 消息的關注者不止一個

在一個由多個微服務構成的大系統中,會有一些非關鍵服務,用來執行一些不需要立刻得到結果的計算。而且它們的計算結果並不會返回給消息的發送者。這個時候就應該使用MQ。

比如在一個ERP系統中有一些日誌服務、業務監控服務等。這些服務會發布一些系統事件,針對這些事件可能有多個應用關注。對於日誌服務,當系統出現某些異常情況時需要瀏覽日誌,查找問題的根源;也可以在分析系統運行的瓶頸時提供關鍵數據。對於業務監控系統,例如貨物入倉出倉的消息,可以被報表系統關注,生成報表;也可以被配貨系統關注,及時補足所需庫存。


分享到:


相關文章: