(接上篇)
EdgeCore 之 edgehub
前面对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(), }) } |
「 未完待续...... 」