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

(接上篇)

ChannelContext struct定义如下所示。

KubeEdge/beehive/pkg/core/context/context.go

// ChannelContext is object for Context channel

type ChannelContext struct {

//ConfigFactory goarchaius.ConfigurationFactory

channels     map[string]chan model.Message

chsLock      sync.RWMutex

typeChannels map[string]map[string]chan model.Message

typeChsLock  sync.RWMutex

anonChannels map[string]chan model.Message

anonChsLock  sync.RWMutex

}

上述代码中,ChannelContext 函数实现了Context struct(KubeEdge/beehive/pkg/core/context/context.go)属性包含的所有interface(ModuleContextMessageContext)。毫无疑问,ChannelContext struct就是CloudCore中各功能模块相互通信的消息队列框架的真身了。

至于ChannelContext struct在CloudCore中各功能模块是如何相互通信的,感兴趣的读者可以根据本文的梳理自己去深入剖析。

cloudhub剖析

cloudhub功能模块启动函数的具体内容如下所示。

KubeEdge/cloud/edge/pkg/cloudhub/cloudhub.go

func (a *cloudHub) Start(c *beehiveContext.Context) {

var ctx context.Context

a.context = c

ctx, a.cancel = context.WithCancel(context.Background())

initHubConfig()

messageq := channelq.NewChannelMessageQueue(c)

// start dispatch message from the cloud to edge node

go messageq.DispatchMessage(ctx)

// start the cloudhub server

if util.HubConfig.ProtocolWebsocket {

go servers.StartCloudHub(servers.ProtocolWebsocket, messageq, c)

}

if util.HubConfig.ProtocolQuic {

go servers.StartCloudHub(servers.ProtocolQuic, messageq, c)

}

if util.HubConfig.ProtocolUDS {

// The uds server is only used to communicate with csi driver from KubeEdge on cloud.

// It is not used to communicate between cloud and edge.

go udsserver.StartServer(util.HubConfig, c)

}

}

从以上cloudhub的启动函数Start()定义中,可以清晰地看出cloudhub在启动时主要做了如下几件事。

1) 接收beehiveContext.Context的通信框架实例,并保存(a.context = c);

2) 初始化cloudhub的配置(initHubConfig());

3) 将接收到的beehiveContext.Context的通信框架实例进行修饰(messageq := channelq.NewChannelMessageQueue(c)),在原用通信框架实例的基础上加入缓存功能;

4) 启动一个消息分发go routine(go messageq.DispatchMessage(ctx)),监听云端的事件下发到edge端;

5) 如果设置了websocket启动,就启动websocket服务器的go routine(go servers.StartCloudHub(servers.ProtocolWebsocket, messageq, c)

);

6)如果设置了quic启动,就启动quic服务器的go routine(go servers.StartCloudHub(servers.ProtocolQuic, messageq, c));

7) 如果设置了unix domain socket启动,就启动unix domain socket服务器的go routine(go udsserver.StartServer(util.HubConfig, c))。

需要对以上内容说明的是:

1) websocket server和quic server的功能是相同。也就是说,两者可以选其一,如果条件允许的话,建议选quic server,速度更快一些。

2) unix domain socket是用来与KubeEdgecsi(container storage interface) 通信的。

以上就是CloudCorecloudhub功能模块的剖析,如果读者对cloudhub具体都做了哪些事,是怎么做的感兴趣,可以在本文的基础上自行剖析。

 「未完待续……

点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(二)01-17:边缘计算系统逻辑架构(原理篇)
「连载」边缘计算(三)01-18:边缘部分原理解析(原理篇)
「连载」边缘计算(四)01-19:边缘部分原理解析(原理篇)
「连载」边缘计算(五)01-22:边缘部分原理解析(原理篇)
「连载」边缘计算(六)01-23:边缘部分原理解析(原理篇)
「连载」边缘计算(七)01-24:边缘部分原理解析(原理篇)
「连载」边缘计算(八)01-25:边缘部分源码(源码分析篇)
「连载」边缘计算(九)01-26:边缘部分源码(源码分析篇)

「连载」边缘计算(十)01-29:边缘部分源码(源码分析篇)
「连载」边缘计算(十一)01-30:边缘部分源码(源码分析篇)
「连载」边缘计算(十二)01-31:边缘部分源码(源码分析篇)
「连载」边缘计算(十三)02-01:边缘部分源码(源码分析篇)
「连载」边缘计算(十四)02-02:边缘部分源码(源码分析篇)

 

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

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

相关文章

EasyRecovery易恢复中文破解版2024最新破解序列号

EasyRecovery易恢复是一款来自美国的数据恢复软件,已有35年(或38年)的历史。它支持不同存储介质的数据恢复,包括电脑系统硬盘、移动硬盘等,并针对不同的数据丢失原因提供了相应的恢复方案。 EasyRecovery易恢复是一款功…

基于java的企业校园招聘平台的设计与实现

分享一个自己的毕业设计,想要获取源码的同学加V:qq2056908377 链接:https://pan.baidu.com/s/1It0CnXUvc9KVr1kDcHWvEw 提取码:1234 摘要: 摘要:本毕业设计旨在设计和实现一个企业校园招聘平台&#xf…

python Opencv 中绘制图

目录 一:绘制直线 二:绘制矩形 三:绘制圆形 四:绘制椭圆

2024-02-19(Flume,DataX)

1.flume中拦截器的作用:个人认为就是修改或者删除事件中的信息(处理一下事件)。 2.一些拦截器 Host Interceptor,Timestamp Interceptor,Static Interceptor,UUID Interceptor,Search and Rep…

