gRPC - Google远程过程调用(Google Remote Procedure Call,gRPC)

news2025/2/4 22:32:45

什么是gRPC?
Google远程过程调用(Google Remote Procedure Call,gRPC)是基于HTTP 2.0传输层协议承载的高性能开源RPC软件框架,为管理和配置网络设备提供了一种API接口设计的方法。gRPC提供了多种编程语言,如C、Java、golong、python等。
gRPC可以作为数据传输协议与Telemetry技术配合使用,可实时、高速、精确的监控网络设备的运行状态。此外,网络设备提供了一种基于gRPC方式来管理设备的方法,包括配置、查询和能力获取三种方法。这些方法是通过设备和采集器对接,实现采集设备数据的功能。

gRPC VS REST
REST(Representational State Transfer)表征状态转移,是一种软件架构风格,用于指导WEB架构的设计和开发。REST同样为管理和配置网络设备提供了一种API接口设计的方法。gRPC与REST两者的主要差异如下:

REST遵循基于HTTP 1.1的请求-响应通信模型,而gRPC遵循基于HTTP 2.0的客户端-响应通信模型。
HTTP 2.0相对于HTTP 1.1,在速度上有着绝对的优势。虽然REST也可以基于HTTP 2.0进行数据传输,但是为了兼容HTTP 1.1方式,导致其没有充分利用HTTP 2.0的优势。

几乎所有的浏览器都支持REST,而支持gRPC的浏览器非常有限。这是REST相对于gRPC的主要优势。
REST使用JSON或XML编码格式承载数据,而gRPC默认使用ProtoBuf(Protocol Buffers)编码格式承载数据。
ProtoBuf是二进制的,是以二进制数据进行传输,而JSON或XML编码格式以文本形式传输,所以在传输速率上gRPC更具有优势。

REST不提供内置代码生成功能,需要使用Swagger等工具生成API请求代码。而gRPC具有protoc编译器,具有代码生成功能,而且protoc编译器与多种编程语言兼容。

gRPC是如何工作的?
gRPC协议架构
gRPC是一种用于实现RPC API的技术。由于gRPC是开源框架,通信双方都基于该框架进行二次开发,从而使得通信双方聚焦在业务,无需关注由gRPC软件框架实现的底层通信。如下图,DATA部分即为业务层面内容,DATA下面所有的信息都由gRPC进行封装。
在这里插入图片描述

gRPC协议架构
gRPC协议架构
gRPC支持的操作
设备在网络架构里支持Dial-in和Dial-out两种对接模式。

Dial-in模式:设备作为gRPC服务器,采集器作为gRPC客户端。由采集器主动向设备发起gRPC连接并获取需要采集的数据信息或下发配置。Dial-in模式适用于小规模网络和采集器需要向设备下发配置的场景。
Dial-in模式支持以下操作:
Subscribe操作:高速采集设备的接口流量统计、CPU和内存等数据信息。当前仅支持基于Telemetry技术的Subscribe操作。
Get操作:获取设备运行状态和运行配置。当前仅支持基于gNMI(gRPC Network Management Interface)规范的Get操作。
Capabilities操作:获取设备能力数据。当前仅支持基于gNMI规范的Capabilities操作。
Set操作:向设备下发配置。当前仅支持基于gNMI规范的Set操作。
Dial-out模式:设备作为gRPC客户端,采集器作为gRPC服务器。设备主动和采集器建立gRPC连接,将设备上配置的订阅数据推送给采集器。Dial-out模式适用于网络设备较多的情况下,由设备主动向采集器提供设备数据信息。Dial-out模式只支持基于Telemetry技术的Subscribe操作。
gRPC交互过程
如下图,gRPC采用客户端和服务器模型,以网络设备为gRPC客户端,采集器为gRPC服务器为例,说明gRPC的交互过程:

设备在开启gRPC功能后作为gRPC客户端,采集器作为gRPC服务器。
设备会根据应用服务(如订阅的事件)构建对应数据的格式(GPB/JSON),通过ProtoBuf(Protocol Buffers)编写Proto文件。然后,设备与采集器建立gRPC通道,通过gRPC协议向采集器发送请求消息。
采集器收到请求消息后,会通过ProtoBuf解译Proto文件,还原出事先定义好的数据结构,进行业务处理。
采集器处理完数据后,需要使用ProtoBuf重新编译应答数据,通过gRPC协议向设备发送应答消息。
设备收到应答消息后,结束本次的gRPC交互。
简单地说,设备主动和采集器建立gRPC连接,将设备上配置的订阅数据推送给采集器。在整个gRPC交互的过程中,设备和采集器都需要使用ProtoBuf来定义Proto文件。

