边缘计算开源项目解读——kubeedge mappers实现

news/2024/5/19 6:40:52/文章来源:https://blog.csdn.net/linus_ben/article/details/129302354

0 背景

        本文重点解读kubeedge项目中的mapper模块。该模块位于kubeedge的edgecore的南向边缘侧,主要对接入kubeedge的终端设备,进行协议的适配和转换,使其可以和边缘设备通信,转换后的协议是我们前面描述的mqtt协议,当然也支持http协议。当前该模块支持BLE、MOBUS等多种物联网协议的转换,这部分代码单独有一个git路径【1】,有自己独立的架构和功能特性。笔者将从代码架构,模块的上下文,订阅和发布消息的角度对其进行解读。

1 mapper代码架构

        mapper的代码架构从其模块功能上我们也能推断出肯定包含南向和北向两种通信方式,南向的主要是和终端设备通信,而北向则主要将消息传递给边缘设备。那这两者之间得有个桥梁,将其连接起来,本质上就是要进行协议的转换。基于这样的思路,我们再去看mapper中的代码目录就变得很清晰了。如下图所示是整个mapper模块文件夹和协议转换架构之间映射关系。

f04dbdacbd3748469711325bd2c2b75c.png

        图中左侧的代码目录分为三部分。其一是当前已经支持的协议,我们看到有七种协议,这些协议是物联网场景被广泛使用的通信协议,实现与终端设备的连接,此处映射到协议层。第二部分有di,models和service三个文件夹,其中models实现了跟协议层的交互,di主要实现了mapper的容器功能,service作为mapper模块的主控流程,此处我们将其划归到驱动层。最后的第三部分主要实现协议的转换和北向通信,主要有mqttadapter,httpadapter,clients三个核心功能。其中clients实现了与broker的通信,另外两个主要实现协议数据的转换。各层功能的交互过程将在3和4小节讲述。

2 mapper模块的上下文

        mapper模块的上下文指的是该模块在kubeedge中的所处的位置,这个模块实现了终端设备和边缘设备之间的互联,上边通过broker与EventBus通信,下边与终端设备通过各种物联网协议(BLE/MOBUS等)连接。这个模块在终端和边缘之间搭建了一座桥梁,可以让终端设备很方便地插入到边缘设备上。

b3b2d166779745e2a2d6a238b4f035ee.png

        上图中以mqtt协议为例,讨论一下这个模块的在云边端这种架构下的作用。我们已经知道在云边端场景下,设备的状态修改可以由云端发起,该期望状态首先到达边缘设备的devicetwin,存储在边缘侧的database,然后通过EventBus发布修改设备状态到broker。那这个状态如何更新到终端呢?此处就需要用到我们本文的mapper模块,该模块从broker订阅了更新设备状态的主题,broker将期望的终端状态发送到mapper,mapper再根据连接的终端设备,将期望状态转换成终端连接的协议,最后发送给终端。同样的当设备的状态发生变化时,也可以通过相反的过程上送到边缘侧和云侧。在了解了这个模块的外部交互后,我们看看模块内部的实现流程是怎样的,下面将从订阅和发布两个方向上进行梳理。

3 mapper订阅消息流程

        mapper订阅消息,订阅的主题来自于broker。整个mapper服务的入口是bootstrap,其中控制了整个的订阅流程,首先是创建一个mapper容器,然后定义了一个mapper服务实例。在实例的内部,依次实现了协议主题订阅,协议转换,协议挂载和协议的内部适配,通过这套流程就可以实现一个完整的主题订阅和实现过程。最终解析出的数据会通过BLE等协议发送给终端设备。

