Fork me on GitHub

谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC

Google 刚刚开源了grpc,  一个基于HTTP2 Protobuf 高性能、开源、通用的RPC框架Protobuf 本身虽然提供了RPC  的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现,不过我在项目中采用WCF搭配Protobuf是一个很不错的RPC实现,Google这个框架是是基于HTTP2的,这是他有特色的地方,带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body Header 压缩等机制,grpc 基于此可以提供比较高效的实现。目前FirefoxChromeSafariOperaiOSSafariAndroidChromeWindows 8上的IE 11都已经支持HTTP/2Windows 10预览版自带的浏览器也支持它。ApacheWindows 10上的IISNginx都已经实现了SPDY 3.14(这就是HTTP/2),剩下的工作就是网站管理员们去升级服务器软件了。

grpc 所使用的依赖都比较新,如protbuf 需要3.0 版本, c++ 使用了c++11, Java 实现中的netty 需要5.0  版本, HTTP2 也是刚刚定稿。现阶段官方支持C++JAVAPython等三种编程语言并以c 共享库的方式来支持Node.js, Python, Ruby, Objective-C, PHP C# 语言 (由此看来,c++, Java golang Google 有着一等公民的地位)。其中Java 语言的实现亦可以用于Android 客户端,Objective-C 的实现主要针对IOS 客户端。

重点看了一下C# 的实现(https://github.com/grpc/grpc/tree/master/src/csharp ),目前代码只能在Mono下运行,主要是windows下的GRPC C core库的P/Invoke包装还没有完成,这里也可以看出Google的主要开发环境是Linux,对Mono的支持还不错,这点对同样是互联网公司国内同行很有借鉴意义。

posted @ 2015-02-27 21:36 张善友 阅读(...) 评论(...) 编辑 收藏