做转发赚钱的网站,宣传片拍摄脚本,小程序免费制作,一个空间能放几个网站性能
gRPC 消息使用 Protobuf#xff08;一种高效的二进制消息格式#xff09;进行序列化。 Protobuf 在服务器和客户端上可以非常快速地序列化。 Protobuf 序列化产生的有效负载较小#xff0c;这在移动应用等带宽有限的方案中很重要。
gRPC 专为 HTTP/2#xff08;HTTP…性能
gRPC 消息使用 Protobuf一种高效的二进制消息格式进行序列化。 Protobuf 在服务器和客户端上可以非常快速地序列化。 Protobuf 序列化产生的有效负载较小这在移动应用等带宽有限的方案中很重要。
gRPC 专为 HTTP/2HTTP 的主要版本而设计与 HTTP 1.x 相比HTTP/2 具有巨大性能优势
二进制组帧和压缩。 HTTP/2 协议在发送和接收方面均紧凑且高效。在单个 TCP 连接上多路复用多个 HTTP/2 调用。 多路复用可消除队头阻塞。
HTTP/2 不是 gRPC 独占的。 许多请求类型包括具有 JSON 的 HTTP API都可以使用 HTTP/2并受益于其性能改进。
应用
例如ETCT版本v2升级至v3中watch机制实现通过etcd v2 Watch机制实现中使用的是HTTP/1.x协议实现简单、兼容性好每个watcher对应一个TCP连接。client通过HTTP/1.1协议长连接定时轮询server获取最新的数据变化事件。
然而当你的watcher成千上万的时即使集群空负载大量轮询也会产生一定的QPSserver端会消耗大量的socket、内存等资源导致etcd的扩展性、稳定性无法满足Kubernetes等业务场景诉求。
etcd v3的Watch机制的设计实现并非凭空出现它正是吸取了etcd v2的经验、教训而重构诞生的。
在etcd v3中为了解决etcd v2的以上缺陷使用的是基于HTTP/2的gRPC协议双向流的Watch API设计实现了连接多路复用。
HTTP/2协议为什么能实现多路复用呢
在HTTP/2协议中HTTP消息被分解独立的帧Frame交错发送帧是最小的数据单位。每个帧会标识属于哪个流Stream流由多个数据帧组成每个流拥有一个唯一的ID一个数据流对应一个请求或响应包。通过以上机制HTTP/2就解决了HTTP/1的请求阻塞、连接无法复用的问题实现了多路复用、乱序发送。
代码生成
所有 gRPC 框架都为代码生成提供一流支持。 .proto 文件是 gRPC 开发的核心文件它定义 gRPC 服务和消息的协定。 通过此文件gRPC 框架生成服务基类、消息和完整的客户端。
通过在服务器和客户端之间共享 .proto 文件可以端到端生成消息和客户端代码。 客户端的代码生成消除了客户端和服务器上的消息重复并为你创建强类型客户端。 无需编写客户端可在具有许多服务的应用程序中节省大量开发时间。
严格规范
具有 JSON 的 HTTP API 没有正式规范。 开发人员为 URL、HTTP 谓词和响应代码的最佳格式争论不休。
gRPC 规范对 gRPC 服务必须遵循的格式进行了规定。 gRPC 消除了争论并为开发人员节省了时间因为 gRPC 在各个平台和实现中都是一致的。
流式处理
HTTP/2 为长期实时通信流提供基础。 gRPC 为通过 HTTP/2 进行流式传输提供一流支持。
gRPC 服务支持所有流式传输组合
一元无流式传输服务器到客户端流式传输客户端到服务器流式传输双向流式传输
gRPC 建议方案
gRPC 非常适合以下方案
微服务gRPC 设计用于低延迟和高吞吐量通信。 gRPC 对于效率至关重要的轻量级微服务非常有用。点对点实时通信gRPC 对双向流式传输提供出色的支持。 gRPC 服务可以实时推送消息而无需轮询。多语言环境gRPC 工具支持所有常用的开发语言因此gRPC 是多语言环境的理想选择。网络受限环境gRPC 消息使用 Protobuf一种轻量级消息格式进行序列化。 gRPC 消息始终小于等效的 JSON 消息。进程间通信 (IPC) IPC 传输如 Unix 域套接字和命名管道可与 gRPC 一起用于同一台计算机上的应用间通信。 有关详细信息请参阅使用 gRPC 进行进程间通信。
gRPC 弱点
浏览器支持受限
当前无法通过浏览器直接调用 gRPC 服务。 gRPC 大量使用 HTTP/2 功能且没有浏览器在 Web 请求中提供支持 gRPC 客户端所需的控制级别。 例如浏览器不允许调用方要求使用 HTTP/2也不提供对 HTTP/2 基础框架的访问。
ASP.NET Core 上的 gRPC 提供两种兼容浏览器的解决方案 gRPC-Web 允许浏览器应用通过 gRPC-Web 客户端和 Protobuf 调用 gRPC 服务。 gRPC-Web 要求浏览器应用生成 gRPC 客户端。 gRPC-Web 允许浏览器应用从 gRPC 的高性能和低网络使用率获益。 .NET 提供对 gRPC-Web 的内置支持。 有关详细信息请参阅 ASP.NET Core gRPC 应用中的 gRPC-Web。 gRPC JSON 转码允许浏览器应用调用 gRPC 服务就像它们是使用 JSON 的 RESTful API 一样。 浏览器应用不需要生成 gRPC 客户端或了解 gRPC 的任何信息。 通过使用 HTTP 元数据注释 .proto 文件可从 gRPC 服务自动创建 RESTful API。 转码使得应用可以同时支持 gRPC 和 JSON Web API而无需重复为两者生成单独的服务。 .NET 对从 gRPC 服务创建 JSON Web API 提供了内置支持。 有关详细信息请参阅 ASP.NET Core gRPC 应用中的 gRPC JSON 转码。