RPC是指遠程過程調用,也就是說兩台服務器,一個應用部署在其中一台服務器上,想要調用另外一台服務器上應用提供的函數(方法),由於不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語義和傳達調用的數據。
RPC 采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用過程接收答復信息,獲得進程結果,然后調用執行繼續進行。
實現兩台服務器之間的交互,必須得通過通信協議,RPC的通訊協議實際上是使用TCP/IP協議(可以是按需連接,調用結束后就斷掉,也可以是長連接,多個遠程過程調用共享同一個連接),只不過RPC將其進行了封裝處理,只需要調用就可以進行連接,不必關心底層,這一點與如今的框架的目的相同(將工作的中心放在了業務流程上)。那么如何找到目標服務器!僅僅通過IP是不行的,因為你無法確定目標服務器是否也同時在為其它端(泛指客戶端,web端,也可以是服務端)提供其它服務,所以,需要一個標示,也就是端口,其它端就能夠准確無誤的找到自己所需要的進程,並通過進程號,找到目標服務,調用其提供的數據。
那么RPC的安全性如何?TCP/IP通信協議是基於二進制的,在內存中的參數的值要序列化成二進制的形式,也就是序列化(Serialize)或編組(marshal),通過尋址(也就是IP+POST)和傳輸將序列化的二進制發送,而接收方收到請求后,則需要對參數進行反序列化(序列化的逆操作),恢復為內存中的表達方式,然后找到對應的方法進行本地調用,然后得到返回值,返回值也需要經過序列化的方式發送,調用方接收到以后,再反序列化,恢復為內存中的表達方式……
圖片來自網絡
使用RPC的優點是,不需要了解底層網絡技術的協議,為通信程序之間攜帶信息數據。在網絡通信模型中,RPC 跨越了傳輸層和應用層。RPC 使得開發包括網絡分布式多程序在內的應用程序更加容易。
以上,是本人對RPC的理解,如有不足或錯誤,還望指出,謝謝!
