RPC之GRPC:什么是GRPC、GRPC的优缺点、GRPC使用场景

简介

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版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持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消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux特殊权限_suid_chattr_umask

3.3 特殊权限 如果一个文件很重要,需要依赖特殊权限避免其被删除。 由于特殊权限会拥有一些“特权”,因而用户若无特殊需要,不应该去打开这些权限,避免安全方面出现严重漏洞,甚至摧毁系统。3个权限是对了执行文件或目…

软件使用-stm32入门

这节主要是介绍大家使用两个软件。这两个软件也是比较常用的,里面也有很多有意思的功能,可以给大家介绍一下。 1. FlyMcu 软件 这个软件可以通过串口给 STM32 下载程序,如果你没有 STLINK,就可以用这个软件通过串口下载程序。 …

FPGA串口接收解帧、并逐帧发送有效数据-2

FPGA串口接收解帧、并逐帧发送有效数据 工程实现的功能:FPGA串口接收到串口调试助手发来的数据,将其数据解帧。判断到正确的帧头和帧尾之后,将有效数据存入rx_data中;另一方面发送端将有效数据逐帧发送出去。 参考:正…

差分数组相关知识点以及刷题

差分数组 差分数组是什么? **举例:**对于数组考虑数组 a[1,3,3,5,8],对其中的相邻元素两两作差(右边减左边),得到数组 [2,0,2,3]。然后在开头补上 a[0],得到差分数组: ​ d[1,2,0…

【电路笔记】-串联和并联电阻

串联和并联电阻 文章目录 串联和并联电阻1、概述2、串联和并联电阻示例13、串联和并联电阻示例2 电阻器可以无限数量的串联和并联组合连接在一起,形成复杂的电阻电路。 1、概述 在之前的教程中,我们学习了如何将各个电阻器连接在一起以形成串联电阻器网…

编程和系统架构设计中性能优化等相关问题及解决方案

在编程和系统架构设计中,性能优化、大并发编程、异步补偿以及分布式事务控制等问题是经常面临的挑战。要优雅地解决这些问题。 常见的技术难题: 编程中常见的技术难题有很多,以下列举了一些常见的技术难题: 1. 性能优化:如何提高程序的执行效率,优化算法和数据结构,减少…

什么是Ros(四) - ros1和ros2的区别

参考:【ros/ros2】ros1和ros2的区别-要点记录_shuaixio的博客-CSDN博客

linux设置权限_setfacl_getfacl

3.2 设置权限ACL(access control list) 假设:/data所有者与所属组均为root,在不改变所有者的前提下,要求用户tom对该目录有完全访问权限(rwx)。只能考虑: 方法一:给/dat…

超详细实现【贪吃蛇】(1)

目录 技术要点介绍 🙂Win32 API 🙂控制台程序 🎇标题 🎇大小 在Windows终端上: 在VS上: 🎇坐标 🙂光标 😶‍🌫️GetStdHandle 😶‍&am…

基于STM32 + TIM _定时器的基本机构和工作原理详解

前言 本篇博客主要学习了解定时器的基本结构和工作原理,掌握定时器的驱动程序和设计。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。 本次博客板子使用的是正点原子精英版,芯片是STM32F103ZET6,需要资料可以我拿取。 本博客内容原…

多个模版结构特征提取

HhsearchHitFeaturizer和HmmsearchHitFeaturizer类的get_templates方法返回TemplateSearchResult。TemplateSearchResult含有features(TEMPLATE_FEATURES字典类型)以及errors(列表类型) 和 warnings (列表类型&#xf…

【PyTorch】(四)损失函数与优化器

文章目录 1. 损失函数2. 优化器 1. 损失函数 2. 优化器

[数据结构]红黑树的定义以及添加原则

红黑树是一种自平衡的二叉查找树,是一种常用的数据结构 1972年出现,在当时被称为平衡二叉B树。后来1978年被修改为如今的“红黑树” 它是一个特殊的二叉查找树,红黑树的每一个节点上都有储存位表示节点的颜色 每一个节点可以是红或者黑&#…

代码生成器——MyBatisX插件

MyBatisX插件 MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率。 但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需要自己去编写代码和SQ…

修复 Ubuntu 2204 Wi-Fi 热点无法连接问题

修复 Ubuntu 2204 Wi-Fi 热点无法连接问题 Ubuntu 升级到 Ubuntu 22.04 之后, 系统自带的 Wi-Fi 热点功能就不能用了, 共享的热点无法连接, 应该是 wpa_supplicant-2.10 导致的 (https://blog.incompetent.me/2022/07/27/workaround-ubuntu-…

22.Python 操作目录

目录) 1. 认识路径相对路径绝对路径 2. 拼接路径3.检测目录4.创建和删除目录5.遍历目录 1. 认识路径 目录也称文件夹,用于分层保护文件,通过目录可以分门别类地存放文件,也可以通过目录快速地找到想要的文件,在Python…

每天一点python——day83

#每天一点Python——83 #python报错原因 bug: 在计算机程序中,bug是指程序中的错误或故障,导致程序不能按照预期执行或产生不正确的结果。 这种错误可能是由编码或设计错误、运行环境不一致、输入数据异常等多种原因导致的。常见的bug类型包括…

密码学实验三

第一题: 寻找满足特定条件的 e; 第一步: 第二步: 由式1.7知,给定e,p,q,就可计算出相应的RSA不动点的数目。因此设计算法步骤如下: 枚举找出所有与φ(n)互素的e。枚举所有满足条件的e&#xff…

oracle 去重

Oracle去重 在Oracle中进行去重的SQL语句有以下几种: 1.使用DISTINCT关键字 使用SELECT DISTINCT列名 FROM 表名来选择唯一的值。例如:SELECT DISTINCT column_name FROM table_name; 2.使用GROUP BY子句 使用GROUP BY子句将重复的值分组&#xff0…

为XiunoBBS4.0开启redis缓存且支持密码验证

修改模块文件1 xiunoPHP/cache_redis.class.php: <?phpclass cache_redis {public $conf array();public $link NULL;public $cachepre ;public $errno 0;public $errstr ;public function __construct($conf array()) {if(!extension_loaded(Redis)) {return $thi…