gRPC交互过程
gRPC交互过程
gRPC的应用
gRPC支持通过Telemetry技术实现订阅功能(Subscribe操作)。Telemetry是一项远程的从物理设备或虚拟设备上高速采集数据的技术。设备通过推模式(Push Mode)周期性地主动向采集器上送设备的接口流量统计、CPU和内存数据等信息。

如下图所示,网络设备和网络管理系统建立gRPC连接后,网络管理系统可以订阅设备上指定模块的数据信息。Telemetry有动态订阅和静态订阅两种方式,动态订阅基于Dial-in模式建立,静态订阅基于Dial-out模式建立。

基于gRPC的Telemetry技术
基于gRPC的Telemetry技术
Telemetry的实现流程:

用户定义Telemetry静态订阅或Telemetry动态订阅。
Telemetry静态订阅:在huawei-grpc-dialout.proto文件中定义。
Telemetry动态订阅:在huawei-grpc-dialin.proto文件中定义。
用户将采集到的信息通过GPB或JSON格式进行编码,在huawei-telemetry.proto文件里定义采样路径、采样时间戳等重要信息。
GPB编码时,huawei-telemetry.proto文件中的encoding字段为Encoding_GPB(值为0),data_gpb字段承载GPB编码格式的采样数据,data_str字段为空。
JSON编码时,huawei-telemetry.proto文件中的encoding字段为Encoding_JSON(值为1),data_str字段承载JSON编码格式的采样数据,data_gpb字段为空。
设备传输数据到采集器,解码数据并分析结果。
huawei-telemetry.proto文件中data_gpb字段内容需要相应的业务proto文件进行解码,由huawei-telemetry.proto文件中的sensor_path字段标识对应哪个具体的业务proto文件,例如,当sensor_path取值为huawei-ifm:ifm/interfaces/interface时,其数据结构定义在huawei-ifm.proto文件中。
当采用纯JSON编码格式(编码层和数据模型层均为JSON编码格式。)时,用户只需要对huawei-grpc-dialout.proto文件或huawei-grpc-dialin.proto文件进行解码。当采用混合JSON编码格式(编码层为GPB编码格式,数据模型层为JSON编码格式。)时,用户只需要对huawei-grpc-dialout.proto文件或huawei-grpc-dialin.proto文件和huawei-telemetry.proto文件进行解码,不需要相应的业务proto文件。

什么是gRPC ProtoBuf?
gRPC ProtoBuf是gRPC协议的接口描述语言,是一种与语言无关、平台无关、扩展性好的用于通信协议、数据存储的序列化结构数据格式。gRPC ProtoBuf编码格式也称为GPB(Google Protocol Buffers)编码格式。GPB提供了一种灵活、高效、自动序列化结构数据的机制。GPB与XML、JSON编码类似,也是一种编码方式,但不同的是,它是一种二进制编码,性能好,效率高。

目前,GPB包括v2和v3两个版本,设备当前支持的GPB版本是v3。

GPB在gRPC的框架中主要有三个作用:

定义数据结构

xxx.proto

syntax = "proto3"; //proto版本定义为v3版本。

message serviceArgs { //消息格式描述。

int64 ReqId = 1; //请求ID。

oneof MessageData {

bytes data = 2; //表示承载GPB编码格式的采样数据。

string data_json = 4; //表示承载JSON编码格式的采样数据。

}

string errors = 3; //产生错误时的描述信息。

}

定义服务接口

xxx.proto

syntax = "proto3"; //proto版本定义为v3版本。

package huawei_dialout; //本包名称为huawei_dialout。

service gRPCDataservice { //服务名称为gRPCDataservice。

rpc dataPublish(stream serviceArgs) returns(stream serviceArgs) {}; //方法为dataPublish,双向流,提供数据推送方法。入参是serviceArgs数据流。

}

