回覆列表
  • 1 # 會點程式碼的大叔

    本地呼叫VS遠端呼叫

    RPC:Remote Procedure Call,中文意思就是遠端過程呼叫。

    遠端是相對於本地來說的,有遠端呼叫就有本地呼叫,那麼先說說本地呼叫是什麼,這個就簡單了;比如下圖,我們的程式碼在同一個程序中(或者說同一個地址空間)呼叫另外一個方法,得到我們需要的結果,這就是本地呼叫:

    那麼想象一下,如果這裡的add方法是一個很複雜的方法,很多系統都想用這個方法,那麼我們可以把這個方法單獨拆成一個服務,提供給各個系統進行呼叫,那麼本地就會變成遠端,就會變成這樣:

    RPC:讓遠端呼叫變得和本地呼叫一樣

    那麼在Server_A中怎麼呼叫Server_B中的add方法呢?很多人都會想到Server_B封裝一個介面,透過服務把這個方法暴露出去,比如Restful介面,那麼Server_A就可以呼叫Server_B中的add方法了。

    透過這種方法實現起來沒有問題,也是一個不錯的解決方法,就是在每次呼叫的時候,都要發起HTTP請求,程式碼裡面要寫HttpClient.sendRequest這樣的程式碼,那麼我們有沒有可能像呼叫本地一樣,去發起遠端呼叫呢?讓程式設計師不知道這是呼叫的遠端方法呢?這時候就要提到RPC了:

    RPC用於服務之間的呼叫問題,特別是分散式環境;

    RPC讓遠端呼叫時,像呼叫本地方法一樣方便和無感知;

    RPC框架遮蔽了很多底層的細節,不需要開發人員關注這些細節,比如序列化和反序列化、網路傳輸協議的細節;

    完整的RPC過程,如圖(畫的比較簡單):

    當然,上文只是簡單地介紹了一下RPC的概念和優點,其實真正的RPC框架還是很複雜的,除了序列化和反序列化,客戶端中還需要有連線池管理、負載均衡、故障轉移、超時管理等功能,服務端中有上下文管理器、非同步回撥、收發包佇列、工作執行緒等等。

  • 中秋節和大豐收的關聯?
  • 牛奶裡面可以加熱水麼?