fa6bce1b38aa4bc2989299bbde81d68a.png

        mapper服务实例内部各子模块的功能描述和实现如下:

  • 协议主题订阅:对应clients文件夹,实现了mqtt客户端功能,完成mapper和broker的连接,主题的订阅。
  • 协议转换:对应mqttadapter文件夹,实现了mqtt协议与其他协议数据的格式转换,动态添加和删除设备。
  • 协议挂载:对应controller文件夹,实现了主题接口的订阅,调用驱动接口配置数据到设备。
  • 协议内部适配:对应ble等文件夹,实现了mqtt信息获取,设备数据初始化,ble初始化等基础功能,然后初始化订阅主题消息最后解析订阅的主题,将数据配置成ble的数据格式。

4 mapper发布消息流程

        mapper发布消息,发布的主题会发送给broker。实现的流程与上述的订阅消息类似。不同的地方是mapper服务实例内部的模块从设备端起始,最终到broker截止。如下图所示,发布的数据来自设备,包括孪生数据,用户数据和设备状态数据,其中的孪生数据会更新到边缘设备的devicetwin模块。在协议挂载挂载的是发布主题接口,实际的执行接口实现驱动控制和获取设备数据。在协议转换模块,定时上报来自设备的三类数据。最后的协议发布模块,创建发布主题,将数据发送到broker。

ead9b560b1044002bb4f6a47a34a41b7.png

5 小结

        本文从代码流程和架构的角度解读了kubeedge的mapper模块,这个模块是开发者在应用开发中需要二次开发的地方,特别是当项目中使用当前不支持的物联网协议时,就需要根据提供的架构在mapper中实现对自研协议的支持。希望本文能够对开发者有所启发,下一步笔者将转向MetaManager模块的解读,敬请期待。

参考文献:

【1】https://github.com/kubeedge/mappers-go

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

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

相关文章

快速上手配置firewalld

firewalld使用firewall-cmd命令配置策略。 查看当前firewalld当前服务运行状态 firewall-cmd --state firewalld防火墙状态还用使用如下命令查看状态 systemctl status firewalld 查看所有打开运行的端口 firewall-cmd --zonepublic --list-ports 查看区域信息情况 firewall…

04 Android基础--RelativeLayout

04 Android基础--RelativeLayout什么是RelativeLayout?RelativeLayout的常见用法:什么是RelativeLayout? 相对布局(RelativeLayout)是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。 根据父容器定位 在相…

maven高级知识。

目录 一、分模块开发 1、分模块开发设计 2、依赖管理 二、继承和聚合 1、聚合 2、继承 三、属性 1、基本介绍 2、版本管理 四、多环境配置与应用 1、多环境开发 2、跳过测试 五、私服 1、私服安装 2、私服仓库分类 一、分模块开发 1、分模块开发设计 ▶ 示意图 …

南卡Neo骨传导运动耳机发布,重塑骨传导耳机舒适听感新体验!

近日,在骨传导耳机领域中最专业的南卡发布了今年全新系列——NEO,如果说南卡Runner Pro4的音质是偏向于节奏性,那么这款南卡NEO是更加偏向于沉稳性节奏,能够轻松征服轻运动场景,此系列在舒适度以及音质上,更…

【GNN笔记】GNN图论文相关笔记公开汇总清单

图神经网络相关论文笔记清单持续待更....😀 🐧🐧🐧🐧~【异构图笔记】1. 异构图笔记部分示例2. 异构图笔记清单罗列【图-注意力机制笔记】1. 图-注意力机制笔记部分示例2. 图-注意力机制笔记清单罗列这是一份有关我自己…

经典蓝牙Sniff Mode

文章目录IntroductionApplicationSniff Sub-ratingReferenceIntroduction Sniff mode为两个已连接的经典蓝牙设备提供了有效的降低功耗的方法。我们知道,当没有数据需要传输的时候,两个已连接的蓝牙设备之间也需要每两个slots完成一次POLL packet - NUL…

新版本GPU加速的tensorflow库的配置方法

本文介绍在Anaconda环境中,配置可以用GPU运行的Python新版tensorflow库的方法。 在上一篇文章Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129285815&am…

Torch同时训练多个模型