通过序列化和反序列化提升传输效率
GPB编码格式的内容只是提供给操作者阅读的,实际上并不会以这种文本形式进行传输,而是以序列化后的二进制数据进行传输。而JSON编码格式则以数据文本形式呈现,传输时也以数据文本形式传输,所以GPB编码格式的传输效率相对JSON、XML编码格式有着天然的优势。

{
// GPB编码
1:"HUAWEI"

2:"s4"

3:"huawei-ifm:ifm/interfaces/interface"

4:46

}
// JSON编码
{

"node_id_str":"HUAWEI",

"subscription_id_str":"s4",

"sensor_path":"huawei-ifm:ifm/interfaces/interface",

"collection_id":46,

}

什么是Proto文件?
gRPC协议用GPB编码格式承载数据,GPB编码格式的文件名后缀为.proto,即为Proto文件。

GPB通过“.proto”文件描述编码使用的字典,即数据结构描述。采集器可以利用Protoc等工具软件根据“.proto”文件自动生成代码(例如java代码),然后用户基于自动生成的代码进行二次开发对获取到的数据进行解析,从而实现与设备的数据对接。

Proto文件包含公共Proto文件和业务数据Proto文件。

公共Proto文件
Telemetry提供3个公共的proto文件,支持数据上送和订阅功能:

huawei-grpc-dialout.proto文件:定义了设备作为gRPC客户端对外推送数据。
huawei-grpc-dialin.proto文件:定义了设备作为gRPC服务端对外推送数据。
huawei-telemetry.proto文件:定义了Telemetry采样数据上送时的数据头,包括采样路径,采样时间戳等重要信息。
业务数据Proto文件
设备提供多个业务数据Proto文件,用于定义具体业务数据的GPB编码,采集器侧需要根据实际要监控的业务选择对应proto文件。

一个简单的Proto文件示例
Telemetry静态订阅功能:设备作为gRPC客户端,采集器作为gRPC服务端,由设备主动发起到采集器的连接,进行数据采集上送。

表1-1 proto文件内容

huawei-grpc-dialout.proto

syntax = "proto3"; //proto版本定义为v3版本。

package huawei_dialout; //本包名称为huawei_dialout。

service gRPCDataservice { //服务名称为gRPCDataservice。

rpc dataPublish(stream serviceArgs) returns(stream serviceArgs) {}; //方法为dataPublish,双向流,提供数据推送方法。入参是serviceArgs数据流。

}

message serviceArgs { //消息格式描述。

int64 ReqId = 1; //请求ID。

oneof MessageData {

bytes data = 2; //表示承载GPB编码格式的采样数据。

string data_json = 4; //表示承载JSON编码格式的采样数据。

}

string errors = 3; //产生错误时的描述信息。

}

https://info.support.huawei.com/info-finder/encyclopedia/zh/gRPC.html

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

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

相关文章

Linux之系统安全与应用续章

目录 一. PAM认证 1.2 初识PAM 1.2.1 PAM及其作用 1.2.2 PAM认证原理 1.2.3 PAM认证的构成 1.2.4 PAM 认证类型 1.2.5 PAM 控制类型 二. limit 三. GRUB加密 /etc/grub.d目录 四. 暴力破解密码 五. 网络扫描--NMAP 六. 总结 一. PAM认证 1.2 初识PAM PAM是Linux系…

软件工程知识梳理4-详细设计

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后,被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求,下面针对查询数据表…

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…

“与客户,共昂首”——Anzo Capital昂首资本尽释行业进取之姿

“以匠心,铸不凡” 活动的现场,Anzo Capital 作为演讲嘉宾分享“以匠心,铸不凡”的产品理念。Anzo Capital积淀九载,匠心打造出“STP”和“ECN”两大核心账户,以光之速度将交易中的订单直达市场和流动性提供商&#…

江科大stm32学习笔记10——对射式红外传感器

一、接线 上电之后可以看到对射式红外传感器亮两个灯,如果此时用挡光片挡住两个黑色方块中间的部分,则只亮一个灯。 二、代码 将4-1的工程文件夹复制粘贴一份,重命名为“5-1 对射式红外传感器计次”,打开keil,右键添…

基于muduo网络库开发服务器程序和CMake构建项目 笔记

跟着施磊老师做C项目,施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…

tcp/ip模型中,帧是第几层的数据单元?

在网络通信的世界中,TCP/IP模型以其高效和可靠性而著称。这个模型是现代互联网通信的基石,它定义了数据在网络中如何被传输和接收。其中,一个核心的概念是数据单元的层级,特别是“帧”在这个模型中的位置。今天,我们就…

