化茧成蝶:Go在FreeWheel服务化中的实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

gRPC与Protocol Buffer

如果你熟悉Thrift,那这部分内容你可以直接跳过,以后面的内容来说,你可以认为Thrift与gRPC做的是相同的事情。

要介绍gRPC,首先要知道Protocol Buffer(以下简称Protobuf)是什么。

Protobuf是谷歌公布的一种与平台、编程语言无关的数据序列化和反序列化机制,通过官方对多种语言提供的库和编译器,可以实现跨语言的数据传递,目前支持的编程语言有Java、C++、Python、Ruby、PHP、Go等。目前的主要版本有Protobuf2和Protobuf3。下文讨论中涉及的是Protobuf3。

gRPC也是谷歌公司公布的技术,是一个高性能的、基于HTTP/2协议的RPC框架,默认以Protobuf作为数据传输方案。gRPC也提供了对多种编程语言的支持,比如Java、C++、Python、Ruby、Go等。

换句话说,Protobuf首先解决“如何在不同语言之间传递数据”的问题,而gRPC在这个基础之上,解决了“如何跨语言进行RPC调用”的问题。

通过gRPC,你可以很方便地实现一个Client端和Server端,而它们可能是通过两种不同的语言实现的。

下文中,我将介绍两个我们在实际使用gRPC过程中遇到的问题,以及我们是如何考虑的。