Skip to content

Latest commit

 

History

History
42 lines (21 loc) · 2.5 KB

网络-grpc简介.md

File metadata and controls

42 lines (21 loc) · 2.5 KB

grpc 简介

REST 是一种灵活的体系结构样式,它定义了针对实体资源的 CRUD 操作。客户端通过请求/响应通信模型通过 HTTP 协议与资源交互。虽然 REST 得到了广泛的应用,但一种新的通信技术 gRPC 在云计算原生社区中获得了巨大的发展优势。

什么是 gRPC?

gRPC 是一个现代的高性能框架,它改进了由来已久的远程过程调用(RPC)协议。在应用程序级别,gRPC 优化了客户端和后端服务之间的消息传递。

gRPC 起源于谷歌,是开源和云本地计算基金会(CNCF)云本地产品生态系统的一部分。CNCF 认为 gRPC 是一个孵化项目。孵化意味着终端用户正在生产应用中使用该技术,并且该项目有大量的贡献者。

gRPC 优势

gRPC 使用 HTTP/2 作为其传输协议。HTTP/2 与 HTTP1.1 兼容,但具有许多高级功能:

  • 使用用于数据传输的二进制帧协议(与基于文本的 HTTP1.1 协议不同)

  • 多路复用来支持在同一连接上发送多个并行的请求(HTTP1.1 限制每次处理一条请求/响应消息)

  • 双向全双工通信,用于同时发送客户端请求和服务器响应

  • 内置流式处理,支持对大型数据集进行异步流式处理的请求和响应

  • 使用 Header 压缩来减少网络传输的数据量

gRPC 是轻量级,性能高,它可以比 JSON 序列化快 8 倍,消息体小 60-80%,同时也是跨平台的。

协议缓冲区 Protocol Buffers

gRPC 采用了一种称为协议缓冲区的开源技术。它提供了一种高效且与平台无关的序列化格式,用于序列化服务相互发送的结构体消息。

开发人员使用跨平台接口定义语言(IDL)为每个微服务定义服务契约。契约作为基于文本的 .proto 文件实现,描述了每个服务的方法体,输入和输出。同一个合同文件可用于在不同开发平台上构建的 gRPC 客户端和服务。

Protobuf 编译器 protoc 使用 proto 文件为目标平台生成客户端代码和服务端代码。该代码包括以下组件:

  • 由客户端和服务端共享的强类型对象,表示消息的服务操作和数据元素

  • 具有远程 gRPC 服务可以继承和扩展的所需网络管道的强类型基类

  • 包含调用 gRPC 服务所需管道的客户端存根

在运行时,每条消息被序列化为标准 Protobuf 表达,并在客户端和服务端之间交换。与 JSON 或 XML 不同,Protobuf 消息被序列化为已编译的二进制字节。