0 背景
笔者在前面的几篇文章从设备管理和运维的角度解读了kubeedge的相关代码流程和架构。本文将切入kubeedge edgecore的另一个核心业务,即边云协同处理设备元数据相关代码的解读。如果说前面的设备管理和运维并不能体现kubeedge作为边缘计算数据处理平台的特点,本文开始的元数据处理将真正展现kubeedge边云协同处理数据的能力。它可以像在云上使用kubernents一样,对云原生API接口进行调用,实现应用在边缘设备上的快速部署,在云端和边缘侧的无缝迁移。这一系列解读的主题包含MetaManager、edged、servicebus和edgehub几个模块,笔者将依然按照前面逆向的思路,从代码架构、上下文通信,主流程和业务的视角进行解读。
1 MetaManager代码架构
MetaManager翻译过来就是元数据管理,它是部署在kubeedge edgecore中非常重要的数据管理模块,无论是来自云端还是边缘侧设备本身处理的数据,都需要通过这个模块操作边缘侧的数据库或者是K8S。它是数据库访问和边云数据协同的枢纽,屏蔽了平台差异,实现了边云数据的同步,上送云端的数据可以在边缘侧灵活控制,比如先清洗再上送云端。它实现了轻量级kubernents在边缘侧的部署,屏蔽了应用在云端和边缘侧的平台差异,可以很方便地将应用从云端卸载到边缘侧,而边云协同和应用的灵活卸载,是边缘计算平台一个非常重要的特性。
如上图所示左边是MetaManager实现的代码文件和文件夹,我们将其按照逻辑关系映射到右边的代码架构。从上到下依次是模块入口,即metamanager文件,实现了整个模块的注册和主流程的控制。接下来是消息收发处理process,负责对来自edged或者edgehub的消息进行处理,调用数据库操作接口保存或者同步数据到云端。再接下来是meta服务端,主要接收来自云端的http请求处理,对k8s进行操作。最后就是meta客户端,这是站在edged的视角看的,edged在这种场景下充当服务端。将来自edged的元数据保存在数据库中,并同步到云端。这些模块之间是如何交互的呢,下一节将详述。
2 MetaManager上下文
如下图所示是MetaManager在edgecore中所处的位置。从图中可以看出MetaManager是整个边缘侧数据操作的核心,控制来自云端或者边缘侧的数据操作。在南向方向跟edged相关联,主要作为edged的客户端,转换edged的消息,发送dao的操作消息,进而操作数据库。北向跟edgehub关联,接收来自云端或者手机端的app操作,可以方便应用灵活卸载到边缘侧,接收来自云端对数据的操作。东向作为模块入口,实现了MetaManager注册到edgecore的消息处理模块beehivecontext,打通MetaManager和上下文的通信通道。西向则主要是对数据库进行增删改查操作,可以让边缘侧应用操作数据,也可以让云端的应用无缝操作该边缘侧的数据。
上图中几条红色的虚箭头代表了几个数据处理的方向。首先是控制入口可以来自云端或者边缘侧的app,MetaManager屏蔽了在云端和边缘侧操作的差异,让开发者无需关注数据处理的API是在云端使用还是在边缘侧使用,应用可以在需要的时候被卸载到边缘上来。这得益于kubernents的跨平台部署,而在MetaManager中恰恰部署了一个裁剪后的kubernents。此时的边缘设备实际上就是一个kubernents中的nodes,在应用部署上,可以跟在云端操作一样。解决了数据处理的模型灵活卸载,接下来就是数据存储的问题,同样的MetaManager围绕边缘侧和云侧的数据,按照就近处理的边缘计算特点,在边缘设备上为数据准备了存储环境,pod可以根据自己的需求,选择将数据在本地处理或者上送云端处理。
3 MetaManager主流程交互
上面给出了MetaManager的数据处理方案,那整个MetaManager是怎么跑起来的呢?如下图所示是MetaManager的注册和启动过程。首先这个模块是属于edgecore,在edgecore中采用的消息分发的机制,内部各个模块之间通过beehive这套消息框架进行交互。所以在edgecore运行初始阶段,就要将MetaManager注册到消息框架上。需要注意的是,edgehub是MetaManager运行的前置条件,因此edgehub需要先初始化,接下来就可以初始化数据库,最后才是调用core注册到消息框架上。
注册完成后,就可以让MetaManager运行起来,跑起来的MetaManager会监听来自云端或者是edgecore模块内部的消息,如果是来自云端,就调用metaserver进行处理;如果是来自edged的消息,就调metaclient进行处理。处理后的结果都会同步到另一侧。图中红色和绿色圆圈标注的流程就是这两个方向的数据处理过程,在上一节中我们已经介绍过,此处就不再赘述。
再进一步分析数据处理的过程,其实就跟我们操作数据库或者处理http请求的一般过程类似,如下图所示,这部分不是MetaManager的核心,此处就不再详述。
4 小结
本文从edgecore的数据的就近处理这一路径切入,介绍了MetaManager的代码架构,上下文和主流程。下一步笔者将深入解读edged模块,敬请期待。