1. 程式人生 > >RPC框架呼叫詳解

RPC框架呼叫詳解

RPC是遠端呼叫過程的簡寫,是一個協議,處於網路通訊協議的第五層:會話層,其下就是TCP/IP協議,在建立在其基礎上的通訊會話協議。RPC定義了互動的模式,而應用程式使用這些模式,來訪問其他伺服器的方法,並不需要關係具體的網路上的細節。     

     一、RPC基礎知識   

     1.RPC模式

     RPC採用C/S模式,客戶端傳送請求,服務端響應。

     基於底層的協議,比如TCP/IP模式。

     2.設計目的

     ①通過固定的協議,呼叫非本機的方法

     ②實現不同程式語言之間的通訊

     ③不需要了解底層協議,像本地方法一樣調。它完全封裝了網路傳輸,以及其他細節。

     二、RPC過程詳解

          

                                                圖一   RPC呼叫過程

     從RPC的角度看,應該有服務的提供方,即生產者;還有服務的呼叫方,即消費者。

     對消費者來時,在RPC呼叫過程中,使用第1步、第2步、第3步、第4步是透明的,其他的都是使用RPC框架去封裝這些事情。當應用開始呼叫PRC的方式時,就會去容器中去取Bean物件,所以我們應該首先註冊Bean物件到容器中,我們通過Java的動態代理,將代理過程封裝到代理物件中,代理物件實現介面,建立例項到容器中。相應的,在呼叫遠端物件的物件方法時,就會呼叫動態代理中的方法,這就是代理層的作用。

     代理物件在獲取到請求方法、介面和引數時,就會用序列化層,將這些資訊封裝成一個請求報文,再讓通訊層向服務端傳送報文的內容,然後就到了生產者這塊。

     相應的服務必須有個監聽器,來監聽來自其他服務的請求,一般都會用容器做訊息的監聽,就會呼叫對應的Bean物件的方法,去處理響應的請求。當然,RPC框架不會讓容器中的每一個框架都會被呼叫,所以只有註冊了的Bean才會被RPC的請求呼叫到。然後,通過請求中的類、方法、引數,反射呼叫對應的Bean,拿到結果之後,通過序列化層,封裝好結果報文,服務端的通訊層將報文反饋給呼叫方,呼叫方解析到返回值,動態代理類返回結果,呼叫結束。

     這樣,一個完整的RPC呼叫反饋鏈條就完成了。

     1.消費者設計

               

                                               圖二  消費者設計

     ①代理層:

     消費者將對應的介面,通過RPC框架的代理來生成一個物件到Spring容器中。代理層將代理介面生成該介面的物件,該物件處理呼叫時傳過來的物件、方法、引數,通過序列化層封裝好,呼叫網路層。

     ②序列化層:

     將請求的引數序列化成報文;將返回的報文反序列化成物件;

     ③網路層:

     將報文與服務端通訊;接收返回結果。

     2.生產者設計

            

                                              圖三  生產者設計 

     ①代理層:

     一個應用提供服務,必須由一個網路監聽的模組,這個模組大多有開源的容器來處理網路上的監聽;服務需要註冊,只有註冊了的服務才可以被呼叫;註冊的服務需要被我們發射呼叫到,來進行相應的處理。

     ②序列化層:

     就是相應的做請求的反序列化和結果的序列化。

     ③網路層:

     接收客戶端報文;將序列化的結果返回給客戶端。

     三、RPC模式總結

                     

                                                 圖三  RPC模式總結

     1.Proxy代理層

     用於物件的代理;物件的反射呼叫;RPC流程的控制。

     2.Serialize序列化層

     將請求序列化和結果反序列化。

     3.Invoke網路模組

     主要用於網路通訊的相關處理。

     4.Container容器元件

     這層主要用於代理層監聽網路請求。

     以上就是RPC協議的設計理念,理解學習RPC有助於我們更好的理解分散式服務框架,這屬於分散式服務的基礎,下一篇博文將為大家介紹一下詳細的分散式框架。