本文介绍: gRPC是一个现代的开源高性能远程过程调用(RPC)框架可以在任何环境中运行。它可以高效地连接数据中心内和跨数据中心服务支持负载平衡跟踪运行状况检查身份验证。它也适用于分布式计算最后一英里,将设备移动应用程序浏览器连接到后端服务。gRPC最初是由Google创建的,它使用一个通用的RPC基础设施称为Stubby用于连接大量微服务在其数据中心内部之间运行了十多年。2015年3月, Google决定构建Stubby的下一个版本,并将其开源

简介

gRPC是一个现代的开源高性能远程过程调用(RPC)框架可以在任何环境中运行。它可以高效地连接数据中心内和跨数据中心服务支持负载平衡跟踪运行状况检查身份验证。它也适用于分布式计算最后一英里,将设备、移动应用程序浏览器连接到后端服务
gRPC最初是由Google创建的,它使用了一个通用的RPC基础设施称为Stubby用于连接大量微服务在其数据中心内部之间运行了十多年。2015年3月, Google决定构建Stubby的下一个版本,并将其开源。gRPC现在在许多组织使用谷歌将为从微服务计算的“最后一英里”的用例提供动力 (移动的、Web和物联网)。

GRPC的特性优缺点

基于HTTP/2

HTTP/2 提供了连接多路复用双向流、服务器推送请求优先级首部压缩机制可以节省带宽、降低TCP链接次数节省CPU,帮助移动设备延长电池寿命等。gRPC 的协议设计使用了HTTP2 现有语义请求响应数据使用HTTP Body 发送,其他的控制信息则用Header 表示

IDL使用ProtoBuf

gRPC使用ProtoBuf定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够数据进行序列化,并广泛应用数据存储通信协议等方面。压缩传输效率高,语法简单,表达力强。

语言支持

gRPC支持多种语言(C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java),并能够基于语言自动生成客户端服务端功能库。目前已提供了C版本grpc、Java版本grpcjava 和 Go版本grpcgo,其它语言版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpcjava已经支持Android开发

gRPC优缺点

优点
protobuf二进制消息性能好/效率高(空间时间效率都很不错),gRPC消息使用一种有效的二进制消息格式protobuf继续宁序列化。Protobuf服务器客户机上的序列化非常快。Protobuf序列化之后的消息体积很小,能够有效负载,在移动应用程序有限宽带场景中显得很重要。与采用文本格式json相比,采用进制格式protobuf在速度可以达到前者的5倍

proto文件生成目标代码简单易用,所有gRPC框架都为代码生成提供了一流的支持。gRPC的开发核心是*.proto文件,它定义了gRPC服务和消息的约定。根据这个文件,gRP框架生成服务基类,消息和完整客户端代码通过服务器客户端之间共享*.proto文件可以从端到端生成消息和客户端代码客户端代码生成消除客户端服务器上的重复消息,并为您创建了一个强类型客户端。无需编写客户端代码,可在具有许多服务和应用程序节省大量开发时间

序列化反序列直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)

支持向前兼容(新加字段采用默认值)和向后兼容忽略新加字段),简化升级

支持多种语言(可以proto文件看做IDL文件)

Netty等一些框架集成

缺点

当下,不能从浏览调用gRPC服务 ,gRPC Web是gRPC团队的一项附加技术,它在浏览器中提供有限的gRPC支持。gRPC Web由两部分组成:支持所有现代浏览器的JavaScript客户端服务器上的gRPC Web代理。gRPC Web客户端调用代理代理将在gRPC请求转发到gRPC服务器。gRPC Web并非支持所有gRPC功能。不支持客户端和双向流,并且对服务器流的支持有限

GRPC尚未提供连接池需要自行实现

尚未提供“服务发现”、“负载均衡机制

因为基于HTTP2,绝大部多数HTTP Server、Nginx都尚不支持,即Nginx不能将GRPC请求作为HTTP请求来负载均衡,而是作为普通的TCP请求。(nginx1.9版本已支持)

Protobuf二进制可读性差(貌似提供了Text_Fromat功能

使用场景

微服务:gRPC设计为低延迟和高吞吐量通信,非常适用效率至关重要轻型微服务

点对点实时通信:gRPC可以实时推送消息而无需轮询

多语言混合开发环境:支持所有流行开发语言

网络受限环境:使用Protobuf(一种轻量级消息格式)序列化gRPC消息。gRPC消息始终小于等效的JSON消息

原文地址:https://blog.csdn.net/qq_42702751/article/details/134682728

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36018.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注