一、RPC
1.1? ?RPC概念
RPC = Remote Procedure Call, 即遠程過程調用,是一種用于構建分布式系統的理念,在一些資料中被稱為“請求-響應”協議。兩個進程可以位于同一系統中,也可以位于不同的系統中,通過網絡相互連接。
RPC使程序能向網絡中另一臺計算機上的軟件請求服務,而無需了解網絡的具體細節。
RPC允許開發人員使用函數調用的方式而非網絡細節的方式,簡化了網絡的復雜性,從而促進了將軟件分布在不同系統上的過程。
RPC的工作原理是允許一個程序(客戶端)直接調用另一臺機器(服務器)上的程序(函數)。客戶端發出的程序調用看似是本地的,但實際上是在遠程機器上運行的。當進行RPC調用時,調用參數會被打包并通過網絡傳輸到服務器,服務器會解包這些參數,執行所需的程序,并將結果返回給客戶端。
1.2? ?RPC工作過程
1.客戶端調用客戶端代理程序,并以常規方式傳遞參數,該客戶端程序位于客戶端自身地址空間中。
2.客戶端代理會將參數封裝到消息中。封裝過程包括將參數的表示轉換為標準格式,并將每一個參數復制到消息中。
3.客戶端代理將消息傳遞到傳輸層,傳輸層再將該消息發送到遠程服務器。在服務器端,傳輸層將消息傳遞給服務器代理,服務器代理會解包參數,并使用常規的調用機制調用所需的服務器例程。
4.當服務器程序執行完畢后,它會返回到服務器代理,然后由該代理將返回值整理成一條消息。
5.然后,服務器代理將消息傳遞給傳輸層。傳輸層將結果消息發送回客戶端傳輸層,而客戶端傳輸層再將該消息傳遞給客戶端代理。
6.客戶端代理會對返回參數進行解封裝處理,并將執行結果返回給調用者。
二、gRPC
2.1? ? gRPC概念
在 gRPC 里客戶端應用可以像調用本地對象一樣直接調用另一臺不同的機器上服務端應用的方法,使得您能夠更容易地創建分布式應用和服務。與許多 RPC 系統類似, gRPC也是基于以下理念:定義一個服務,指定其能夠被遠程調用的方法 (包含參數和返回類型)。在服務端實現這個接口,并運行一個 gRPC 服務器來處理客戶端調用。在客戶端擁有一個存根能夠像服務端一樣的方法。
2.2? ? gRPC的優勢
1.基于HTTP2長連接,創建高效、可靠的通信服務平臺
HTTP/2的優勢:
(1) 多路復用:引入幀和流的概念,在一個TCP連接中可以存在多條流,可以區分出多個request/response。下一個請求無需等待上一個響應返回即可發出。
(2) 服務器推送:減少了請求數量。服務端推送能把客戶端所需要的資源伴隨著請求頁面一起發送到客戶端,省去了客戶端重復請求的步驟。正因為沒有發起請求,建立連接等操作,所以靜態資源通過服務端推送的方式可以極大地提升速度
(3) 二進制分幀
(4) 首部壓縮:利用HPack實現頭部壓縮。HTTP/2可以維護一個字典,差量更新 HTTP 頭部,大大降低因頭部傳輸產生的流量。
gRPC則在此基礎上進行了開發,具有連接池功能、健康狀態管理、高效使用數據幀以及多路復用等特性。
2. 支持多種編程語言和平臺
C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java
3.使用Protocol Buffers作為接口定義語言(IDL),避免了數據格式不一致的問題。