一. 简介
1.什么是RPC
RPC指远程调用(即要像调用本地方法一样调用远程方法). eg: 两台机器,A 机器上的程序要调用 B 机器上某程序提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
常见的有:Thrift、gRPC
2.什么是gRPC
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。
GitHub地址:https://github.com/grpc
3.gRPC的优点
(1).现代高性能轻量级 RPC 框架。
(2).协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。
(3).可用于多种语言的工具,以生成强类型服务器和客户端。
(4).支持客户端、服务器和双向流式处理调用。
(5).使用 Protobuf 二进制序列化减少对网络的使用。
4.gRPC的适用范围
(1).效率至关重要的轻量级微服务。
(2).需要多种语言用于开发的 Polyglot 系统。
(3).需要处理流式处理请求或响应的点对点实时服务。
注:Azure 应用服务或 IIS 当前不支持 ASP.NET Core gRPC。 Http.Sys 的 HTTP/2 实现不支持 gRPC 依赖的 HTTP 响应尾随标头。
二. 详解
1. gRPC和WebApi对比
2. gRPC的优势
(1). 性能
Protobuf 序列化产生的有效负载较小,这在移动应用等带宽有限的方案中很重要。
gRPC 专为 HTTP/2(HTTP 的主要版本)而设计,与 HTTP 1.x 相比,HTTP/2 具有巨大性能优势:
HTTP/2 协议在发送和接收方面均紧凑且高效。
队头阻塞。
许多请求类型(包括使用 JSON 的 HTTP API)都可以使用 HTTP/2,并受益于其性能改进。
(2). 代码生成
通过此文件,gRPC 框架编码生成服务基类、消息和完整的客户端。
无需编写客户端可在具有许多服务的应用程序中节省大量开发时间。
(3). 严格规范
开发人员为 URL、HTTP 谓词和响应代码的最佳格式争论不休。
gRPC 消除了争论并为开发人员节省了时间,因为 gRPC 在各个平台和实现中都是一致的。
(4). 流式处理
gRPC 服务支持所有流式传输组合:
A. 一元(无流式传输)
B. 服务器到客户端流式传输
C. 客户端到服务器流式传输
D. 双向流式传输
(5). 截止时间、超时和取消
例如,服务器可能会在超时后取消正在进行的 gRPC/HTTP/数据库请求。
通过 gRPC 子调用传播截止时间和取消有助于强制执行资源使用限制。
3. gRPC的劣势
例如,浏览器不允许调用方要求使用 HTTP/2,也不提供对 HTTP/2 基础框架的访问。
gRPC-Web 客户端调用代理,代理将根据 gRPC 请求转发到 gRPC 服务器。
不支持客户端和双向流式传输,并且对服务器流式传输的支持有限。
4. gRPC适用场景
gRPC 对于效率至关重要的轻量级微服务非常有用。
gRPC 服务可以实时推送消息而无需轮询。
(3). 多语言环境:gRPC 工具支持所有常用的开发语言,因此,gRPC 是多语言环境的理想选择。
gRPC 消息始终小于等效的 JSON 消息。
5. gRPC备用方案
在以下方案中,建议使用其他框架取代 gRPC:
gRPC-Web 可以提供浏览器支持,但它具有局限性并引入了服务器代理。
具有持久性连接的概念,并内置对广播消息的支持。
管道是一种快速、轻便的通信方法。
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。