gRPC 是 Google 开源的高性能 RPC 框架,基于 HTTP/2 和 Protobuf 构建,具有以下核心特性和优势:
核心特性:
1. 基于 HTTP/2
- 多路复用:单个 TCP 连接可以同时发送多个请求,减少连接开销
- 二进制分帧:比 HTTP/1.x 的文本格式更高效
- 头部压缩:使用 HPACK 算法压缩头部,减少传输数据量
- 服务端推送:支持服务端主动推送数据
- 流式传输:支持单向流和双向流
2. 基于 Protobuf
- 高效序列化:二进制格式,序列化/反序列化速度快
- 强类型:通过 .proto 文件定义接口,编译时类型检查
- 跨语言:支持 10+ 种编程语言
- 向后兼容:字段编号机制保证版本兼容性
3. 四种服务模式
- 一元 RPC(Unary):客户端发送一个请求,服务端返回一个响应
- 服务端流式 RPC(Server Streaming):客户端发送一个请求,服务端返回流式响应
- 客户端流式 RPC(Client Streaming):客户端发送流式请求,服务端返回一个响应
- 双向流式 RPC(Bidirectional Streaming):客户端和服务端都可以发送流式数据
优势:
1. 高性能
- HTTP/2 多路复用减少连接开销
- Protobuf 二进制序列化效率高
- 支持流式传输,适合大数据场景
2. 低延迟
- 二进制协议减少解析时间
- 多路复用避免队头阻塞
- 连接复用减少握手开销
3. 跨语言支持
- 自动生成多种语言的客户端和服务端代码
- 统一的接口定义语言(IDL)
- 无缝集成不同语言的服务
4. 强类型和代码生成
- 编译时类型检查,减少运行时错误
- 自动生成代码,提高开发效率
- IDE 支持良好,开发体验佳
5. 流式通信
- 支持实时数据传输
- 适合聊天、推送、实时监控等场景
- 减少请求-响应的往返次数
6. 双向流支持
- 客户端和服务端可以同时发送数据
- 适合实时协作、游戏等场景
- 减少连接建立的开销
7. 生态系统完善
- 拦截器机制(Interceptor)
- 负载均衡
- 服务发现
- 链路追踪集成
适用场景:
- 微服务内部通信
- 实时数据流处理
- 跨语言服务调用
- 高性能要求的场景
- 需要流式通信的应用
代码示例:
protobuf// 定义服务 service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {} } // 定义消息 message HelloRequest { string name = 1; } message HelloReply { string message = 1; }