天天看點

rpc架構之gRPC 學習 - hello world

rpc架構之gRPC 學習 - hello world

​​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

還是按老套路,把服務涉及的對象定義、接口定義抽象出來,下面是項目結構圖:

rpc架構之gRPC 學習 - hello world

pom.xml的内容如下:

rpc架構之gRPC 學習 - hello world
rpc架構之gRPC 學習 - hello world

View Code

demo_service_dto.proto内容如下:

rpc架構之gRPC 學習 - hello world
rpc架構之gRPC 學習 - hello world

注:grpc要求protobuf必須使用3.0以上版本

demo_service.proto内容如下:

rpc架構之gRPC 學習 - hello world
rpc架構之gRPC 學習 - hello world

mvn install 後,會自動在target下生成相應的java class類

rpc架構之gRPC 學習 - hello world

二、grpc-server

pom.xml檔案如下:

rpc架構之gRPC 學習 - hello world
rpc架構之gRPC 學習 - hello world

先對服務接口提供實作:

和前面​​thrift​​、​​avro​​的helloworld一樣,這裡的實作隻是意思一下,友善測試而已。

grpc的server端是基于Netty的(當然還有OKHttp的實作,詳情見github項目首頁),下面是server端的代碼:

三、grpc-client

pom.xml内容:

rpc架構之gRPC 學習 - hello world
rpc架構之gRPC 學習 - hello world

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)略差。

作者:​​菩提樹下的楊過​​