一、gRPC简介
gRPC(Remote Produce Call)是google开发的一个高性能、开源的通用的RPC框架。
二、gRPC特点
高性能:
基准测试:
在Java到Java的通信中,使用Protobuf能够在25毫秒内处理5万个对象实例,而JSON需要150毫秒,性能是6倍(AuthO的基准)
gRPC速度快了10倍(go基准测试)
gRPC速度快10倍(ASP.NET Core WebAPI基准测试)
Protocol buffers
gRPC默认使用Protocol buffers作为接口定义语言,protocol buffers是google用于序列化结构化数据的语言中立、平台中立、可扩展,相比XML,它更小、更快、更简单。
protocol,json.xml对比
Http/2:
特点:Header压缩、多路复用、使用二进制格式传输(http 1.x文本格式)、服务器主动推送,减少请求的延迟。
帧:HTTP/2数据通信的最小单位消息:指HTTP/2中逻辑上的HTTP消息。例如请求和响应等,消息由一个或多个帧组成。
流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有一个唯一的整数ID。
http1.1与http2对比 :Akamai
开源:
gitee:https://gitee.com/mirrors/grpc-framework
github:https://github.com/grpc/grpc
C#包:https://github.com/grpc/grpc/tree/master/src/csharp
通用:
支持:C,C++,Node.js,Python,Ruby,Objective-C,PHP,C#,go,java
三、API类型
一元:rpc GetFeature(Point) returns (Feature){} 特点:传入一个对象,返回一个对象
客户端流:rpc RecordRoute(stream Point) returns (RouteSummary){} 特点:传入多个对象,返回一个对象
服务端流:rpc ListFeatures(Rectangle) returns (stream Feature){} 特点:传入一个对象,返回多个对象
双向流:rpc RouteChat(stream RouteNote) returns(stream RouteNote){} 特点:传入多个对象,返回多个对象
四、RPC架构
RPC工作原理
五、gRPC使用场景
1.低延迟,高可用的分布式系统
2.移动端与云服务端的通讯
3.使用protobuf,独立语言的协议,支持多语言之间的通讯
4.可以分层扩展,如:身份验证,负载均衡,日志记录,监控等
六、Q&A
1.RPC和http的区别
最本质区别,RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,HTTP协议是在传输协议TCP之上的。
2.gRPC,Http/2,ProtoBuf三者之间有什么区别
gRPC是一种通信框架,http/2是通信协议,gRPC是基于HTTP/2协议标准而设计。ProtoBuf是由Google开发的一种数据序列化协议(类似xml,json),gRPC使用ProtoBuf来定义服务。