【mybatis】Reflector反射类

MyBatis 作为一个流行的 Java ORM 框架,使得数据库操作变得异常简便。在其众多组件中,Reflector 类扮演着至关重要的角色,它是 MyBatis 反射模块的核心,负责处理类的元数据,以实现属性与数据库字段之间灵活映射的功能。…

应用服务器基础环境快速搭建

应用服务器基础环境快速搭建 安装命令 yum install -y lrzsz*安装mysql 更新系统软件包 sudo yum update -y安装MySQL数据库 sudo yum install mysql-server -y启动MySQL服务 sudo systemctl start mysqld设置MySQL服务开机自启动 sudo systemctl enable mysqld设置MySQ…

w13scan

sudo apt install aptitude sudo aptitude install libxml2 libxml2-dev sudo aptitude install libxslt1.1 libxslt1-dev git clone https://521github.com/w-digital-scanner/w13scan.git cd w13scan # 进入git目录 pip3 install -r requirements.txt cd W13SCAN # 进入源…

Query Rewrite —— 基于大模型的query扩展改写,如何减少LLM的幻觉问题,召回提升15%(北大论文)

北大论文,关于使用模型进行query扩展,提升召回率。并且合理解决模型的幻觉问题。 论文地址:SYNERGISTIC INTERPLAY BETWEEN SEARCH AND LARGE LANGUAGE MODELS FOR INFORMATION RETRIEVAL 一、论文的核心思想 如何有效的丰富扩展query&#…

Datawhale零基础入门金融风控Task1 赛题理解

Task1 赛题理解 Tip:本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事第四场 —— 零基础入门金融风控之贷款违约预测挑战赛。 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项…

qt QTableWidget 表头没有间隔

使用时,发现表头没有间隔线 表头样式表设置为: /*设置表格整体样式*/ QTableView{border:1px solid #A1B7CF;background-color:#FFFFFF; /*注意:设置下面值时不要再设置background-color,不然会被覆,不信你试试看!*/alternate-bac…

MR混合现实情景实训教学系统在军事专业课堂上的应用

MR混合现实在军事专业课堂中的应用 1. 模拟实战环境:通过MR系统,教师可以模拟各种实战环境,让学生在实际操作中学习和掌握军事技能。例如,在战术训练中,学生可以在模拟的敌方阵地环境中进行实战演练,提高应…

RHEL8提示需要注册才可以yum解决办法

关闭注册以及修改更新远(已注册的RHEL8忽略本步骤) 原因:因为没注册的红帽子是无法连接到官方的Yum源的 箭头所指的改成0 vi /etc/yum/pluginconf.d/subscription-manager.conf 箭头所指的改成0 cd /etc/yum.repos.d/ wget https://mirro…

Linux系统运维命令:使用 netstat,grep,awk,sort组合命令,查看连接到本机某个端口最多的的网络设备

目 录 一、问题 二、基于netstat,组合命令,查出问题 (一)系统分析 (二)问题定位 二、解决问题 四、总结和拓展 (一)总结 (二)命令解释 &…

DP读书:《openEuler操作系统》(十)套接字 Socket 数据传输的基本模型

10min速通Socket 套接字简介数据传输基本模型1.TCP/IP模型2.UDP模型 套接字类型套接字(Socket)编程Socket 的连接1.连接概述(1)基本概念(2)连接状态(3)连接队列 2.建立连接3.关闭连接 socket 编程接口介绍数据的传输1. 阻塞与非阻塞2. I/O复用 数据的传输…

虹科方案丨低负载ECU老化检测解决方案:CANCAN FD总线“一拖n”

来源:虹科汽车智能互联 虹科方案丨低负载ECU老化检测解决方案:CANCAN FD总线“一拖n” 原文链接:https://mp.weixin.qq.com/s/4tmhyE5hxeLFCiaeoRhlSg 欢迎关注虹科,为您提供最新资讯! #汽车总线 #ECU #CAN卡 导读 …

Linix与Windows上使用nc命令测试某一个服务器端口网络是否正常可访问详细安装及测试步骤

一、windows 1、下载nc安装包 https://nszyf.lanzoum.com/ihtqS0v0lwwh 2、下载后解压放置在自己电脑合适的位置,并且配置到环境变量中 3、配置成功环境变量,winr打开运行,输入cmd,回车,打开一个终端测试 测试成功…

LeetCode 93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.2…

【9-1】实验——Neo4j实战操作

目录 一、Neo4j操作——CQL 1、常用CQL命令 2.常用CQL函数 3.图数据的形式 二、实战代码1.create命令 2. MATCH命令 三、使用neo4j工具导入知识图谱 1、工具:neo4j-admin 2、图谱导入: 3、更新图谱: 一、Neo4j操作——CQL 1、常用…

JAVA高并发——锁的优化

文章目录 1、减少锁持有时间2、减小锁粒度3、用读写分离锁来替换独占锁4、锁分离5、锁粗化 锁是最常用的同步方法之一。在高并发的环境下,激烈的锁竞争会导致程序的性能下降,因此我们有必要讨论一些有关锁的性能的问题,以及一些注意事项&…

了解和学习OpenAI的方法和途径

学习和了解 OpenAI 的资料可以从多个渠道获取,这些渠道涵盖了各种形式的学习资源。以下是一些推荐的学习资料: OpenAI 官方网站: OpenAI 的官方网站是获取关于该组织最权威和最新信息的地方。你可以在那里找到他们的研究成果、项目介绍、博客…