RPC是什麼?
通俗的講就是,呼叫遠端計算機上的服務,就像呼叫本地服務一樣。通常包含傳輸協議和編碼協議。
RPC可以基於HTTP或TCP協議,但基於HTTP協議的RPC效能卻不如基於TCP協議的RPC。兩方面會直接影響RPC的效能,一是傳輸方式,二是序列化。
眾所周知,TCP是傳輸層協議,HTTP是應用層協議,而傳輸層較應用層更加底層,在資料傳輸方面,越底層越快,因此,在一般情況下,TCP 一定比HTTP快。就序列化而言,Java 提供了預設的序列化方式,但在高併發的情況下,這種方式將會帶來一些效能上的瓶頸,於是市面上出現了一系列優秀的序列化框架,以取代 Java 預設的序列化,從而提供更高效的效能。
RPC和HTTP有什麼關係?
-
HTTP本身也可以作為RPC的傳輸層協議
-
和HTTP相比,TCP極大的精簡了傳輸內容
-
大部分RPC框架是面向服務的封裝,針對服務的可用性和效率等都做了優化
-
架在服務治理、負責均衡等方面做了很好的支援
-
內部服務一般走RPC,外部服務一般走HTTP
其它
越底層,程式碼越複雜、靈活性越高、效率越高;越上層,抽象封裝越好、程式碼越簡單、效率越差。
企業的複雜技術需求通常對於遠端呼叫需要做到包含但不止以下幾種需求
(1) 路由配置、服務治理。呼叫的下游服務處在重啟、擴容或者某些機器下線,需要及時關閉對應機器的流量,避免造成不可用。
調整流量的路由策略。
(2) 負載均衡。將流量平均打到下游服務的所有機器上
(3) 服務降級、自動熔斷。當下遊服務呼叫錯誤率顯著增高後,及時熔斷避免影響上游服務,服務恢復後及時恢復流量。
SOAP是HTTP+文字
參考:http://blog.jobbole.com/92290/