20230302 引言 在进行具体的研究时,利用Torch进行编程,考虑到是不是能够同时训练两个模型呢?!而且利用其中一个模型的输出来辅助另外一个模型进行学习。这一点,在我看来应该是很简单的,例如GAN网络同时训…

HOT100--(5)最长回文子串

点击查看题目详情 中心扩散法 思路: 遍历字符串,以每个字符为中心点向两边扩散,如果遇到不一样的就跳出循环。以此类推,最后截取最大回文串返回。 细节 字符个数不一定都是奇数。当个数是偶数的是时候,我们可以“忽…

Canal数据同步配置

文章目录Canal数据同步配置0.canal工作原理1.**检查binlog功能是否有开启**2.如果显示状态为OFF表示该功能未开启,开启binlog功能3.**在mysql里面添加以下的相关用户和权限**4.下载安装Canal服务5.修改配置文件6.进入bin目录下启动7.idea中配置Canal数据同步配置 c…

Java接口专题

基本介绍 接口给出一些没有实现的方法,封装到一起,到某个类使用时再根据具体情况把这些方法写出来。 注意:在jdk7之前,接口里所有的方法都是抽象方法。在jdk8之后接口中可以有静态方法,默认方法 interface 接口名{/…

MySQL 数据库创建不了外键约束

在数据库的表里面创建不了外键约束❓❓❓ 没错,以我名侦探 q 的分析(狗屁!!!),真相只有一个❗❗❗ 那就是:你表的存储引擎非 InnoDB,外键约束只有存储引擎是 InnoDB 才…

flutter window安装过程

这里写自定义目录标题#下载相关官网地址:https://flutter.cn/docs/get-started/install/windows 根据官网下载相关包flutter_windows_3.7.5-stable.zip 解压到c盘,在path配置相关解压路径(c:\flutter)。 执行 where flutter dart ,发现没有提…

APP测试面试题汇总(基础篇、进阶篇)

一、基础篇1、请介绍一下,APP测试流程?APP测试流程与web测试流程类似,分为如下七个阶段:1.根据需求说明书编写测试计划;2.制定测试方案,主要是测试任务、测试人员和测试时间的分配;3.测试准备&a…

离散事件动态系统

文章目录离散事件动态系统ppt离散事件系统建模离散事件动态系统的基本组成元素离散事件动态系统仿真具体建模petri建模实例离散事件动态系统 ppt ppt 仿真建模步骤 离散事件系统建模 from:离散事件系统建模 离散事件动态系统的基本组成元素 (1&am…

【备战面试】每日10道面试题打卡-Day2

本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容 文章目录1、 和 equals 的区别是什么?2、你重写过 hashcode 和 equals 吗,为什么重写equals时必须重写hashCode方法?3、为什么Java中只有值传递?4、BI…

工业机器人有哪些类型?如何利用工业网关集中监测管理?

工业机器人在制造业中的应用与日俱增,使用工业机器人,不仅提高了设备和场地的利用率,还能保持稳定的产品水平。随着工业机器人的大规模部署,对于数量众多、类型各异、功能不一的机器人的监测、管理和维护,也成为企业面…

如何提高软件测试效率 降低开发成本?

1、单元测试以开发人员为主 测试分工需根据测试人员的特点进行,而单元测试应以开发人员为主,以保障每个单元能够完成设计的功能。集成测试也可以以开发人员为主进行。当软件体系结构完成后,独立测试人员应尽量选择比较熟悉相关领域的人员。​…

Webpack-好文

webpack是一个前端资源加载/打包工具,会根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源Webpack打包js文件创建一个文件夹,cmd进入到终端,运行npm install -g webpack webpack-cli安装webpack we…

原生微信小程序引入npm和安装Vant Weapp

目录一、引入npm安装Vant Weapp1、引入npm2、安装Vant Weapp3、修改 app.json4、修改 project.config.json二、构建npm一、引入npm安装Vant Weapp 环境:Windows10 开发工具:微信开发者工具 本地环境:已安装过node.js 1、引入npm cmd进入到你…