什么是gRPC?
2024-03-04
gRPC是一个现代开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并支持负载平衡、跟踪、运行状况检查和身份验证。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。
gRPC来源
2015年,谷歌开源了他们的项目,该项目最终被称为gRPC。但gRPC中的“g”实际上代表什么?很多人可能认为这是为了谷歌,因为谷歌制造了它,但它没有。谷歌更改了每个版本的“g”的含义,以至于他们甚至制作了一个README来列出所有含义。
gRPC协议架构
gRPC是一种用于实现RPC API的技术。由于gRPC是开源框架,通信双方都基于该框架进行二次开发,从而使得通信双方聚焦在业务,无需关注由gRPC软件框架实现的底层通信。如下图,DATA部分即为业务层面内容,DATA下面所有的信息都由gRPC进行封装。
什么是gRPC ProtoBuf?
gRPC ProtoBuf是gRPC协议的接口描述语言,是一种与语言无关、平台无关、扩展性好的用于通信协议、数据存储的序列化结构数据格式。gRPC ProtoBuf编码格式也称为GPB(Google Protocol Buffers)编码格式。GPB提供了一种灵活、高效、自动序列化结构数据的机制。GPB与XML、JSON编码类似,也是一种编码方式,但不同的是,它是一种二进制编码,性能好,效率高。
gRPC还提供什么?
- 元数据
- 流播放
- 拦截器
- 负载平衡
- 取消通话
gRPC VS REST?
REST(Representational State Transfer)表征状态转移,是一种软件架构风格,用于指导WEB架构的设计和开发。REST同样为管理和配置网络设备提供了一种API接口设计的方法。gRPC与REST两者的主要差异如下:
- REST遵循基于HTTP 1.1的请求-响应通信模型,而gRPC遵循基于HTTP 2.0的客户端-响应通信模型。HTTP 2.0相对于HTTP 1.1,在速度上有着绝对的优势。虽然REST也可以基于HTTP 2.0进行数据传输,但是为了兼容HTTP 1.1方式,导致其没有充分利用HTTP 2.0的优势。
- 几乎所有的浏览器都支持REST,而支持gRPC的浏览器非常有限。这是REST相对于gRPC的主要优势。
- REST使用JSON或XML编码格式承载数据,而gRPC默认使用ProtoBuf(Protocol Buffers)编码格式承载数据。ProtoBuf是二进制的,是以二进制数据进行传输,而JSON或XML编码格式以文本形式传输,所以在传输速率上gRPC更具有优势。
- REST不提供内置代码生成功能,需要使用Swagger等工具生成API请求代码。而gRPC具有protoc编译器,具有代码生成功能,而且protoc编译器与多种编程语言兼容。
gRPC VS SOAP?
功能 | gRPC | SOAP |
---|---|---|
协定 | 必需 (.proto ) | 必须(.xml) |
协议 | HTTP/2 | HTTP |
Payload | Protobuf(小型,二进制) | XML(大型,人工可读取) |
规定性 | 严格规范 | 严格规范 |
流式处理 | 客户端、服务器,双向 | 客户端、服务器 |
浏览器支持 | 无(需要 grpc-web) | 是 |
安全性 | 传输 (TLS) | WS-security规范 |
客户端代码生成 | 是 | 三方工具均支持 |