gRPC 官方文檔中文版
RPC 框架的目標就是讓遠程服務調用更加簡單、透明,其負責屏蔽底層的傳輸方式(TCP/UDP)、序列化方式(XML/Json)和通信細節。服務調用者可以像調用本地接口一樣調用遠程的服務提供者,而不需要關心底層通信細節和調用過程。
gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計。目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
在 gRPC 裏客戶端應用可以像調用本地對象一樣直接調用另一臺不同的機器上服務端應用的方法,使得您能夠更容易地創建分佈式應用和服務。與許多 RPC 系統類似,gRPC 也是基於以下理念:定義一個服務,指定其能夠被遠程調用的方法(包含參數和返回類型)。在服務端實現這個接口,並運行一個 gRPC 服務器來處理客戶端調用。在客戶端擁有一個存根能夠像服務端一樣的方法。
GRPC 的優點:
高兼容性、高性能、使用簡單
gRPC 的組成部分:
使用 http2 作爲網絡傳輸層
使用 protobuf 這個高性能的數據包序列化協議
通過 protoc gprc 插件生成易用的 SDK
2.protobuf序列化協議
Protobuf2 語法指南
https://colobu.com/2015/01/07/Protobuf-language-guide/
Protobuf3 語法指南
https://colobu.com/2017/03/16/Protobuf3-language-guide/
2.1 什麼是ProtoBuf
ProtoBuf(Protocol Buffers)是一種跨平臺、語言無關、可擴展的序列化結構數據的方法,可用於網絡數據交換及存儲。
protoBuf 是一種Google開發的高效的二進制數據交換格式,常用於不同編程語言之間的數據通信。
在序列化結構化數據的機制中,ProtoBuf是靈活、高效、自動化的,相對常見的XML、JSON,描述同樣的信息,ProtoBuf序列化後數據量更小 (在網絡中傳輸消耗的網絡流量更少)、序列化/反序列化速度更快、更簡單。
一旦定義了要處理的數據的數據結構之後,就可以利用ProtoBuf的代碼生成工具生成相關的代碼。只需使用 Protobuf 對數據結構進行一次描述,即可利用各種不同語言(proto3支持C++, Java, Python, Go, Ruby, Objective-C, C#)或從各種不同流中對你的結構化數據輕鬆讀寫。
2.2 ProtoBuf 協議的工作流程
接口定義語言(interface definition language,IDL)。
藉助服務定義,可以生成服務器端代碼,也就是服務器端骨架 (這裏的“骨架”和“存根”都是代理。服務器端代理叫作“骨架”(skeleton),客戶端代理叫作“存根”(stub)。),它通過提供低層級的通信抽象簡化了服務器端的邏輯。同時,還可以生成客戶端代碼,也就是客戶端存根,它使用抽象簡化了客戶端的通信,爲不同的編程語言隱藏了低層級的通信。就像調用本地函數那樣,客戶端能夠遠程調用我們在服務接口定義中所指定的方法。底層的 gRPC 框架處理所有的複雜工作,通常包括確保嚴格的服務契約、數據序列化、網絡通信、認證、訪問控制、可觀察性等。
3. grpc與protoBuf關係
Protocol Buffers 是一種輕便高效的數據序列化框架,可以將結構化數據序列化爲二進制格式,以便於網絡傳輸和存儲。通過定義數據結構的 .proto 文件,可以使用 Protocol Buffers 編譯器生成各種編程語言的序列化和反序列化代碼。Protocol Buffers 的優點是序列化後的數據大小遠小於 XML 和 JSON,並且序列化和反序列化的速度也非常快。
gRPC 是一種基於 HTTP/2 協議的高性能、開源的遠程過程調用(RPC)框架。gRPC 使用 Protocol Buffers 作爲其默認的數據序列化協議,可以快速地生成客戶端和服務端的代碼,並且支持多種編程語言。gRPC 的核心特性包括:高性能、雙向流、流控制、多種編程語言支持、易於擴展等。
gRPC 和 Protocol Buffers 是相互關聯的,Protocol Buffers 提供了數據序列化和反序列化的功能,而 gRPC 則在此基礎上實現了高性能、跨語言、易擴展的遠程過程調用框架。