消息隊列特點:
1.Message Queue把請求的壓力保存一下,逐漸釋放出來,讓處理者按照自己的節(jié)奏來處理。
2.Message Queue引入一下新的結(jié)點,讓系統(tǒng)的可靠性會受Message Queue結(jié)點的影響。
3.Message Queue是異步單向的消息。發(fā)送消息設(shè)計成是不需要等待消息處理的完成。
所以對于有同步返回需求,用Message Queue則變得麻煩了。
RPC的特點:
1.同步調(diào)用,對于要等待返回結(jié)果/處理結(jié)果的場景,RPC是可以非常自然直覺的使用方式。
2. RPC也可以是異步調(diào)用。由于等待結(jié)果,Consumer(Client)會有線程消耗。如果以異步RPC的方式使用,Consumer(Client)線程消耗可以去掉。但不能做到像消息一樣暫存消息/請求,壓力會直接傳導(dǎo)到服務(wù)Provider。
適用場合說明:
1.希望同步得到結(jié)果的場合,RPC合適。
2.希望使用簡單,則RPC;RPC操作基于接口,使用簡單,使用方式模擬本地調(diào)用。異步的方式編程比較復(fù)雜。
3.不希望發(fā)送端(RPC Consumer、Message Sender)受限于處理端(RPC Provider、Message Receiver)的速度時,使用Message Queue。
隨著業(yè)務(wù)增長,有的處理端處理量會成為瓶頸,會進行同步調(diào)用到異步消息的改造。這樣的改造實際上有調(diào)整業(yè)務(wù)的使用方式。比如原來一個操作頁面提交后就下一個頁面會看到處理結(jié)果;改造后異步消息后,下一個頁面就會變成“操作已提交,完成后會得到通知”。
不適用場合說明:
RPC同步調(diào)用使用Message Queue來傳輸調(diào)用信息。 上面分析可以知道,這樣的做法,發(fā)送端是在等待,同時占用一個中間點的資源。變得復(fù)雜了,但沒有對等的收益。
對于返回值是void的調(diào)用,可以這樣做,因為實際上這個調(diào)用業(yè)務(wù)上往往不需要同步得到處理結(jié)果的,只要保證會處理即可。(RPC的方式可以保證調(diào)用返回即處理完成,使用消息方式后這一點不能保證了。)
返回值是void的調(diào)用,使用消息,效果上是把消息的使用方式Wrap成了服務(wù)調(diào)用(服務(wù)調(diào)用使用方式成簡單,基于業(yè)務(wù)接口)
原文連接:http://oldratlee.com/post/2013-02-01/synchronous-rpc-vs-asynchronous-message