「连载」边缘计算(二十三)02-28:边缘部分源码(源码分析篇)

news/2024/5/19 15:23:44 标签: 边缘计算, 人工智能

(接上篇)

EdgeCoreedgehub

前面对EdgeCore组件的edged、devicetwin功能模块进行了分析,本节对EdgeCore组件的另一个功能模块edgehub进行剖析。 edgehub作为edge部分与cloud部分进行交互的门户,我们有必要将edgehub相关内容彻底分析清楚,为使用过程中的故障排查和未来的功能扩展与性能优化提供便利。edgehub的剖析具体包括edgehub的struct调用剖析、edgehub的具体逻辑剖析。

edgehub的struct组成剖析

EdgeCore模块注册函数具体如下所示。

KubeEdge/edge/cmd/EdgeCore/app/server.go

// registerModules register all the modules started in EdgeCore

func registerModules() {

...

edgehub.Register()

...

}

registerModules()函数中的edgehub.Register()具体如下所示。

KubeEdge/edge/pkg/edgehub/module.go

// Register register edgehub

func Register() {

core.Register(&EdgeHub{

controller: NewEdgeHubController(),

})

}

顺着Register()函数中EdgeHub struct的实例化语句进入EdgeHub struct定义,具体如下所示。

KubeEdge/edge/pkg/edgehub/module.go

//EdgeHub defines edgehub object structure

type EdgeHub struct {

context    *context.Context

controller *Controller

}

EdgeHub struct中包含*context.Context和*Controller 两个属性。

1) *context.Context: 在《深入理解边缘计算:云、边、端工作原理与源码分析》8.3.2中,笔者已经分析过*context.Context,它是一个基于go-channels的消息框架,EdgeCore用它作为各功能模块之间通信的消息管道。

2)*Controller:edgehub的主要功能载体。

Controller struct的定义具体如下所示。

KubeEdge/edge/pkg/edgehub/controller.go

//Controller is EdgeHub controller object

type Controller struct {

context    *context.Context

chClient   clients.Adapter

config     *config.ControllerConfig

stopChan   chan struct{}

syncKeeper map[string]chan model.Message

keeperLock sync.RWMutex

}

从Controller struct的定义可以确定,Controller struct是edgehub核心功能载体没错了。

到此,edgehub的struct组成剖析就结束了。接下来剖析edgehub的具体逻辑。

edgehub的具体逻辑剖析

回到edgehub的注册函数,开始剖析edgehub相关的逻辑,具体如下所示。

KubeEdge/edge/pkg/edgehub/module.go

// Register register edgehub

func Register() {

core.Register(&EdgeHub{

controller: NewEdgeHubController(),

})

}

未完待续……  


http://www.niftyadmin.cn/n/5397138.html

相关文章

Oracle之缓存融合

CACHE FUSION 原理 为了更深入的了解Oracle的后台进程的工作原理,需要先了解一下 RAC 中多节点对共享数据文件访问的管理是如何进行的。要了解 RAC 工作原理的中心,需要知道 Cache Fusion 这个重要的概念,要发挥 Cache Fusion 的作用&#xf…

Ubuntu20.04 (VMware 虚拟机) fdisk -l 权限不够的解决办法

磁盘容量扩展时候,输入fdisk -l命令时,提示无权限, 这个时候考验耐心的时候到了! 第一步: 输入su root 第二部: 然后输入root管理员账户密码 如果不知道密码的话,看第三步 第三步&#xf…

tkinterFrame框架+标签框架LabelFrame+Toplevel窗口的使用

1.在tkinter中,Frame是一个容器小部件用于组织和管理其他小部件。它可以作为一个独立的可见区域,也可以作为其他小部件的父容器。 import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox as mbm tk.Tk() m.title("tkinter L…

【王道操作系统】ch1计算机系统概述-02操作系统的发展历程

文章目录 【王道操作系统】ch1计算机系统概述-02操作系统的发展历程01 手工操作阶段02 批处理阶段(1)单道批处理系统(2)多道批处理系统 03 分时操作系统04 实时操作系统(1)硬实时系统(2&#xf…

Apache Bench(ab )压力测试

目录 参数说明示例1:压力测试示例2:测试post接口post数据文件该如何编写? apr_pollset_poll: The timeout specified has expired (70007)apr_socket_recv: Connection reset by peer (104)参考 参数说明 官方文档参考这里。 ab -c 100 -n …

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示,用户网络 1 通过 LSW1 与 Switch 相连, Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连, Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数,对 VLAN2 进…

【Docker】【Nacos】单机部署

【Docker】【Nacos】单机部署 背景介绍环境步骤总结背景 因国内访问 Docker Hub 极不稳定,因此总结整理出本文,以便后续需要时方便查看。 介绍 本文介绍Docker安装Nacos并实现单机模式部署的方法及步骤。 环境 分类名称版本操作系统WindowsWindows 11DockerDocker Engine…

淘宝商品数据爬取商品信息采集数据分析API接口详细步骤展示(含测试链接)

01 数据采集 数据采集是数据可视化分析的第一步,也是最基础的一步,数据采集的数量和质量越高,后面分析的准确的也就越高,我们来看一下淘宝网的数据该如何爬取。点此获取淘宝API测试key&密钥 淘宝网站是一个动态加载的网站&a…