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消息
相关文章:
RPC之GRPC:什么是GRPC、GRPC的优缺点、GRPC使用场景
简介 gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡、跟踪、运行状况检查和身份验证。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览…...

无人机光伏巡检代替人工,贵州电站运维升级
无人机光伏巡检如何做到降本增效?贵州省光伏电站有新招!某70MWp的光伏电站通过引入复亚智能无人机光伏巡检系统,专注于使用无人机对区域内的光伏面板进行自动巡航巡查,利用自动化巡检和故障识别技术,显著提升了光伏电站…...
【Q3——30min】
1、介绍一下数据库的三大范式 第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键&a…...
leetcode每日一题35
90. 子集 II 回溯嘛 子集啊排列组合啊棋盘啊都是回溯 回溯三部曲走起 跟78.子集比,本题给出的数组里存在重复元素了 所以在取元素时,如果同一层里取过某个元素,那么在该层就不能取重复的该元素了 如给出的数组[1,2,2] 可以在某一次递归中第一…...

第二十章——多线程
一.线程简介 线程的特点 1.进程是资源分配的最小单位,线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 二.创建线程 1.继承Thread类 1.Thread类是java.lang包中的一个类,从这个类实例化的对象代表线程,程序员启动一个新…...

【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现
0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。 行为表 状态图 Timing Diagram Circuit JK 触发器的设计目的是防止 RS 触发器在输入 S 和 R 均等于 …...

【人工智能】人工智能的技术研究与安全问题的深入讨论
前言 人工智能(Artificial Intelligence),英文缩写为AI。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。 📕作者简介&#x…...

苹果提醒事项怎么用?几个简单步骤就能学会!
苹果提醒事项可以帮助你轻松管理待办事项,让你更好地安排自己的时间和工作。但是,有些小伙伴可能对如何使用这个功能还有一些疑问。苹果提醒事项怎么用?不要担心,小编将为大家提供使用提醒事项的方法,帮助你学会如何使…...
<HarmonyOS第一课>从简单的页面开始 【课后考核】
判断题 在Column容器中的子组件默认是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向,在Row容器中的组件默认是按照从左到右的水平方向布局的,其主轴的方向是水平方向。 正确(True)List容器可以沿水平方向排列,也可以沿垂…...
如何实现按需加载
如何实现按需加载 实现按需引入的步骤: ES6模块语法: 确保你的组件库使用了ES6模块语法,这是按需引入的基础。 拆分组件: 将组件库拆分成独立的模块,每个模块包含一个组件。这样,只有需要的组件才会被引入…...
Vue3-admin-template的表格合计计算
直接上代码: <el-table:data"lists"style"width: 100%"max-height"500":header-cell-style"{ textAlign: center }":cell-style"{ textAlign: center }"show-summary:summary-method"getSummaries"…...
spring JdbcTemplate 快速入门
概述 Spring JDBC Template 是 Spring Framework 提供的一个简化 JDBC 操作的模板类。它封装了一些常见的 JDBC 操作,使得开发者在使用 JDBC 时能够更加便捷、简洁,同时也提供了异常处理和资源管理等功能。 导入pom 使用C3P0作为数据源 <project x…...

leetcode:用队列实现栈(后进先出)
题目描述 题目链接:225. 用队列实现栈 - 力扣(LeetCode) 题目分析 我们先把之前写的队列实现代码搬过来 用队列实现栈最主要的是实现栈后进先出的特点,而队列的特点是先进先出,那么我们可以用两个队列来实现 一个队…...

使用opencv实现更换证件照背景颜色
1 概述 生活中经常要用到各种要求的证件照电子版,红底,蓝底,白底等,大部分情况我们只有其中一种,本文通过opencv实现证件照背景的颜色替换。 1.1 opencv介绍 OpenCV(Open Source Computer Vision Librar…...

Unity打出的安卓包切换后台再恢复前台,卡顿许久问题记录
连接AndroidStudio发现当切换后台时提示:D/Unity: Multi-casting "[IP] 192.168.31.231 [Port] 55000 [Flags] 19 [Guid] 1268732307 [EditorId] 264356214 [Version] 1048832 [Id] AndroidPlayer(11,Xiaomi_M2012K11AC192.168.31.231) [Debug] 0 [PackageName…...

Linux常用命令----shutdown命令
文章目录 命令概述参数解释使用示例及解释 命令概述 shutdown 命令用于安全地关闭或重启 Linux 系统。它允许管理员指定一个时间点执行操作,并可发送警告信息给所有登录的用户。 参数解释 时间参数 ([时间]): now: 立即执行关闭或重启操作。m: 在 m 分钟后执行操作…...

美创科技受邀亮相第二届全球数字贸易博览会
11月23日-27日,由浙江省人民政府、商务部共同主办的第二届全球数字贸易博览会(以下简称“数贸会”)圆满落幕。围绕“国家级、国际性、数贸味”的目标定位,以“数字贸易 商通全球”为主题,数贸会重点展示数字贸易全产业…...
有n件物品,每件物品都有一个花费,要求每m个中必须至少选2个,求最小花费
题目 #include<bits/stdc.h> using namespace std; #define int long long #pragma GCC optimize(2) const int maxn 2e4 5, maxm 2e3 5, inf 1e9; int a[maxn]; int f[maxm][maxm];//f[i][j]表示选了第i个,上一个选的是第i-j个(每m个中选2个…...

Hive数据库与表操作
文章目录 一、准备工作二、Hive数据库操作(一)Hive数据存储(二)创建数据库(三)查看数据库(四)修改数据库信息 一、准备工作 二、Hive数据库操作 (一)Hive数据…...

C语言数据结构之顺序表(上)
前言: ⭐️此篇博文主要分享博主在学习C语言的数据结构之顺序表的知识点时写的笔记,若有错误,还请佬指出,一定感谢!制作不易,若觉得内容不错可以点赞👍收藏❤️,这是对博主最大的认可…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...