轉載請註明出處:
gRPC 官方檔案中文版:http://doc.oschina.net/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
ProtoBuf(Protocol Buffers)是一種跨平臺、語言無關、可延伸的序列化結構資料的方法,可用於網路資料交換及儲存。
protoBuf 是一種Google開發的高效的二進位制資料交換格式,常用於不同程式語言之間的資料通訊。
在序列化結構化資料的機制中,ProtoBuf是靈活、高效、自動化的,相對常見的XML、JSON,描述同樣的資訊,ProtoBuf序列化後資料量更小 (在網路中傳輸消耗的網路流量更少)、序列化/反序列化速度更快、更簡單。
一旦定義了要處理的資料的資料結構之後,就可以利用ProtoBuf的程式碼生成工具生成相關的程式碼。只需使用 Protobuf 對資料結構進行一次描述,即可利用各種不同語言(proto3支援C++, Java, Python, Go, Ruby, Objective-C, C#)或從各種不同流中對你的結構化資料輕鬆讀寫。
在開發 gRPC 應用程式時,先要定義服務介面,其中應包含如下資訊:消費者消費服務的方式、消費者能夠遠端呼叫的方法以及呼叫這些方法所使用的引數和訊息格式等。在服務定義中所使用的語言叫作介面定義語言(interface definition language,IDL)。
藉助服務定義,可以生成伺服器端程式碼,也就是伺服器端骨架 (這裡的「骨架」和「存根」都是代理。伺服器端代理叫作「骨架」(skeleton),使用者端代理叫作「存根」(stub)。),它通過提供低層級的通訊抽象簡化了伺服器端的邏輯。同時,還可以生成使用者端程式碼,也就是使用者端存根,它使用抽象簡化了使用者端的通訊,為不同的程式語言隱藏了低層級的通訊。就像呼叫本地函數那樣,使用者端能夠遠端呼叫我們在服務介面定義中所指定的方法。底層的 gRPC 框架處理所有的複雜工作,通常包括確保嚴格的服務契約、資料序列化、網路通訊、認證、存取控制、可觀察性等。
Protocol Buffers 是一種輕便高效的資料序列化框架,可以將結構化資料序列化為二進位制格式,以便於網路傳輸和儲存。通過定義資料結構的 .proto 檔案,可以使用 Protocol Buffers 編譯器生成各種程式語言的序列化和反序列化程式碼。Protocol Buffers 的優點是序列化後的資料大小遠小於 XML 和 JSON,並且序列化和反序列化的速度也非常快。
gRPC 是一種基於 HTTP/2 協定的高效能、開源的遠端過程呼叫(RPC)框架。gRPC 使用 Protocol Buffers 作為其預設的資料序列化協定,可以快速地生成使用者端和伺服器端的程式碼,並且支援多種程式語言。gRPC 的核心特性包括:高效能、雙向流、流控制、多種程式語言支援、易於擴充套件等。
gRPC 和 Protocol Buffers 是相互關聯的,Protocol Buffers 提供了資料序列化和反序列化的功能,而 gRPC 則在此基礎上實現了高效能、跨語言、易擴充套件的遠端過程呼叫框架。