C++ STL库详解:容器适配器stack和queue的结构及功能

一、stack 1.1stack的介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器&#xf…

【目标跟踪】3D点云跟踪

文章目录 一、前言二、代码目录三、代码解读3.1、文件描述3.2、代码框架 四、关联矩阵计算4.1、ComputeLocationDistance4.2、ComputeDirectionDistance4.3、ComputeBboxSizeDistance4.4、ComputePointNumDistance4.5、ComputePointNumDistance4.6、result_distance 五、结果 一…

实现div拖拽demo

示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title>&…

51单片机编程应用(C语言):数码管

目录 1.数码管原理 一位数码管引脚定义&#xff1a; 四位一体数码管&#xff1a; 多个数码管同时显示不同数字 51单片机的数码管的原理图 51单片机实现静态显示和动态显示 静态显示&#xff1a; 动态显示&#xff1a; 1.数码管原理 一位数码管引脚定义&#xff1a; 数码…

idea查看日志的辅助插件 --- Grep Console (高亮、取消高亮)

&#x1f680; 分享一款很有用的插件&#xff1a;Grep Console &#x1f680; 我们在查看日志的时候可能会有遗漏&#xff0c;使用这款插件可以让特定的关键词高亮&#xff0c;可以达到不遗漏的效果&#xff01; 如果你是一个开发者或者对日志文件分析感兴趣&#xff0c;不要…

linux搭建jupyter

查看虚拟环境 conda info --envs进入虚拟环境 conda activate my_env pip install jupyter pip install ipykernel1. jupyter notebook启动 1.1 创建临时jupyter notebook任务 jupyter notebook --ip0.0.0.0 --no-browser --allow-root --notebook-dir/home/xxx1.2 jupyter…

Xcode报fatal error: ‘XXX.h‘ file not found

在Xcode中遇到 "fatal error: XXX.h file not found" 的错误通常是由于缺少头文件或头文件路径配置不正确导致的。 以下仅为我的解决方案&#xff1a; 1.点击项目名——>显示此页面 2.选择Build Settings——>输入 Search Paths 3. 点击空白处添加路径 4…

使用浏览器开发工具分析性能

使用浏览器开发工具分析性能 一、网络分析二、性能分析 一、网络分析 1、面板概览&#xff1a; Controls (控件) : 控制面板的功能Filters (过滤器) : 控制在请求列表中显示哪些资源Overview (概览) : 展示检索资源的时间轴&#xff0c;多个垂直堆叠的栏意味着这些资源被同时…

2024杭州国际安防展览会:引领数字城市安全与智能未来

随着科技的不断进步&#xff0c;数字城市已经成为未来城市发展的重要趋势。作为数字城市建设的重要组成部分&#xff0c;安防技术的创新与应用对于保障城市安全、提高生活品质具有重要意义。为此&#xff0c;2024杭州国际安防展览会将于4月份在杭州国际博览中心隆重召开&#x…

储能新纪元:第十三届中国国际储能大会(CIES2023)深度洞察与未来趋势

随着全球能源结构的持续优化和可再生能源的迅猛发展&#xff0c;储能技术作为支撑能源转型的关键力量&#xff0c;日益受到世界各国的关注。 在这一背景下&#xff0c;2023年第十三届中国国际储能大会&#xff08;CIES2023&#xff09;的召开&#xff0c;无疑为行业内外人士提…

PDF中公式转word

效果&#xff1a;实现pdf中公式免编辑 step1: 截图CtrlAltA&#xff0c;复制 step2: SimpleTex - Snip & Get 网页或客户端均可&#xff0c;无次数限制&#xff0c;效果还不错。还支持手写、文字识别 单张图片&#xff1a;选 手写板 step3: 导出结果选择 注&#xff1a;…

网络协议与攻击模拟_12DNS协议及Windows部署DNS服务器

1、了解域名的结构 2、DNS查询过程 3、Windwos server部署DNS服务器 4、分析流量 实施DNS欺骗 再分析 一、DNS域名系统 1、DNS简介 DNS&#xff08;Domain Name system&#xff09;域名系统&#xff0c;作为将域名的IP地址的相互映射关系存放在一个分布式的数据库&#xff0c…