【龍田百科】淺析gRPC技術,遠程過程調用的優質選擇
發布時間:2024-03-27
随着網絡複雜(zá)化,服務之間遠程調用的普遍使用,對遠程調用工(gōng)具的需求也越來越迫切,gRPC協議應運而生(shēng)。
Google遠程過程調用(Google Remote Procedure Call,gRPC)是基于HTTP 2.0傳輸層協議承載的高性能開(kāi)源RPC軟件框架,爲管理和配置網絡設備提供了一(yī)種API接口設計的方法。gRPC提供了多種編程語言,如C、Java、golong、python等。
gRPC可以作爲數據傳輸協議與Telemetry技術配合使用,可實時、高速、精确的監控網絡設備的運行狀态。此外(wài),網絡設備提供了一(yī)種基于gRPC方式來管理設備的方法,包括配置、查詢和能力獲取三種方法。這些方法是通過設備和采集器對接,實現采集設備數據的功能。

 

gRPC vs REST

 

 

REST(Representational State Transfer)表征狀态轉移,是一(yī)種軟件架構風格,用于指導WEB架構的設計和開(kāi)發。REST同樣爲管理和配置網絡設備提供了一(yī)種API接口設計的方法。gRPC與REST兩者的主要差異如下(xià):
  • REST遵循基于HTTP 1.1的請求-響應通信模型,而gRPC遵循基于HTTP 2.0的客戶端-響應通信模型。HTTP 2.0相對于HTTP 1.1,在速度上有着絕對的優勢。雖然REST也可以基于HTTP 2.0進行數據傳輸,但是爲了兼容HTTP 1.1方式,導緻其沒有充分(fēn)利用HTTP 2.0的優勢。
  • 幾乎所有的浏覽器都支持REST,而支持gRPC的浏覽器非常有限。這是REST相對于gRPC的主要優勢。
  • REST使用JSON或XML編碼格式承載數據,而gRPC默認使用ProtoBuf(Protocol Buffers)編碼格式承載數據。ProtoBuf是二進制的,是以二進制數據進行傳輸,而JSON或XML編碼格式以文本形式傳輸,所以在傳輸速率上gRPC更具有優勢。
  • REST不提供内置代碼生(shēng)成功能,需要使用Swagger等工(gōng)具生(shēng)成API請求代碼。而gRPC具有protoc編譯器,具有代碼生(shēng)成功能,而且protoc編譯器與多種編程語言兼容。
gRPC的工(gōng)作原理
1.gRPC協議框架
gRPC是一(yī)種用于實現RPC API的技術。由于gRPC是開(kāi)源框架,通信雙方都基于該框架進行二次開(kāi)發,從而使得通信雙方聚焦在業務,無需關注由gRPC軟件框架實現的底層通信。如下(xià)圖,DATA部分(fēn)即爲業務層面内容,DATA下(xià)面所有的信息由gRPC進行封裝。

 

gRPC協議架構
2.gRPC支持的操作
設備在網絡架構裏支持Dial-in和Dial-out兩種對接模式。
Dial-in模式:設備作爲gRPC服務器,采集器作爲gRPC客戶端。由采集器主動向設備發起gRPC連接并獲取需要采集的數據信息或下(xià)發配置。Dial-in模式适用于小(xiǎo)規模網絡和采集器需要向設備下(xià)發配置的場景。
Dial-in模式支持以下(xià)操作:
  • Subscribe操作:高速采集設備的接口流量統計、CPU和内存等數據信息。當前僅支持基于Telemetry技術的Subscribe操作。
  • Get操作:獲取設備運行狀态和運行配置。當前僅支持基于gNMI(gRPC Network Management Interface)規範的Get操作。
  • Capabilities操作:獲取設備能力數據。當前僅支持基于gNMI規範的Capabilities操作。
  • Set操作:向設備下(xià)發配置。當前僅支持基于gNMI規範的Set操作。
Dial-out模式:設備作爲gRPC客戶端,采集器作爲gRPC服務器。設備主動和采集器建立gRPC連接,将設備上配置的訂閱數據推送給采集器。Dial-out模式适用于網絡設備較多的情況下(xià),由設備主動向采集器提供設備數據信息。Dial-out模式隻支持基于Telemetry技術的Subscribe操作。
3.gRPC交互過程
如下(xià)圖,gRPC采用客戶端和服務器模型,以網絡設備爲gRPC客戶端,采集器爲gRPC服務器爲例,說明gRPC的交互過程:
  • 設備在開(kāi)啓gRPC功能後作爲gRPC客戶端,采集器作爲gRPC服務器。
  • 設備會根據應用服務(如訂閱的事件)構建對應數據的格式(GPB/JSON),通過ProtoBuf(Protocol Buffers)編寫Proto文件。然後,設備與采集器建立gRPC通道,通過gRPC協議向采集器發送請求消息。
  • 采集器收到請求消息後,會通過ProtoBuf解譯Proto文件,還原出事先定義好的數據結構,進行業務處理。
  • 采集器處理完數據後,需要使用ProtoBuf重新編譯應答數據,通過gRPC協議向設備發送應答消息。
  • 設備收到應答消息後,結束本次的gRPC交互。

