SpringCloud:流動計算架構及RPC遠端過程呼叫

當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。

此時,用於提高機器利用率的資源排程和治理中心(SOA)[ Service Oriented Architecture]是關鍵。

SpringCloud:流動計算架構及RPC遠端過程呼叫

如下圖所示,流動的計算架構是這樣的:

SpringCloud:流動計算架構及RPC遠端過程呼叫

RPC遠端過程呼叫

RPC【Remote Procedure Call】是指

遠端過程呼叫

,是一種

程序間通訊方式

,是一種技術的思想,而不是規範。它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即程式設計師無論是呼叫本地的還是遠端的函式,本質上編寫的呼叫程式碼基本相同。通俗的說法就是:

比如說現在有兩臺伺服器A和B,一個應用部署在A伺服器上,另一個應用部署在B伺服器上,如果A應用想要呼叫B應用提供的方法,由於他們不在一臺機器下,也就是說它們不在一個JVM記憶體空間中,是無法直接呼叫的,需要透過網路進行呼叫,那這個呼叫過程就叫做RPC。

需要注意的是:

同一個JVM下,一個方法可以直接呼叫另一個方法;

不同的JVM下,一個專案的方法透過RPC呼叫另一個專案的方法;

RPC實現方式:

基於TCP協議的rpc

基於Http協議的rpc

原理圖

SpringCloud:流動計算架構及RPC遠端過程呼叫

執行過程

1、客戶端(client)以本地呼叫方式(即以介面的方式)呼叫服務;

2、客戶端存根(client stub)【可以理解為客戶端小助手】接收到呼叫後,負責將方法、引數等組裝成能夠進行網路傳輸的訊息體(將訊息體物件序列化為二進位制);

3、客戶端透過sockets將訊息傳送到服務端;

4、服務端存根( server stub)收到訊息後進行解碼(將訊息物件反序列化);

5、服務端存根( server stub)根據解碼結果呼叫本地的服務;

6、本地服務執行並將結果返回給服務端存根( server stub);

7、服務端存根( server stub)將返回結果打包成訊息(將結果訊息物件序列化);

8、服務端(server)透過sockets將訊息傳送到客戶端;

9、客戶端存根(client stub)接收到結果訊息,並進行解碼(將結果訊息發序列化);

10、客戶端(client)得到最終結果。

RPC的目標

RPC的目標是要把2、3、4、7、8、9這些步驟都封裝起來。

RPC兩個核心模組:通訊,序列化。

注意:無論是何種型別的資料,最終都需要轉換成二進位制流在網路上進行傳輸,資料的傳送方需要將物件轉換為二進位制流,而資料的接收方則需要把二進位制流再恢復為物件。

案例圖

SpringCloud:流動計算架構及RPC遠端過程呼叫

以上就是流動的計算架構及RPC遠端過程呼叫的全部內容,下篇文章會介紹

分散式系統,

小夥伴,敬請期待吧。