@Rays
2016-08-26T10:00:48.000000Z
字数 1156
阅读 1779
摘要:
Google终于发布了广受关注的gRPC 1.0版。作为平台无关的RPC系统,gRPC的特性包括:支持多达十种常用的语言,使用ProtoBuf编码消息提高性能,支持使用HTTP/2的单向或双向的安全通信等。
作者:Abel Avram
正文:
鉴于gRPC已进入稳定版分支,并对应用于生产中准备就绪,Google发布了gRPC 1.0。
gRPC源于被称为Stubby的Google内部项目,早期是用于一些google内部服务间的通信。18个月前Google开源了gRPC框架,希望借此gRPC能被更广泛地采纳,并在调用Google所提供的服务时、通过互联网与其它服务通信时或在自身产品内部应用gRPC。
gRPC是与平台无关的RPC系统,它使用Protocol Buffers(ProtoBuf) IDL定义终端服务和所传输的消息负载,进而可为多种语言生成存根进程(stub)。当前在Linux、Mac和Windows平台上,gRPC支持多达十种语言,分别是:C、 C++、 C#、 Go、Java (包括Java/Android)、 Node.js、 Objective-C、 PHP、 Python和 Ruby。gRPC原生地使用C、Go和Java语言编程实现,通过包装C函数库提供给其它语言使用。为了显示各种gRPC实现的通信延迟情况对比,Google给出了在同一数据中心中不同虚拟机实例间的通信性能精要报告。对于单一的同步安全消息,报告显示作为基准的Netperf的延迟大约为100微秒,而C++、Java和C#语言实现的延迟大约在200到300微秒,Ruby、Python和Node.js语言实现的延迟分别在700微秒、900微秒和1,100微秒左右。
gRPC将需传输的消息使用Protocol Buffers 3.0序列化为二进制格式。相对于文本格式而言,ProtoBuf方式可提供更优的性能。据Google工程师Kelsey Hightower介绍,ProtoBuf编码的消息比JSON格式消息的大小降低了一半,而序列化和反序列化所用的时间仅为后者的三分之一。
与单一RPC中一个请求紧跟着一个响应的方式不同,gPRC使用HTTP/2提供客户和服务器间的单向或双向流。gRPC支持同步通信和异步通信,及SSL/TLS和OAuth2(使用Google API)方式的认证。
gRPC支持以CocoaPods、gem、Gradle、Maven、npm、NuGet、pecl、pip或Docker镜像等方式提供二进制文件,这简化了安装过程。
据Google宣称,Cisco、CoreOS、Juniper、Netflix和Square等企业内部正在使用gRPC。