gRPC设计动机和原则
gRPC | Microsoft Docs https://docs.microsoft.com/zh-cn/dotnet/architecture/cloud-native/grpc
什么是 gRPC?
gRPC 是一种新式的高性能框架,它发展了由来已久的远程过程调用协议。 从应用程序层面来看,gRPC 简化了客户端和后端服务之间的消息传递。 gRPC 源自 Google,是云原生产品服务的云原生计算基础 (CNCF) 生态系统的一部分,并且是开放源代码的。 CNCF 将 gRPC 视为培育中的项目。 培育意味着最终用户会在生产应用程序中使用该技术,该项目有大量的贡献者。
典型的 gRPC 客户端应用将公开实现业务操作的本地进程内函数。 在此之下,该本地函数会在远程计算机上调用另一个函数。 看起来是本地调用,实际上变成了对远程服务的透明进程外调用。 RPC 管道对计算机之间点到点网络通信、序列化和执行进行抽象化。
在云原生应用程序中,开发人员在工作中通常会处理不同的编程语言、框架和技术。 这种互操作性使消息协定和跨平台通信所需的管道变得复杂。 gRPC 提供“统一水平层”来对此类问题进行抽象化。 开发人员在本机平台中编写专注于业务功能的代码,而 gRPC 会处理通信管道。
gRPC 在最常用的开发堆栈(包括 Java、JavaScript、C#、Go、Swift 和 NodeJS)中提供全面的支持。
gRPC 的优势
gRPC 使用 HTTP/2 作为传输协议。 虽然与 HTTP 1.1 也能兼容,但 HTTP/2 具有许多高级功能:
- 用于数据传输的二进制组帧协议 - 与 HTTP 1.1 不同,HTTP 1.1 是基于文本的。
- 对通过同一连接发送多个并行请求的多路复用支持 - HTTP 1.1 将处理限制为一次处理一个请求/响应消息。
- 双向全双工通信,用于同时发送客户端请求和服务器响应。
- 内置流式处理,支持对大型数据集进行异步流式处理的请求和响应。
- 减少网络使用率的标头压缩。
gRPC 是轻量型且高性能的。 其处理速度可以比 JSON 序列化快 8 倍,消息小 60% 到 80%。 在 Microsoft Windows Communication Foundation (WCF) 中,gRPC 的性能超过经过高度优化的 NetTCP 绑定的速度和效率。 与偏向于 Microsoft 堆栈的 NetTCP 不同,gRPC 是跨平台的。
协议缓冲区
gRPC 采用名为协议缓冲区的开放源代码技术。 它们提供极为高效且不受平台影响的序列化格式,用于序列化服务相互发送的结构化消息。 开发人员使用跨平台接口定义语言 (IDL) 为每个微服务定义服务协定。 该协定作为基于文本的 .proto
文件实现,描述了每个服务的方法、输入和输出。 同一合同文件可用于基于不同开发平台构建的 gRPC 客户端和服务。
Protobuf 编译器 protoc
使用 proto 文件为目标平台生成客户端和服务代码。 该代码包括以下组成部分:
- 由客户端和服务共享的强类型对象,表示消息的服务操作和数据元素。
- 一个强类型基类,具有远程 gRPC 服务可以继承和扩展的所需网络管道。
- 一个客户端存根,其中包含调用远程 gRPC 服务所需的管道。
运行时,每条消息都序列化为标准 Protobuf 表示形式,并在客户端和远程服务之间交换。 与 JSON 或 XML 不同,Protobuf 消息被序列化为经过编译的二进制字节。
Microsoft 体系结构站点提供的适用于 WCF 开发人员的 gRPC 一书深入介绍 gRPC 和协议缓冲区。
https://mp.weixin.qq.com/s/NMIIa0W722zo_AxCqASc0g