當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
此時,用於提高機器利用率的資源排程和治理中心(SOA)[ Service Oriented Architecture]是關鍵。
如下圖所示,流動的計算架構是這樣的:
RPC遠端過程呼叫
RPC【Remote Procedure Call】是指
遠端過程呼叫
,是一種
程序間通訊方式
,是一種技術的思想,而不是規範。它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即程式設計師無論是呼叫本地的還是遠端的函式,本質上編寫的呼叫程式碼基本相同。通俗的說法就是:
比如說現在有兩臺伺服器A和B,一個應用部署在A伺服器上,另一個應用部署在B伺服器上,如果A應用想要呼叫B應用提供的方法,由於他們不在一臺機器下,也就是說它們不在一個JVM記憶體空間中,是無法直接呼叫的,需要透過網路進行呼叫,那這個呼叫過程就叫做RPC。
需要注意的是:
同一個JVM下,一個方法可以直接呼叫另一個方法;
不同的JVM下,一個專案的方法透過RPC呼叫另一個專案的方法;
RPC實現方式:
基於TCP協議的rpc
基於Http協議的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兩個核心模組:通訊,序列化。
注意:無論是何種型別的資料,最終都需要轉換成二進位制流在網路上進行傳輸,資料的傳送方需要將物件轉換為二進位制流,而資料的接收方則需要把二進位制流再恢復為物件。
案例圖
以上就是流動的計算架構及RPC遠端過程呼叫的全部內容,下篇文章會介紹
分散式系統,
小夥伴,敬請期待吧。