RPC框架的意義和用法,什麼是RPC
關於RPC框架,首先我們要了解什麼叫RPC,為什麼要用RPC。
RPC是隻遠端過程呼叫,也就是說兩臺伺服器A,B, 一個應用部署在A伺服器上,另一個應用部署在B伺服器上,A伺服器上的應用想要呼叫B伺服器上的應用提供的方法/函式,由於不在一個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語意和傳遞呼叫的引數。
比如說,一個方法可能這樣定義:
Student getStudentByName(String name)
那麼:
首先,要解決通訊的問題,主要是通過在客戶端和伺服器之間建立TCP連線,遠端呼叫過程中所有交換的資料都在這個連線裡傳輸,連線可以是按需連線,呼叫結束後就關閉,也
可以是長連線,多個遠端呼叫共享一個連線。
第二,要解決定址的問題,也就是說,A伺服器上的應用怎麼告訴底層的RPC框架,如何連線到B伺服器(如主機或IP地址)以及特定的埠號,方法的名稱是什麼,這樣才能完成呼叫,比如基於WEB服務協議的RPC,就要提供一個endpoint URI,或者是從UDDI服務上查詢。如果是RMI呼叫的話,還需要一個RMI Registry來註冊服務的地址。
第三,當A伺服器上的應用發起遠端過程呼叫時,方法的引數需要通過底層的網路協議如TCP傳遞到B伺服器,由於網路協議是基於 二進位制的,記憶體中的引數的值要序列化成二進位制的形式,也就是序列化(Serialize)或編組(marshal),通過定址和傳輸將序列化的二進位制傳送給B伺服器。
第四,B伺服器收到請求後,需要對引數進行反序列化(序列化的逆操作),恢復為記憶體中的表達方式,然後找到對應的方法(定址的一部分)進行本地呼叫,然後得到返回值。
第五,返回值還要傳送給A伺服器上的應用,也要經過序列化的方式傳送,伺服器A接到後,在反序列化,恢復為記憶體中的表達方式,交給A伺服器上的應用。