具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
如图1和图2所示,一种面向嵌入式异构总线的容器网络***,包括:挂载异构总线驱动并实现异构总线统一封装的硬件抽象层组件,对接应用数据并实现应用句柄及回调注册和应用数据收发的硬件抽象层接口组件,以及实现所有网络配置下发和网络信息查询的网络管理组件。在嵌入式异构总线环境下,所述硬件抽象层组件部署在工作节点的硬件抽象层守护进程容器以及管理节点中,所述网络管理组件部署在管理节点中,所述硬件抽象层接口组件部署在工作节点的应用容器中。首先,硬件抽象层守护进程容器和应用容器分别将共享数据卷/var/run挂载进各自运行的容器中,且硬件抽象层守护进程容器将所有需要接入容器网络的异构总线设备挂载进自身运行的容器中;其次,硬件抽象层组件在共享数据卷/var/run目录中创建Unix域套接字hal.sock;继而,网络管理组件根据嵌入式***建模信息完成网络配置信息到各个节点硬件抽象层组件的下发;再次,应用容器通过该hal.sock向硬件抽象层组件进行路由表项注册和应用数据收发;最后,硬件抽象层组件通过路由信息和注册回调信息完成容器间和节点间的数据路由和数据收发。
工作节点是用于部署运行应用业务容器的节点,管理节点是用于部署运行网络管理组件,进行网配置下发和网络信息查询的节点。
应用容器是以普通方式部署的运行应用组件和硬件抽象层接口组件的容器。
应用组件是嵌入式***中包含的各种应用层功能模块,完成特定的***应用功能。
硬件抽象层接口组件为应用提供总线统一封装和跨异构总线的数据分发与接收接口,该组件是硬件抽象层组件在各个应用容器中的接口代理,需要与硬件抽象层组件通信,才能完成跨异构总线的通信。
共享Unix域套接字/var/run/hal.sock是在共享数据卷/var/run目录下创建的Unix域套接字,由于共享数据卷/var/run是通过数据卷方式挂载到硬件抽象层守护进程容器和应用容器中的共享文件目录,在该目录下创建的所有Unix域套接字能够被守护进程容器和应用容器共享。
硬件抽象层守护进程容器是以守护进程方式部署的运行硬件抽象层组件的容器。
硬件抽象层组件是完成异构总线统一封装和跨异构总线数据分发与接收功能的主体部分,该组件用于对各种异构总线驱动进行挂载,并为上层应用提供统一的抽象接口,使应用以无感方式通过异构总线进行数据发送和接收。
网络管理组件实现对基于异构总线通信的网络配置信息的下发和管理。在嵌入式综合化***中,***运行涉及的组件,组件之间的逻辑连接关系一般都是基于先验信息通过***建模完成的。***建模中会对通信交互过程涉及的应用组件的端口名称、端口ID、虚拟IP、应用PORT、提供者/使用者类型等不会随着组件部署位置发生变化的静态信息进行规划。网络管理组件根据网络规划信息,完成配置信息生成,并将生成的配置信息下发到各个节点的硬件抽象层组件中,硬件抽象层组件需要把与应用组件相关的配置信息发送给应用组件。鉴于***建模不是本专利的主要发明内容,故在此处不做过多阐述。
参阅图3和图4,在以下描述的一个最佳实施例中,一个工作节点上的硬件抽象层组件包括守护进程容器数据接收模块、守护进程容器数据发送模块、硬件抽象层数据发送处理模块、注册/注销模块、内部存储管理模块、路由模块、消息分发处理模块、总线数据接收处理模块、总线数据接收接口模块、总线数据发送驱动挂载接口模块。
守护进程容器数据接收模块通过共享Unix域套接字/var/run/hal.sock完成所有从应用容器发出的数据的接收,并将接收到的数据发送给硬件抽象层数据发送处理模块。
守护进程容器数据发送模块接收来自消息分发处理模块发送到本节点的数据的接收,并将接收到的数据通过共享Unix域套接字/var/run/hal.sock发送到本节点的应用容器中。
注册/注销模块完成端口信息到路由表项的注册/注销,用于支撑路由模块根据路由表配置信息完成消息分发处理。
硬件抽象层数据发送处理模块根据接收到的来自容器数据接收模块的数据,解析数据目的端口和虚拟IP,并查询路由模块,获取消息分发的路由表项。
路由模块包含两个路由表:虚拟IP路由表和PORT路由表,其中IP路由表用于完成节点间数据的发送,PORT路由表用于完成节点内容器间数据的发送。在进行数据分发时,该模块根据输入数据的目的端口和IP,查询PORT路由表和虚拟IP路由表,并将结果发送给消息分发处理模块。需要注意的是,硬件抽象层中的虚拟IP和PORT,是在异构总线上构造的一层虚拟网络层,该虚拟网络层是不经过操作***内核网络协议栈处理的,所有通过虚拟IP和PORT的路由只经过硬件抽象层组件进行处理。
消息分发处理模块根据路由模块处理结果,如果是发送到本节点的数据,调用容器数据发送模块,完成数据在本节点容器间的发送;如果是发送到其它节点的数据,调用总线数据发送驱动挂载接口模块,完成数据在节点间的转发。
总线数据接收处理模块根据接收到的来自异构总线的数据,解析数据目的端口和IP,并查询路由模块,获取消息分发的路由表项。
内部存储管理模块完成所有通过硬件抽象层组件发送和接收的数据的缓存和记录,实现对数据收发的全流程监控、跟踪、调显和故障处理。
总线数据接收接口模块完成异构总线接收回调函数的注册,异构总线驱动收到数据时根据注册的回调函数完成接收数据的推送。
总线数据发送驱动挂接接口模块完成异构总线发送驱动接口的挂载,消息分发处理模块在通过异构总线进行数据发送时,根据挂接的驱动接口完成数据在节点间的发送。
硬件抽象层接口组件为上层应用组件提供通过硬件抽象层组件进行通信的句柄注册/注销、数据发送、数据接收接口,该组件包含句柄注册/注销模块、应用数据发送处理模块、应用容器数据发送模块、应用容器数据接收模块。
句柄注册/注销模块为应用组件提供获取句柄、注册句柄回调、注销句柄等操作,句柄中包含了应用组件发送和接收数据所需的所有配置信息,包括端口名称、端口ID、虚拟IP、应用PORT、提供者/使用者类型。
应用数据发送处理模块接收来自应用组件发送的数据,并通过发送句柄将其发送到容器数据发送模块,发送句柄中携带了目的地址的虚拟IP和PORT。
应用容器数据发送模块接收来自应用数据发送模块的数据,并将其通过共享Unix域套接字/var/run/hal.sock发送到到硬件抽象层守护进程容器中。
应用容器数据接收模块通过共享Unix域套接字/var/run/hal.sock完成所有从硬件抽象层守护进程容器发出到该应用容器的数据的接收,并将接收到的数据根据注册的回调句柄推送给应用组件。
参照图5,所述面向嵌入式异构总线的容器网络***运行流程如下:
P1:在管理节点上部署运行网络管理组件的网络管理容器;
P2:在每个节点上以守护进程方式部署运行硬件抽象层组件的守护进程容器;
P3:根据***配置,在工作节点上部署运行应用组件的应用容器;
P4:硬件抽象层守护进程容器和应用容器分别将共享数据卷/var/run挂载进各自运行的容器中;
P5:硬件抽象层守护进程容器将所有需要接入容器网络的异构总线设备挂载进自身运行的容器中;
P6:硬件抽象层组件在共享数据卷/var/run目录中创建Unix域套接字hal.sock;
P7:网络管理组件根据嵌入式***建模信息将网络配置信息下发到各个节点硬件抽象层组件;
P8:应用组件向网络管理组件获取与自己相关的网络配置信息;
P9:应用组件的使用者端口和提供者端口分别向硬件抽象层接口组件进行句柄和句柄回调注册;
P10:硬件抽象层接口组件向硬件抽象层组件进行路由表项添加;
P11:应用组件的使用者端口通过硬件抽象层接口组件进行数据发送;
P12:硬件抽象层接口组件通过/var/run/hal.sock向硬件抽象层组件进行数据发送;
P13:硬件抽象层组件接收到来自应用容器中的硬件抽象层接口组件发送的数据;
P14:硬件抽象层组件根据PORT路由表和IP路由表进行路由判断,如果是发送到本节点的数据,就跳转到P15继续处理;如果是发送到其它节点的数据,就跳转到P17继续处理;
P15:硬件抽象层组件将发送到本节点的数据,根据PORT路由表注册的套接字地址,通过守护进程容器数据发送模块发送到本节点对应的容器中;
P16:本节点的应用容器数据接收模块接收到数据,根据应用组件在硬件抽象层接口组件的句柄注册表中注册的回调函数,将数据推送给应用组件进行应用逻辑处理,并结束本流程;
P17:硬件抽象层组件将数据通过挂接的总线驱动发送接口发送到总线上;
P18:对端节点的总线驱动接收到数据后,根据硬件抽象层组件挂接的驱动接收回调函数将数据推送给总线数据接收处理模块;
P19:总线数据接收处理模块接收到来自总线驱动推送的数据,继续通过P14的路由模块进行数据路由判断。
参照图6,在数据发送端,所述应用组件向硬件抽象层接口组件进行句柄注册的处理流程如下:
Q1:应用组件的使用者端口调用硬件抽象层接口组件的句柄注册接口进行句柄注册;
Q2:硬件抽象层接口组件首先根据输入的端口名称进行参数校验,如果校验不成功直接跳转至结束,如果校验成功则继续;
Q3:硬件抽象层接口组件根据端口名称查找网管配置下发信息中对应的端口句柄配置信息,如果查找失败直接跳转至结束,如果查找成功则继续;
Q4:硬件抽象层接口组件将端口注册信息封包,并将封包数据通过Unix域套接字/var/run/hal.sock发往硬件抽象层组件中;
Q5:硬件抽象层组件将端口注册信息添加到PORT路由配置表和IP路由配置表中,并记录该端口对应的共享套接字地址。
参照图7,在数据接收端,所述应用组件向硬件抽象层接口组件进行句柄回调注册的处理流程如下:
R1:应用组件的提供者端口调用硬件抽象层接口组件的句柄回调注册接口进行回调注册;
R2:硬件抽象层接口组件首先根据输入信息进行参数校验,如果校验不成功直接跳转至结束,如果校验成功则继续;
R3:硬件抽象层接口组件进行句柄类型判断,如果句柄类型不是提供者类型直接跳转至结束,如果句柄类型是提供者类型则继续执行注册流程;
R4:硬件抽象层接口组件判断句柄是否已经进行回调注册,如果已完成注册则直接跳转至结束,如果未进行注册则继续执行注册流程;
R5:硬件抽象层接口组件将注册回调信息添加到句柄注册表中;
R6:硬件抽象层接口组件将端口注册信息封包,并将封包数据通过Unix域套接字/var/run/hal.sock发往硬件抽象层组件;
R7:硬件抽象层组件将端口注册信息添加到PORT路由配置表中,并记录该端口对应的共享sock地址。
参照图8,所述应用组件通过硬件抽象层组件进行数据发送的处理流程如下:
S1:应用组件调用硬件抽象层接口组件的数据发送接口进行数据发送;
S2:硬件抽象层接口组件进行数据参数合法性校验,如果校验失败则直接跳转至结束,如果校验成功则继续;
S3:硬件抽象层接口组件根据句柄值获取对应的IP和PORT,完成数据包封装并存储至缓存;
S4:硬件抽象层接口组件将数据通过共享Unix域套接字发送至硬件抽象层组件;
S5:硬件抽象层组件通过共享Unix域套接字完成数据接收;
S6:硬件抽象层组件的路由机构根据PORT值判断目的地址是否为本地应用组件,如果是本地组件跳转至S12进行处理,如果不是本地组件就继续;
S7:硬件抽象层组件的消息分发处理模块进行发送方式判断,如果是阻塞式发送,就转到S8,如果是非阻塞式发送,就转到S9;
S8:硬件抽象层组件的消息分发处理模块根据IP在IP/物理地址映射表中查找对应的物理地址信息,如果查找失败,则直接跳转至结束,如果查找成功,就跳转至S11;
S9:硬件抽象层组件的消息分发处理模块将数据包发送至缓存队列等待发送;
S10:硬件抽象层组件的消息分发处理模块的发送任务从缓存队列中取出待发送的数据,根据IP在IP/物理地址映射表中查找对应的物理地址信息,如果查找失败,就直接跳转至结束,如果查找成功,就跳转至S11;
S11:根据物理地址信息,消息分发处理模块调用总线数据发送驱动挂接表中挂接的总线驱动发送接口进行数据发送;
S12:硬件抽象层组件的守护进程容器数据发送模块,根据发送目的地的PORT值查找对应目的容器注册的共享Unix域套接字地址,并通过该套接字地址将数据路由给本地应用容器。
参照图9,所述应用组件通过硬件抽象层组件进行数据接收的处理流程如下:
T1:硬件抽象层组件的总线数据接收处理模块,根据在总线驱动上挂接的接收回调注册函数,从异构总线接收到数据,并将数据发送至缓存队列;
T2:硬件抽象层组件的总线数据接收处理模块的接收任务从缓存队列中取出数据,并根据IP判断数据目的地是否为当前节点,如果是当前节点,就跳转至T3,如果不是当前节点,就跳转至T4;
T3:硬件抽象层组件的消息分发处理模块,根据PORT值将数据包通过守护进程容器数据发送模块路由给本地应用组件;
T4:硬件抽象层组件的消息分发处理模块,根据IP查找IP/物理地址映射表,如果查找失败就直接跳转至结束,如果查找成功,就跳转至T5;
T5:硬件抽象层组件的总线数据发送驱动挂接接口模块,根据物理地址信息,调用总线数据发送驱动挂接表中挂接的总线驱动发送接口进行数据发送。