RPC 學習筆記

RPC

RPC(Remote Procedure Call) 是一種進程間通信方式。它允許程序調用另一個地址空間的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。即程序員無論是調用本地的還是遠程的,本質上編寫的調用代碼基本相同。

現有的 RPC 實現基本都是由以下五部分組成:
User
User-stub
RPCRuntime
Server-stub
Server

這裏 user 就是 client 端,當 user 想發起一個遠程調用時,它實際是通過本地調用 user-stub。 user-stub 負責將調用的接口、方法和參數通過約定的協議規範進行編碼並通過本地的 RPCRuntime 實例傳輸到遠端的實例。 遠端 RPCRuntime 實例收到請求後交給 server-stub 進行解碼後發起本地端調用,調用結果再返回給 user 端。
在這裏插入圖片描述

  1. client代碼像普通函數調用一樣調用client stub函數,這個調用是本地調用,調用參數會和平常函數調用一樣進行返回地址和調用參數壓棧操作;
  2. client stub會把調用參數和其它信息(比如調用方法名、調用屬性等,可以稱爲metadata)進行打包封裝成message,然後通過系統調用發送該message,這個打包的過程是個序列化的過程;
  3. client尋求到服務端的地址,然後通過本地操作系統經由某種協議,將上述message發送給server端;
  4. server端的操作系統接收message後將其傳遞給server stub;
  5. server stub將message解包,得到原始傳遞過來的各項調用參數,解包的過程是反序列化的過程;
  6. server stub調用server端的本地函數,然後將得到的結果按照上述類似的步驟反向傳遞給client作爲結果返回。當然整個過程也可能不那麼順利,那麼也應該產生合適的狀態碼、異常信息作爲返回。

參考

http://mindwind.me/blog/2014/09/15/深入淺出RPC-淺出篇.html
http://mindwind.me/blog/2014/09/22/深入淺出RPC-深入篇.html

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