
grpc是google在github于2015年開源的一款RPC架構,雖然protobuf很早google就開源了,但是google一直沒推出正式的開源架構,導緻github上基于protobuf的rpc五花八門,國内比較著名的有百度的sofa-pbrpc,但是遺憾的是soft-pbrpc沒有對應的java實作版本。rgpc還有一個獨立的官網:http://www.grpc.io/,目前已經支援的語言有 C, C++, Java, Go, Node.js, Python, Ruby, Objective-C, PHP 、 C#. grpc最大的特點是基于protobuf + http2 協定,http2協定雖然還未正式定稿,但從目前得知的内容來看,潛力巨大。下面是grpc基本的hello world的示例:
一、grpc-contract
還是按老套路,把服務涉及的對象定義、接口定義抽象出來,下面是項目結構圖:
pom.xml的内容如下:
View Code
demo_service_dto.proto内容如下:
注:grpc要求protobuf必須使用3.0以上版本
demo_service.proto内容如下:
mvn install 後,會自動在target下生成相應的java class類
二、grpc-server
pom.xml檔案如下:
先對服務接口提供實作:
和前面thrift、avro的helloworld一樣,這裡的實作隻是意思一下,友善測試而已。
grpc的server端是基于Netty的(當然還有OKHttp的實作,詳情見github項目首頁),下面是server端的代碼:
三、grpc-client
pom.xml内容:
Client端代碼:
在筆記本測試的結果:
Will try to ping a ...
ping: pong => a
rgpc 100000 次NettyServer調用,耗時:36409毫秒,平均2746次/秒
基本上在每秒3k次的數量級,相對thrift(1w+)、avro(5k+)來講,目前的差距還是很明顯的,但是新事物成長總是需要時間,再給google一段時間,相信以後會讓大家感到驚豔的。
在序列化方面,也做了一個跟之前thrift、avro類似的測試:
輸出:
Protobuf 3.0 二進制序列後的byte數組長度:4
1 - 1
在2進制序列化後的大小方面,protobuf 3大體跟thrift的TCompactProtocal(大小5)接近,比avro(大小2)略差。
作者:菩提樹下的楊過