RPC服務治理
什麼是RPC?
RPC全稱爲Remote Procedure Call,翻譯過來爲“遠程過程調用”。目前,主流的平臺中都支持各種遠程調用技術,以滿足分佈式系統架構中不同的系統之間的遠程通信和相互調用。遠程調用的應用場景極其廣泛,實現的方式也各式各樣。
過程是什麼?
過程是業務處理、計算任務;更直接的理解:一段程序代碼。
有什麼重要特徵?
像調用本地方法一樣調用遠程的過程。
遠程調用原理
比如 A (client) 調用 B (server) 提供的 remoteAdd方法:
首先A與B之間建立一個TCP連接;
-
A把需要調用的方法名(這裏是remoteAdd)以及方法參數(10, 20)序列化成字節流發送出去;
-
B接受A發送過來的字節流,然後反序列化得到目標方法名,方法參數,接着執行相應的方法調用(可能是localAdd)並把結果30返回;
-
A接受遠程調用結果,輸出30。
RPC框架是什麼?
封裝好了參數組、消息編解碼、底層網絡通信的遠程過程調用的程序框架,可以直接在其基礎上只需專注於我們的過程代碼編寫。
- 傳統的webService框架:Apache CXF、Apache Axis2、java自帶的JAX-WS等等。webService框架大多基於標準的SOAP協議。
- 新興的微服務框架:Dubbo、Spring Cloud、Apache Thrift等等
通信協議
基於HTTP協議的,如:基於文本SOAP(XML), JSON, 二進制Hessian。
基於TCP協議,通常會借用Netty等高性能網絡框架。
序列化/反序列化
只有二進制數據才能在網絡中傳輸,將對象轉換成二進制流的過程叫做序列化,將二進制流轉換成對象的過程叫做反序列化。
RPC與REST有什麼區別?
通過了解RPC後,我們知道是RPC是client/server模式的,調用遠程的方法,REST也是我們熟悉的一套API調用協議方法,它也是基於client/server模式的,調用遠程的方法的,那他倆又有啥區別呢?
REST 和 RPC 都是在 Server端, 把一個個函數封裝成接口暴露出去,以供 Client端 調用,不過 REST 是基於HTTP協議的,REST致力於通過HTTP協議中的POST/GET等方法和一個可讀性強的URL來提供一個HTTP請求。而 RPC 可以不基於 HTTP協議 ,因此用 RPC 可以獲得更好的性能(省去了 HTTP header等一系列東西),應該也更容易配置。