grpc

176 阅读2分钟

简介

grpc是由goole开发,语言中立,平台中立,开源的远程过程调用框架。基于http2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。 image.png

常用rpc框架

image.png

grpc特性

  • 强大的IDL grpc使用protobuf来定义服务,protobuf是由goole开发的一种数据序列化协议(类似XML\JSON\HESSIAN)。protobuf能够将数据进行序列化,并广泛应用在数据存储,通信协议等方面。

  • 支持多语言 能够基于语言自动生成客户端和服务端功能库。例如:c版本grpc,java版本的grpc-java和go版本grpc-go

  • http2 基于http2标准设计,所以相对于其他rpc框架,grpc带来了更多强大功能,如双向流,头部压缩,多复用请求等。这些功能带来了好处,如节省带宽,降低TCP链接次数,节省cpu使用和延长电池寿命等。

protobuf

介绍

protocol buffers 是一种与语言、平台无关,可扩展的序列化结构化数据的方法。常用于通信协议,数据存储等等。比JSON、XML来说,更小、更快、更简单。

语法

image.png

  1. syntax用于声明proto3的语法,如果不声明默认使用proto2语法。
  2. 定义 SearchService RPC 服务,其包含 RPC 方法 Search,入参为 SearchRequest 消息,出参为 SearchResponse 消息
  3. 定义 SearchRequestSearchResponse 消息,前者定义了三个字段,每一个字段包含三个属性:类型、字段名称、字段编号
  4. Protobuf 编译器会根据选择的语言不同,生成相应语言的 Service Interface Code 和 Stubs

数据类型

image.png

v2与v3区别

  • 删除原始值字段的字段存在逻辑
  • 删除 required 字段
  • 删除 optional 字段,默认就是
  • 删除 default 字段
  • 删除扩展特性,新增 Any 类型来替代它
  • 删除 unknown 字段的支持
  • 新增 JSON Mapping
  • 新增 Map 类型的支持
  • 修复 enum 的 unknown 类型
  • repeated 默认使用 packed 编码
  • 引入了新的语言实现(C#,JavaScript,Ruby,Objective-C)

与XML比较

  • 更简单
  • 数据描述文件只需原来的1/10至1/3
  • 解析速度是原来的20倍至100倍
  • 减少了二义性
  • 生成了更易使用的数据访问类