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

news/2024/7/7 22:44:56

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://lihuaxi.xjx100.cn/news/955262.html

相关文章

【数据库理论】研究 ANSI/ISO SQL 标准、事务、数据异常与隔离级别

文章目录 一、前言二、简介研究的演进过程三、一致性级别与锁机制3.1 定义 1 :一致性的非正规定义3.2 定义 2 :一致性的锁协议定义3.3 定义 3 :一致性的正式定义四、《ANSI SQL-92 标准》[^1] 定义的现象与隔离级别4.1 ANSI (ISO/IEC) SQL 标准简介4.2 ANSI SQL 定义的现象4…

密码传输和存储,如何保证数据安全?

本文从一个输入密码登录场景说起,详细介绍了密码传输过程的改进和思路,最后展现出一个相对安全的传输和存储方案。点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达场景在互联网项目中,我们经常会遇到以下…

中心频率法确认VMD的K值的python实现

变分模态分解VMD1.1原理 VMD算法是利用VMD是一种新的信号分解方法,就是求解变分问题。首先构造变分问题,将信号f分解为K个IMF分量,且每个模态分量都有各自的中心频率,同时求解模态的估计带宽之和最小值,约束条件为所有模态分量之和与原始信号相等。 算法认为所有分量都是集…

解锁大厂思维,剖析《阿里巴巴开发手册》之Integer缓存问题引发的分析

小熊学Java网站:https://javaxiaobear.gitee.io/,每周持续更新干货,建议收藏! 1、引言 阿里巴巴Java开发手册在第一章节,编程规约中OOP规约的第7条提到: **【强制】**所有整型包装类对象之间值的比较&…

Android Handler机制(三) Looper源码分析

一. 简介 我们接上一篇文章:Android Handler机制(二) Handler 实现原理 继续分析Looper Looper 的职责很单一,就是单纯的从 MessageQueue 中取出消息分发给消息对应 的宿主 Handler,因此它的代码不多(400行左右) . Looper 是线程独立的且每个线程只能存在…

关于如何合理设置线程池参数解决方案

关于如何合理设置线程池参数解决方案&#xff08;ThreadPoolExecutor&#xff09; 线程池参数有哪些 我们直接来看构造方法 ... public ThreadPoolExecutor(int var1, int var2, long var3, TimeUnit var5, BlockingQueue<Runnable> var6,ThreadFactory var7, Rejecte…

Linux系统的稳定性优势有哪些

Linux系统的一些优点 在线使用Linux服务器为您提供了如此多的优势。其实它的优势比其劣势更重&#xff0c;其中一些是&#xff1a; 1、提供稳定性&#xff0c;因为基于Linux的服务器不容易崩溃。在遇到碰撞的情况下&#xff0c;整个系统都不受影响。 2、降低对潜在的系统威胁…

【2023】DevOps、SRE、运维开发面试宝典之Istio相关面试题

文章目录 1、什么是Service Mesh服务网格?2、微服务治理网格的特点?3、Istio服务网格的组件有那些?4、Istio常见的资源控制器有哪些?5、应用程序接入Sidecar6、Istio与K8S集成架构7、Istio Gateway网关资源控制器8、Istio VirtualService虚拟服务资源9、Istio DestinationR…