1. 程式人生 > >【圖文詳細 】Scala——RPC 遠端過程呼叫

【圖文詳細 】Scala——RPC 遠端過程呼叫

1、RPC 遠端過程呼叫 

 

1.1、RPC 概念 

RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請 求服務,而不需要了解底層網路技術的協議。RPC 協議假定某些傳輸協議的存在,如 TCP 或 UDP,為通訊程式之間攜帶資訊資料。在 OSI 網路通訊模型中,RPC 跨越了傳輸層和應用層。 RPC 使得開發包括網路分散式多程式在內的應用程式更加容易。 

RPC 採用客戶機/伺服器(C/S)模式:請求程式就是一個客戶機,而服務提供程式就是一個服 務器。首先,客戶機呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答信 息。在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。當一個呼叫資訊到達,伺服器 獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫進 程接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。

比如一個方法是如下定義:

Employee getEmployeeByName(String fullName) 

並且被部署在 B 伺服器上, 那麼 A 伺服器想要呼叫這個服務,那麼: 

 

1.2、為什麼要有 RPC 

RPC 框架的職責是:讓呼叫方感覺就像呼叫本地函式一樣呼叫遠端函式、讓服務提供方感覺 就像實現一個本地函式一樣來實現服務,並且遮蔽程式語言的差異性。 RPC 的主要功能目標是讓構建分散式計算(應用)更容易,在提供強大的遠端呼叫能力時不 損失本地呼叫的語義簡潔性。為實現該目標,RPC 框架需提供一種透明呼叫機制讓使用者不 必顯式的區分本地呼叫和遠端呼叫 

簡單的講,對於客戶端 A 來說,呼叫遠端伺服器 B 上的服務,就跟呼叫 A 上的自身服務一 樣。因為在客戶端 A 上來說,會生成一個伺服器 B 的代理。

 


轉載請標明出處:https://blog.csdn.net/qq_42246689


 

1.3、Java 中流行的 RPC 框架 
1、RMI(遠端方法呼叫)

JAVA 自帶的遠端方法呼叫工具,不過有一定的侷限性,畢竟是 JAVA 語言最開始時的設計, 後來很多框架的原理都基於 RMI 
 
2、Hessian(基於 HTTP 的遠端方法呼叫)

基於 HTTP 協議傳輸,在效能方面還不夠完美,負載均衡和失效轉移依賴於應用的負載均衡 器,Hessian 的使用則與 RMI 類似,區別在於淡化了 Registry 的角色,通過顯示的地址呼叫, 利用 HessianProxyFactory 根據配置的地址 create 一個代理物件,另外還要引入 Hessian 的 Jar 包。 
 
3、Dubbo(阿里開源的基於 TCP 的 RPC 框架)

基於 Netty 的高效能 RPC 框架,是阿里巴巴開源的,大致原理如下: 

阿里的 dubbo 現在已經貢獻給 Apache 了,官網是:http://dubbo.apache.org/

Duboo 的中文官網: https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html

其他比較流行的 RPC 技術還有 FaceBook 的 thrift,谷歌的 grpc,基於 Netty 的 HadoopRPC, 基於 actor 的 Akka 等 

 
 


轉載請標明出處:https://blog.csdn.net/qq_42246689