簡單地說,設備主動和采集器建立gRPC連接,将設備上配置的訂閱數據推送給采集器。在整個gRPC交互的過程中(zhōng),設備和采集器都需要使用ProtoBuf來定義Proto文件。

gRPC交互過程

4.gRPC的應用

gRPC支持通過Telemetry技術實現訂閱功能(Subscribe操作)。Telemetry是一(yī)項遠程的從物(wù)理設備或虛拟設備上高速采集數據的技術。設備通過推模式(Push Mode)周期性地主動向采集器上送設備的接口流量統計、CPU和内存數據等信息。
如下(xià)圖所示,網絡設備和網絡管理系統建立gRPC連接後,網絡管理系統可以訂閱設備上指定模塊的數據信息。Telemetry有動态訂閱和靜态訂閱兩種方式,動态訂閱基于Dial-in模式建立,靜态訂閱基于Dial-out模式建立。

 

基于gRPC的Telemetry技術

 

Telemetry的實現流程:
1).用戶定義Telemetry靜态訂閱或Telemetry動态訂閱。 
  • Telemetry靜态訂閱:在huawei-grpc-dialout.proto文件中(zhōng)定義。
  • Telemetry動态訂閱:在huawei-grpc-dialin.proto文件中(zhōng)定義。

2).用戶将采集到的信息通過GPB或JSON格式進行編碼,在huawei-telemetry.proto文件裏定義采樣路徑、采樣時間戳等重要信息。

  • GPB編碼時,huawei-telemetry.proto文件中(zhōng)的encoding字段爲Encoding_GPB(值爲0),data_gpb字段承載GPB編碼格式的采樣數據,data_str字段爲空。
  • JSON編碼時,huawei-telemetry.proto文件中(zhōng)的encoding字段爲Encoding_JSON(值爲1),data_str字段承載JSON編碼格式的采樣數據,data_gpb字段爲空。

3).設備傳輸數據到采集器,解碼數據并分(fēn)析結果。

  • huawei-telemetry.proto文件中(zhōng)data_gpb字段内容需要相應的業務proto文件進行解碼,由huawei-telemetry.proto文件中(zhōng)的sensor_path字段标識對應哪個具體(tǐ)的業務proto文件,例如,當sensor_path取值爲huawei-ifm:ifm/interfaces/interface時,其數據結構定義在huawei-ifm.proto文件中(zhōng)。
  • 當采用純JSON編碼格式(編碼層和數據模型層均爲JSON編碼格式),用戶隻需要對huawei-grpc-dialout.proto文件或huawei-grpc-dialin.proto文件進行解碼。當采用混合JSON編碼格式(編碼層爲GPB編碼格式,數據模型層爲JSON編碼格式),用戶隻需要對huawei-grpc-dialout.proto文件或huawei-grpc-dialin.proto文件和huawei-telemetry.proto文件進行解碼,不需要相應的業務proto文件

什麽是gRPC ProtoBuf
 

gRPC ProtoBuf是gRPC協議的接口描述語言,是一(yī)種與語言無關、平台無關、擴展性好的用于通信協議、數據存儲的序列化結構數據格式。gRPC ProtoBuf編碼格式也稱爲GPB(Google Protocol Buffers)編碼格式。GPB提供了一(yī)種靈活、高效、自動序列化結構數據的機制。GPB與XML、JSON編碼類似,也是一(yī)種編碼方式,但不同的是,它是一(yī)種二進制編碼,性能好,效率高。

目前,GPB包括v2和v3兩個版本,設備當前支持的GPB版本是v3。

GPB在gRPC的框架中(zhōng)主要有三個作用:

 

  • 定義數據結構
  • 定義服務接口
  • 通過序列化和反序列化提升傳輸效率

 

什麽是Proto文件

 

gRPC協議用GPB編碼格式承載數據,GPB編碼格式的文件名後綴爲.proto,即爲Proto文件。
GPB通過“.proto”文件描述編碼使用的字典,即數據結構描述。采集器可以利用Protoc等工(gōng)具軟件根據“.proto”文件自動生(shēng)成代碼(例如java代碼),然後用戶基于自動生(shēng)成的代碼進行二次開(kāi)發對獲取到的數據進行解析,從而實現與設備的數據對接。
Proto文件包含公共Proto文件和業務數據Proto文件。
公共Proto文件
Telemetry提供3個公共的proto文件,支持數據上送和訂閱功能:
  • huawei-grpc-dialout.proto文件:定義了設備作爲gRPC客戶端對外(wài)推送數據。
  • huawei-grpc-dialin.proto文件:定義了設備作爲gRPC服務端對外(wài)推送數據。
  • huawei-telemetry.proto文件:定義了Telemetry采樣數據上送時的數據頭,包括采樣路徑,采樣時間戳等重要信息。
業務數據Proto文件
設備提供多個業務數據Proto文件,用于定義具體(tǐ)業務數據的GPB編碼,采集器側需要根據實際要監控的業務選擇對應的proto文件。
一(yī)個簡單的Proto文件示例:
Telemetry靜态訂閱功能:設備作爲gRPC客戶端,采集器作爲gRPC服務端,由設備主動發起到采集器的連接,進行數據采集上送。