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有助於我們更好的理解分散式服務框架,這屬於分散式服務的基礎,下一篇博文將為大家介紹一下詳細的分散式框架。