MQ與RPC的區別

背景

     曾經傻傻的分不清 MQ 與 RPC 的區別到底是什麼,我一直理解的是 MQ 和 RPC 都是將請求或者消息封裝( json/xml/probuffer 等),然後通過TCP或者HTTP等協議將請求交給另一個節點處理,從而實現節點與節點之間的遠程調用。

     直到最近,在一個羣裏聽人討論 MQ 與 RPC 的區別,其中一個網友給出了一個非常形象的例子,讓我印象深刻,他說“RPC可以比做打電話,你不接,它就掛了,你也不知道對方想跟你說什麼。而MQ可以比作微信或者QQ,給你發消息,你現在不看也沒關係,消息就存在你的列表裏,你隨時都可以去看”。 這個例子讓我豁然開朗,一個簡簡單單的比喻,形象的說明了 RPC 與 MQ 的區別:

       1.RPC 具有即時性,當電話打過來的時候,接電話的人需要在對方掛斷之前(連接超時)接通並進行響應(同步),否則接電話的人就無法知道此次通話的內容(丟消息)。

        2.通話具有排他性,一個人只能同時處理一個通話,其他人的通話只能等到當前通話結束後才能撥通。

       2.MQ 具有消息存儲能力(堆積), 你可以一直給對方發送微信消息,即使對方沒有看見或者沒時間處理,但消息就存在微信的消息列表中,對方可以在有空的時候進行處理。

       3.MQ 不需要等待對方的響應(異步),消息就在哪裏,你處不處理髮送者並不關心。

總結

      MQ 與 RPC 都能實現服務與服務之間的調用區別在於:

         1.RPC 是同步調用,A 節點調用 B 節點的服務時,B 節點需要及時接收並響應,否則將丟失消息。所以RPC適合每次調用需要知道結果場景。

         2.MQ 不保證消息的處理,更不提供處理之後的響應,所以 MQ 適合那種不關心結果的場景。

         3.RPC 調用在高併發中會有個劣勢,併發能力受限於被調用節點的系統資源和處理能力,同時過多的 RPC 請求可能會將系統壓垮甚至宕機。而 MQ 在這方面有絕對的優勢,MQ 具有消息堆積能力,可以實現削峯填谷的作用,從而保護了節點。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章