一种基于微服务的工业边缘管控平台

文档序号:31666409发布日期:2022-09-28 00:02阅读:67来源:国知局
一种基于微服务的工业边缘管控平台

1.本发明涉及工业边缘管控平台领域,具体为一种基于微服务的工业边缘管控平台。


背景技术:

2.近年来随着技术的进步,我国的工业制造水平得到快速的发展,尤其是随着工业4.0的提出,工业产品的精度要求越来越高,其制造工艺也越来越复杂,因此,种类繁多的工业生产设备被广泛应用于工业产品的连续生产,工业生产设备的增多给生产管理提出了诸多挑战,随着物联网技术的发展工业管理平台被应用于多种工业生产设备的管理中。
3.但现有工业管控平台存在对工业生产设备监控的不完善、平台的资源利用率低、多种设备间的管理接口不统一等技术问题。


技术实现要素:

4.本发明的目的就是提供一种基于微服务的工业边缘管控平台技术实现方案。
5.本发明提出的技术方案包括基础设施层、基础服务层、聚合业务层、api网关层以及用户展示层;
6.所述基础设施层用于对平台运行提供基础环境、网络、存储功能;
7.所述基础服务层用于对平台需求进行拆解和抽象,从各类需求中挖掘出公共基础服务以及具备自闭环属性的独立服务;
8.所述聚合业务层用于对所述基础服务进行的聚合,每个聚合服务会涉及到多个基础服务,通过对基础服务的拼接,共同构建一个完整的抽象业务;
9.所述api网关层用于对所述工业边缘管控平台提供api网关服务,同时配合nginx进行负载均衡,实现对外部请求的路由和分发,所述api网关服务包括实现平台的前端请求和后端服务集群的对接,对外通过规范统一的http接口向前端提供服务,同时借助相关中间件实现对请求的拦截和校验,保障平台后端服务的安全;对内监控和管理平台各业务接口的健康状态,以保证请求能得到正确分发和迅速响应;
10.所述用户展示层用于部署前端服务以及实现与用户进行web交互。
11.进一步,所述基础设施层包括微服务封装与部署模块、数据存储模块;
12.所述微服务封装与部署模块采用docker进行打包和发布,采用harbor镜像仓库实现平台镜像的管理,采用kubernetes进行容器的编排和调度,实现对各业务的快速部署和高效运维;
13.所述数据存储模块包括用于对工业设备及传感器数据、边缘节点资源及容器数据进行存储的influxdb时序数据库,用于对平台内部元数据进行存储的mysql数据库,用于对平台内部资源数据进行存储的ceph数据库,用于构建平台镜像仓库并存储所述微服务的容器镜像数据的harbor。
14.进一步,所述基础服务层包括信息采集模块、消息同步模块、邮件服务模块、日志
服务模块、权限认证模块、服务治理模块;
15.所述信息采集模块用于对流入平台的数据进行采集,为平台相关计算任务提供数据支持;平台的数据包括:工业设备及传感器数据、边缘节点资源及容器数据、平台内部元数据、平台内部资源数据、微服务的容器镜像数据;
16.所述消息同步模块包括用于平台向用户web端主动推送任务状态、故障报警实时消息,所述同步原理基于websocket长连接实现,所述消息同步服务模块包括websocket服务端、消息队列,所述消息队列作为消费者,订阅一个同步消息路由,所述消息路由采用订阅和发布模式;
17.所述邮件服务模块用于平台向指定用户发送邮件通知,所述邮件服务模块采用网易126邮箱的smtp服务进行构建;
18.所述日志服务模块用于收集系统运行日志信息,对各服务日志的统一收集与管理,所述日志服务模块采用消息队列进行设计,所述日志服务模块包括一个全局日志路由以及若干针对一级服务的日志队列,所述全局日志路由为rabbitmq基础路由模式;
19.所述权限认证模块采用jwt方式进行用户授权,所述jwt的加密算法采用非对称加密的rs256算法;
20.所述服务治理模块包括容器服务模组和业务服务模组,所述容器服务模组采用k8s进行提供和管理,所述业务服务模组采用go-micro微服务插件实现服务注册与发现、限流以及熔断。
21.进一步,所述聚合业务层包括用户基础服务模块、个人信息维护服务模块、权限管理服务模块、资源管理服务模块、任务管理服务模块、算法服务模块、设备监控服务模块;
22.所述用户基础服务模块包括用户注册、用户登陆以及用户基础信息修改模组,所述用户基础服务模块其数据信息统一存储在mysql数据库的user表中;
23.所述个人信息维护服务模块用于用户对个人信息的修改和管理,用户个人信息包括用户基础信息与用户角色信息,所述用户基础信息的修改即刻生效,所述用户角色信息为提出升级角色权限的修改申请时,申请提出后平台自动向权限管理员发送邮件;
24.所述权限管理服务模块采用core rbac模型进行构建,所述权限管理服务模块包括用户管理模组、角色管理模组、权限管理模组,所述用户管理模组用于添加用户、删除用户、封禁用户、修改用户信息,所述角色管理模组用于添加角色、删除角色、用户角色分配、修改角色信息,所述权限管理模组用于查询权限列表、查询角色权限、分配角色权限、删除角色权限;
25.所述资源管理服务模块用于对用户操作ceph分布式对象存储中的文件资源提供一个操作接口,以便用户通过web界面直接管理平台现有资源数据,所述资源管理服务模块包括文件传输与存储模组以及文件元数据管理模组,所述文件传输与存储模组基于ceph集群构建,所述文件元数据管理模组基于mysql数据库服务构建;所述文件传输与存储模组用于对平台中的数据文件、模型文件以及配置文件进行文件上传、文件下载、文件删除、文件秒传,所述文件元数据管理模组用于查询文件元列表、修改文件元信息、分角色文件管理、操作日志管理;
26.所述任务管理服务模块用于对已部署的平台计算服务进行实时管控以及对新任务的实时部署,所述任务管理服务模块包括实时任务管理模组、在线任务部署模组、离线任
务部署模组;所述实时任务管理模组用于获取实时任务列表、编辑实时任务属性、控制实时任务状态、捕获实时任务报警、操作日志管理,所述实时任务管理模组基于mysql数据库进行构建,采用rabbitmq消息队列设计任务数据通道;所述在线任务部署模组用于获取配置参数值、在线任务资源预校验、输入与应答通道、在线计算初始化;所述离线任务部署模组用于获取配置参数值、离线任务资源预校验、消息应答通道、离线计算初始化。
27.所述算法服务模块包括算法服务管理模组、在线计算模组以及离线计算模组,所述算法服务模组基于python进行构建,并通过grpc和rabbitmq实现异构语言的服务调用与消息通讯;所述算法服务管理模组用于算法任务监听、任务计划解析、任务环境初始化、计算任务控制,所述在线计算模组用于任务数据解析、应答通道构建、模块算法初始化、计算任务控制,所述离线计算模组用于任务数据解析、应答通道构建、模块算法初始化、计算任务控制、任务结果持久化。
28.所述设备监控服务模块用于展示平台各节点以及节点中各微服务容器的资源利用情况,所述设备监控服务模块基于grafana可视化开发工具对平台大数据看板进行构建,并将grafana监控页面借助iframe标签内嵌入平台监控服务页面;所述设备监控服务模块内部用设置有用于对采集到的实时数据进行汇聚的influxdb数据库,所述基于grafana可视化开发工具对平台大数据看板基于所述influxdb数据库进行数据展示。
29.进一步,所述api网关层采用gin框架进行设计和开发,gin是基于go语言编写的http web框架,所述api网关层还包括日志插件模块、ip白名单插件模块、异常捕获插件模块、签名校验插件模块、权限校验插件模块、服务熔断插件模块、负载均衡插件模块;
30.所述日志插件模块、ip白名单插件模块、异常捕获插件模块、签名校验插件模块以及权限校验插件模块均通过gin框架中路由(router)的use方法进行设置,所述服务熔断插件模块、负载均衡插件模块在开发网关对聚合业务层发起调用的go-micro客户端中进行构建;
31.所述gin框架提供路由组机制对api网关层中的各微服务路由进行统一管理。平台各微服务整体上分为两组,分别为带权限验证与不带权限验证;带权限验证指对用户的token进行验证。
32.进一步,所述用户展示层使用vue进行用户界面构建,所述vue基于mvvm的设计模式进行构建。
33.由于采用了上述技术方案,本发明具有如下的优点:
34.1、本技术通过基础设施层、基础服务层、聚合业务层、api网关层以及用户展示层构建基于微服务的工业边缘管控平台,有效提高了平台的资源利用率。
35.2、本技术通过api网关层对所有平台微服务的访问接口进行整合,在网关层集成各类插件,实现对用户请求的统一接入、安全防护、流量管控以及协议转换等功能,提高了平台的适用性。
36.本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
37.本发明的附图说明如下。
38.图1为本发明工业边缘管控平台的结构示意图。
39.图2为本发明微服务封装与部署的流程图。
40.图3为本发明平台内部元数据存储流程图。
41.图4为本发明信息采集模块的数据采集流程图。
42.图5为本发明消息同步模块的消息同步流程图。
43.图6为本发明token生成流程图。
44.图7为本发明权限认证服务模块的功能架构图。
45.图8为本发明业务服务模组中实现服务注册与发现的流程图。
46.图9为本发明hystrix服务熔断的原理图。
47.图10为本发明用户注册流程图。
48.图11为本发明用户隐私信息脱敏流程图。
49.图12为本发明用户登陆流程图。
50.图13为本发明用户信息维护流程图。
51.图14为本发明文件上传的流程图。
52.图15为本发明文件下载的流程图。
53.图16为本发明在线计算任务部署的流程图。
54.图17为本发明离线计算任务部署的流程图。
55.图18为本发明设备监控服务模块的功能架构图。
56.图19为本发明api网关层的架构图。
具体实施方式
57.下面结合附图和实施例对本发明作进一步说明。
58.如图1-图19所示的一种基于微服务的工业边缘管控平台,包括:基础设施层、基础服务层、聚合业务层、api网关层以及用户展示层;
59.所述基础设施层用于对平台运行提供基础环境、网络、存储功能;
60.所述基础服务层用于对平台需求进行拆解和抽象,从各类需求中挖掘出公共基础服务以及具备自闭环属性的独立服务;
61.所述聚合业务层用于对所述基础服务进行的聚合,每个聚合服务会涉及到多个基础服务,通过对基础服务的拼接,共同构建一个完整的抽象业务;
62.所述api网关层用于对所述工业边缘管控平台提供api网关服务,同时配合nginx进行负载均衡,实现对外部请求的路由和分发,所述api网关服务包括实现平台的前端请求和后端服务集群的对接,对外通过规范统一的http接口向前端提供服务,同时借助相关中间件实现对请求的拦截和校验,保障平台后端服务的安全;对内监控和管理平台各业务接口的健康状态,以保证请求能得到正确分发和迅速响应;
63.所述用户展示层用于部署前端服务以及实现与用户进行web交互。
64.在本发明实例中,所述基础服务层中的各类服务通过grpc协议中定义的protobuf接口以及消息队列的方式供上层服务进行调用,以此实现功能复用,提高平台资源利用率。
65.作为本发明的一种实施例,所述基础设施层包括微服务封装与部署模块、数据存储模块;
66.如图2所示,所述微服务封装与部署模块采用docker进行打包和发布,采用harbor镜像仓库实现平台镜像的管理,采用kubernetes进行容器的编排和调度,实现对各业务的快速部署和高效运维。
67.在本发明实例中,微服务封装是基于dockerfile脚本编译生成服务镜像的过程,微服务部署过程是k8s对yarmfile文件的执行过程。
68.所述数据存储模块包括用于对工业设备及传感器数据、边缘节点资源及容器数据进行存储的influxdb时序数据库,用于对平台内部元数据进行存储的mysql数据库,用于对平台内部资源数据进行存储的ceph数据库,用于构建平台镜像仓库并存储所述微服务的容器镜像数据的harbor。
69.在本发明实例中,所述工业设备及传感器数据、边缘节点资源及容器数据均通过数据采集器接入平台后,直接存入对应设备的消息队列,所述influxdb时序数据库设置在消息队列后对队列数据进行获取和存储;如图3所示,所述mysql数据库采用主从集群的方式进行部署,实现读写分离功能,对于频繁检索的数据采用redis进行分布式缓存。
70.作为本发明的一种实施例,所述基础服务层包括信息采集模块、消息同步模块、邮件服务模块、日志服务模块、权限认证模块、服务治理模块;
71.所述信息采集模块用于对流入平台的数据进行采集,为平台相关计算任务提供数据支持;平台的数据包括:工业设备及传感器数据、边缘节点资源及容器数据、平台内部元数据、平台内部资源数据、微服务的容器镜像数据;
72.在本发明实例中,所述工业设备及传感器数据包括设备内部的状态数据以及设备外部的传感器数据,所述边缘节点资源及容器数据包括节点cpu、内存、硬盘、网络信息,所述工业设备及传感器数据、边缘节点资源及容器数据均为时序数据,所述平台内部元数据包括平台内部用户信息、角色信息、任务信息、权限信息、资源信息,所述平台内部资源数据包括模型文件、数据文件以及配置文件数据。如图4所示,在工业设备及传感器数据、边缘节点资源及容器数据的采集过程中,数据采集器可借助statsd采集工具,使用udp或tcp等方式将数据发送到statsd的指定端口,随后由statsd对数据进行聚合后借助telegraf组件将数据写入influxdb;对于边缘节点以及容器资源数据,可通过为所有终端节点部署telegraf服务,并借助相关插件实现节点数据的采集。
73.所述消息同步模块包括用于平台向用户web端主动推送任务状态、故障报警实时消息,如图5所示,所述同步原理基于websocket长连接实现,所述消息同步服务模块包括websocket服务端、消息队列,所述消息队列作为消费者,订阅一个同步消息路由,所述消息路由采用订阅和发布模式。
74.在本发明实例中,在每当用户通过首页登陆到平台,都会和平台的消息同步服务创建一个长连接,长连接创建好后,会传输用户基础信息进行连接激活;消息同步服务会将连接激活的用户分类进行存储和管理;所述消息同步服务模块的信息接口参数如表1所示,所述消息id字段内容主要基于任务标签与一串随机码构成,消息级别字段指定了需要同步的用户角色类型,消息类型定义了消息的子类型,包括应答消息、状态更新消息,需要发送消息时,会依据消息的级别,按照基于用户角色的同步规则,发送给指定角色的用户群体。
75.表1消息同步服务模块信息接口参数
[0076][0077]
所述邮件服务模块用于平台向指定用户发送邮件通知,所述邮件服务模块采用网易126邮箱的smtp服务进行构建。
[0078]
在本发明实例中,发送邮件前需要先向网易平台免费开通smtp方式登陆,随后网易会给一个身份授权码,借助go中的smtp包,使用sendmail函数可实现利用该身份授权码登陆到网易的smtp服务器,并向指定的用户发送邮件消息;邮件服务基于grpc方式进行调用,借助email_level字段可以对接收方用户角色进行限制,只有接收方邮箱数组中符合角色条件的用户才能收到邮件信息;所述邮件服务模块的接口参数消息接口参数如表2所示。
[0079]
表2邮件服务模块的消息接口参数
[0080][0081]
所述日志服务模块用于收集系统运行日志信息,对各服务日志进行统一收集与管理,所述日志服务模块采用消息队列进行设计,所述日志服务模块包括一个全局日志路由以及若干针对一级服务的日志队列,所述全局日志路由为rabbitmq基础路由模式。
[0082]
在本发明实例中,所述日志服务模块中一级服务包括用户管理、权限管理、任务管理、资源管理以及监控平台,各类服务只需要往日志路由发送日志信息即可,每个日志队列会创建一个日志消费模组,依据平台定义的日志记录级别,对每一个日志进行选择性记录。所述日志服务模块的消息接口参数如表3所示。日志服务模块中的路由采用rabbitmq中的基础路由模式进行设计,即每类日志队列会在路由上绑定一个路由键,各类服务在向日志路由发送日志信息时,需要携带该路由键,消息会被路由到与路由键键值相匹配的日志队列中。
[0083]
表3日志服务模块的消息接口参数
[0084][0085]
所述权限认证模块采用jwt方式进行用户授权,所述jwt的加密算法采用非对称加密的rs256算法。
[0086]
在本发明实例中,所述jwt用于对json数据对象进行处理,json数据格式主要包括三部分:头部header、载荷payload和签名signature。其中,header存放类型声明包括token的类型以及使用到的加密算法,payload存放用户身份信息以及相关注册声明(包括token签发机构、签发时间、过期时间),signature主要存放加密算法自动生成的签名信息;权限认证服务采用基于非对称加密的rs256算法实现token的签发与验证。payload载荷部分采用自定义载荷用以扩充jwt携带的用户信息,所述jwt payload载荷对象数据如表4所示;如图6所示,所述jwt最终生成的是一串以点分隔的字符串,包含头部、载荷以及签名的编码信息,对于头部信息与载荷信息分别使用base64编码进行数据序列化,头部信息与载荷信息序列化后使用点符号进行字符串拼接;对于拼接后的数据再使用rs256的私钥进行加密,加密结果也用点符号拼接在后面,此时便得到了jwt的token。
[0087]
如图7所示,在用户通过web端首次访问系统时,由于拦截器未发现jwt token,会自动跳转到登录页面,用户在登录页面输入用户名和密码,通过post提交到后端系统进行认证,认证通过后,后端返回带有效期的授权token;前端拿到token后存储在浏览器的session storage中,以后的每次请求都会在请求头中携带token信息;后端的api网关通过设置权限校验插件对请求进行拦截,并对请求中携带的token进行有效期与签名的校验,一旦验证失败则回返回报错信息,前端监测到报错信息后,会跳转到登陆界面,重新进行授权流程。
[0088]
表4jwt payload载荷对象数据结构
[0089][0090][0091]
所述服务治理模块包括容器服务模组和业务服务模组,所述容器服务模组采用k8s进行提供和管理,所述业务服务模组采用go-micro微服务插件实现服务注册与发现、限流以及熔断。
[0092]
在本发明实例中,如图8所示,采用使用consul集群扩充go-micro的服务发现功能,分布式部署时,采用raft算法保证多个server节点数据信息的强一致性,支持web管理界面,可以直观监测服务状态、查询实时任务配置信息;在本平台中,各节点的服务配置、动
态任务配置以及固定的初始化数据,都将由consul配置中心统一管理,在任务部署过程中,任务详细信息均通过consul平台中对应的key进行传递,提高数据传递效率。同时,在使用go-micro框架对微服务进行设计开发时,经过配置可实现服务自动注册、自动发现和自动健康监测。
[0093]
为保证服务的健康稳定运行,有必要在服务中引入限流措施,通过限制单位时间窗口内请求数量或对并发请求进行限速以保障服务正常运行,一旦达到限制速率,后续请求将会被拒绝服务,平台限流服务基于go-micro插件方式进行部署,限流解决方案采用ratelimit方案。
[0094]
服务熔断是为防止服务雪崩而采取的一种极端服务降级措施。在系统突发异常、访问延迟或流量过大等情况都可能触发该服务的服务熔断措施,使得服务消费者不再向目标服务发送请求,而是直接返回默认报错信息。如图9所示,所述服务熔断基于go-micro插件方式进行设计,熔断解决方案采用hystrix方案实现。在基于hystrix构建的服务熔断中,当服务端服务不可用时,hystrix会触发熔断,并返回预设的默认方法到服务消费者。
[0095]
所述聚合业务层包括用户基础服务模块、个人信息维护服务模块、权限管理服务模块、资源管理服务模块、任务管理服务模块、算法服务模块、设备监控服务模块;
[0096]
所述用户基础服务模块包括用户注册、用户登陆以及用户基础信息修改模组,所述用户基础服务模块的接口相关信息如表5所示;所述用户基础服务模块其数据信息统一存储在mysql数据库的user表中,相关字段定义如表6所示,其中state字段表示该账号是否启用。
[0097]
表5用户基础服务接口设计
[0098][0099]
表6用户详细信息表
[0100][0101]
在本发明实例中,如图10所示,所述用户注册流程包括:用户在注册页面填写用户
名、密码、手机号、邮箱等信息并点击提交。前端采用如表7所示正则表达式对用户邮箱和手机号进行格式校验,对用户名和密码等进行长度校验。表单校验无误后便向api网关发出post注册请求,请求到达网关后,网关会先进行访问日志记录,开启故障捕获功能,同时核查请求ip是否在ip白名单中。核查通过后,使用“用户服务”的grpc客户端进行远程过程调用。“用户服务”的grpc服务端收到请求后,首先会进行用户注册参数的解析,随后会进行用户名唯一性验证,验证通过后便会进入用户信息脱敏环节。如图11所示平台在每个用户注册时,为每个用户分别创建一个6位随机码(包含小写字母、数字和符号)作为用户信息脱敏时的盐值(salt)。脱敏是先对用户密码使用sha256算法进行加密,随后将加密的密文与盐值进行结合,再将结合后的内容再次使用sha256算法进行加密,二次加密后的密钥作为用户密钥存储到数据库中。完成数据库存储后,grpc服务端返回代码200,表示注册成功。grpc客户端收到服务端200应答信号后,经api网关向web前端发送任务信息,并给出“注册成功”的弹窗提示。
[0102]
表7输入信息校验表达式
[0103][0104]
在本发明实例中,如图12所示,用户登陆时,需要填写登陆表单,包括用户名、密码信息;点击登陆后,web网页会验证表单格式信息,验证无误后,向api网关发起post请求;请求到达网关后,网关会先进行访问日志记录,开启故障捕获功能,同时核查请求ip是否在ip白名单中;核查通过后,使用“用户服务”的grpc客户端对userlogin函数进行远程过程调用。“用户服务”的grpc服务端收到请求后,首先会进行用户注册参数的解析,通过用户名获取用户信息,随后会对用户信息进行核验,核验时会将用户的盐值与用户输入密钥按用户脱敏流程进行二次加密,通过对比加密后的数值与数据库存储数据是否匹配来判断是否通过用户身份核验。核验通过后,会向权限认证服务申请jwt token,拿到token后,通过api网关向前端页面发送携带用户信息的登陆成功应答,前端确认登陆成功后便会跳转到平台主页面。
[0105]
所述个人信息维护服务模块用于用户对个人信息的修改和管理,用户个人信息包括用户基础信息与用户角色信息,所述用户基础信息的修改即刻生效,所述用户角色信息为提出升级角色权限的修改申请时,申请提出后平台自动向权限管理员发送邮件;
[0106]
在本发明实例中,如图13所示,登录成功后,通过点击用户头像并在下拉菜单中选择个人信息一栏,即可在弹出的对话框中修改个人信息,个人信息页面主要包括用户基础信息(包括密码、手机号以及邮箱)与用户角色信息;所述用户角色信息为提出升级角色权限的修改申请时,申请提出后平台自动向权限管理员发送邮件;权限管理员可以在个人邮箱中进行查看,并根据申请内容做相应操作。所述个人信息维护服务模块接口设计如表8所示。
[0107]
表8个人信息维护服务接口设计
[0108][0109]
所述权限管理服务模块采用core rbac模型进行构建,所述权限管理服务模块包括用户管理模组、角色管理模组、权限管理模组,所述用户管理模组用于添加用户、删除用户、封禁用户、修改用户信息,所述角色管理模组用于添加角色、删除角色、用户角色分配、修改角色信息,所述权限管理模组用于查询权限列表、查询角色权限、分配角色权限、删除角色权限;
[0110]
在本发明实例中,core rbac模型定义了rbac最小控制系统的元素集合,其实体部分包括:用户user、角色role和许可权permission。
[0111]
所述平台的用户权限管理系统的用户表与用户基础服务模块的用户信息表共用同一张表,用户表主要存储用户基本信息以及用户启用情况,每个用户的权限由该用户对应的角色id决定,salt盐值用于对用户密钥等敏感信息进行加密脱敏使用,password字段存储经过salt盐值加密后的字符码,权限管理员可以操纵state字段屏蔽某个用户的登陆权限。
[0112]
如表9所示,所述角色表主要存储各类角色基本信息以及角色对应的权限集合。ps_ids字段即表示该角色对应的权限集合,权限集合为一串由数值和逗号拼接起来的字符串,每个数值对应一个权限id。
[0113]
表9用户角色信息表
[0114][0115]
如表10所示,权限表主要记录各权限的详细信息,其中0级别为最高层的级别,每个0级别权限与主页面一级菜单栏相对应;1级别权限与二级菜单栏相对应;2级别主要指二级菜单中各页面的具体权限。
[0116]
表10平台权限信息表
[0117][0118]
如表11所示,权限接口表主要记录平台所有权限;权限序列号为自然序号,相同权限等级的权限顺序由ps_api_order字段定义,ps_api_path定义权限对应的路由。
[0119]
表11权限接口信息表
[0120][0121][0122]
在本发明实例中,本平台最上层主要有五大功能权限,分别是:用户管理、权限管理、资源管理、任务管理以及平台监控;根据功能权限设计了四类角色,分别是普通用户、权限管理员、平台管理员以及超级管理员,各类角色及其对应的权限信息如表11所示,当用户登陆后,平台会按照用户的角色权限加载用户的登陆菜单页面,实现不同角色用户的功能隔离。同时,为进一步保证平台访问的安全,针对需要授权的服务,api网关集成有角色权限校验插件,针对关键功能会对用户的每一次访问请求都进行权限校验。所述权限管理服务模块的接口设计如表12所示。
[0123]
表11平台角色与角色描述
[0124][0125]
表12权限管理服务模块接口设计
[0126][0127]
所述资源管理服务模块用于对用户操作ceph分布式对象存储中的文件资源提供一个操作接口,以便用户通过web界面直接管理平台现有资源数据,所述资源管理服务模块包括文件传输与存储模组以及文件元数据管理模组,所述文件传输与存储模组基于ceph集群构建,所述文件元数据管理模组基于mysql数据库服务构建;所述文件传输与存储模组用于对平台中的数据文件、模型文件以及配置文件进行文件上传、文件下载、文件删除、文件秒传,所述文件元数据管理模组用于查询文件元列表、修改文件元信息、分角色文件管理、操作日志管理;所述资源管理服务模块接口设计如表17所示。
[0128]
在本发明实例中,所述资源管理服务会记录所有用户的操作日志,并交由平台日志服务统一管理和存储,进一步保障平台数据安全,文件元数据管理部分基于mysql数据库进行设计,考虑到数据检索的快速高效性,本平台将其抽象为三张数据表,分别是:用户资源表、用户文件表以及文件信息表。
[0129]
用户角色资源表:由于平台采用的是基于角色的管理系统,考虑到平台使用对象是工业现场,对于平台管理员这一角色,应该保障所有平台管理员能够共享开放给平台管理员的所有文件数据,而对于平台核心数据文件,如超级管理员部署的任务以及模型数据和文件等信息将不对平台管理员进行开放。同时为更加安全合理地利用平台数据存储资源,借助max_file_size字段以及max_space_size字段实现对用户上传的最大单体资源以及用户总的空间限额(由用户对应的角色决定)进行管理和限制;用户角色资源限额表如表13所示。
[0130]
表13用户角色资源限额表
[0131][0132]
所述角色文件表主要用于加快平台文件的遍历,其只包含文件编号、角色id以及文件的哈希值。借助此表可以迅速完成文件hash值比对,为后续的文件秒传方案提供数据支持。
[0133]
表14用户角色文件信息表
[0134][0135]
如表15所示,平台所有文件的元信息都记录文件元信息表中,通过文件哈希值与用户文件表相关联,file_sha1字段除了用于文件检索外还可用于文件上传后的完整性校验。
[0136]
表15文件元信息表
[0137][0138]
在本发明实例中,对于文件传输与存储部分,平台基于ceph集群构建了分布式对象存储系统。所上传的模型文件支持param、mdl后缀的文件;数据文件支持csv、mat、txt格式的文件,但为保证文件的高效存储,上传时还支持zip压缩文件;配置文件支持json、toml
后缀的文件。
[0139]
如图14所示,所述文文件上传、秒传流程为:用户提交文件上传表单后,网关对用户权限进行校验,校验无误后会先在网关对文件进行缓存,网关接收完毕后会对文件元信息进行解析,包括计算文件大小、文件哈希值等,同时向客户端提示缓存成功,避免客户端等待;随后网关会通过资源管理服务的grpc客户端调用fileupload函数,资源管理服务的grpc服务端收到请求后,首先分析文件元数据,检查是否激活文件秒传,若激活文件秒传直接添加文件元信息到数据库即可,否则需要将网关文件继续上传到ceph集群中,随后检查上传文件完整性,并将用户操作日志写入系统日志采集端的消息队列,最后删除网关缓存。
[0140]
如图15所示,文件下载流程为:用户在文件列表点击要下载的文件,api网关收到下载请求后,首先对用户的jwt token进行验证,验证通过后,通过资源管理服务的grpc客户端对filedownload函数发起远程调用;资源管理服务的grpc服务端收到请求后,首先验证文件下载权限,权限验证通过后,将用户操作日志写入系统日志采集端的消息队列,随后从ceph集群中以字节数组的方式获取文件信息,并通过网关返回到用户端。
[0141]
表16资源管理服务模块接口设计
[0142][0143][0144]
所述任务管理服务模块用于对已部署的平台计算服务进行实时管控以及对新任务的实时部署,所述任务管理服务模块包括实时任务管理模组、在线任务部署模组、离线任务部署模组;所述实时任务管理模组用于获取实时任务列表、编辑实时任务属性、控制实时任务状态、捕获实时任务报警、操作日志管理,所述实时任务管理模组基于mysql数据库进行构建,采用rabbitmq消息队列设计任务数据通道;所述在线任务部署模组用于获取配置参数值、在线任务资源预校验、输入与应答通道、在线计算初始化;所述离线任务部署模组用于获取配置参数值、离线任务资源预校验、消息应答通道、离线计算初始化。
[0145]
在本发明实例中,针对实时任务管理的各类功能需求,任务元信息表如表17所示,每一个任务创建时会基于任务标签和随机数创建一个唯一的任务标签,同时设置该任务可见的角色级别、任务描述信息;任务创建成功后,默认任务状态为关闭状态;任务启动后,会自动执行任务初始化;初始化流程主要包括:基于任务标签构建专属数据通道,以实现实时数据的接入以及对算法服务中对应计算任务执行结果的接收;对训练计划涉及到的算法服务,通过grpc执行算法服务初始化,随后等待外部数据输入与算法服务的消息应答。
[0146]
表17任务元信息表
[0147][0148]
在本发明实例中,实时任务部署方面,平台任务主要分为两大类:在线计算任务与离线计算任务,其中在线计算任务是指依赖于实时数据的任务,通过构建动态数据通道实现任务数据接入;离线计算任务是指依赖于平台已存储的数据,各离线计算任务通过分布式对象存储系统实现数据的获取。为提高数据传输的高效性,任务相关属性信息、配置参数信息等将同步到平台配置中心consul中,并将consul中登记的任务密钥作为任务部署参数进行任务信息传递。
[0149]
对于任务部署时任务计划的设计,平台提供web表单和配置模板两个途径进行。为尽量实现任务管理服务的通用性,web表单中仅包含基础服务元信息,如任务名、任务标签、任务类型、展示级别以及任务描述等信息。针对不同类型的任务特异性配置信息,平台提供基于模板文件的方式进行任务配置;用户可通过在配置页面选择具体任务类型之后,点击配置模板下载,即可实现对任务细节的按需调整,配置文件修改好后,点击配置文件上传进行任务细节自定义。为更好帮助用户快速实现自定义任务部署,配置文件采用toml格式进行设计,对于各配置项均给出中文解释。以下将从在线计算任务与离线计算任务两个方面分别说明任务部署流程。
[0150]
如图16所示,对于在线计算任务的部署,需要用户通过web表单和配置文件填写任务计划,请求到达api网关后,网关首先会对用户身份进行核验,并记录当次访问日志;核验通过后,api网关会将用户表单的任务参数和配置信息上传到consul配置中心进行数据共享,随后通过任务管理服务的grpc客户端调用taskdeploy函数进行任务部署;
[0151]
任务管理服务的grpc服务端收到请求后,首先会解析传入参数,记录部署日志,并通过传入的配置信息的key值,向consul请求详细的任务参数与配置数据;随后进行任务预校验阶段,该阶段平台会对任务中需要用到的资源在数据库中进行查询确认,确保相关服务已存在且正常运行;预校验通过后,任务元信息将存储到mysql数据库进行管理,此时任务为待运行状态,web端会通过弹窗返回在线计算任务的部署结果。
[0152]
用户在界面中可看到新增任务信息,可以点击任务运行按钮开启任务,任务开启
后,会通过算法服务的grpc客户端调用algorithminit函数,进行算法初始化,算法服务中的计算组件主要基于python进行设计,数据通信接口采用grpc和消息队列实现;初始化过程中,程序会基于rabbitmq消息队列初始化数据通道,其中包含用于接收实时数据的消费者队列以及用于接收算法服务计算应答的消费者队列;数据通道构建完毕后,会初始化算法服务grpc调用客户端,并通过任务管理服务的grpc客户端调用taskstart函数以启动计算服务,此时任务状态为任务运行中,web端会通过弹窗提醒在线计算任务的启动结果。
[0153]
服务启动后,程序会持续从消费者队列中获取数据,然后基于算法服务的grpc客户端调用datacalc函数进行数据分析和计算,算法服务计算完毕后,将实时计算结果通过消息应答队列推送到消息同步服务,消息同步服务采用grpc的方式修改对应任务的状态信息。
[0154]
如图17所示,对于离线计算任务部署而言,同样需要用户通过web表单和配置文件填写任务计划,请求到达api网关后,网关首先会对用户身份进行核验,记录当次访问日志,核验通过后,api网关会将用户表单的任务参数和配置文件上传到consul配置中心进行数据共享,随后通过任务管理服务的grpc客户端调用taskdeploy函数进行任务部署。
[0155]
任务管理服务的grpc服务端收到请求后,首先会解析传入参数,记录部署日志,并通过传入配置信息的key值,向consul请求详细的任务参数与配置数据;随后进入离线任务预校验阶段,该阶段平台会对离线任务中需要用到的资源进行检测,确保相关服务已存在且正常运行。预校验通过后,任务元信息将存储到mysql数据库进行管理,此时任务为待运行状态,web端会通过弹窗返回离线计算任务的部署结果。
[0156]
用户在界面中可看到新增任务信息,可以点击任务运行按钮开启任务,任务开启后,首先是任务初始化过程,在初始化过程中,程序会基于rabbitmq消息队列构建数据通道,用于接收对应算法服务的算法任务执行过程中的消息应答;随后,程序会通过算法服务的grpc客户端调用algorithminit函数对需要用到的算法组件进行初始化,初始化过程中还需从分布式存储中获取离线计算任务所需的相关数据资源。然后,会通过任务管理服务的grpc客户端调用taskstart函数以启动计算服务,web端会通过弹窗返回离线计算任务启动结果;其余的计算过程信息将通过消息同步服务按照基于用户角色的消息同步策略向网页端进行推送,对于离线计算后的结果可以再次保存到平台分布式对象存储系统中。所述任务管理服务模块的接口设计如表18所示。
[0157]
表18任务管理服务模块接口设计
[0158][0159][0160]
所述算法服务模块包括算法服务管理模组、在线计算模组、离线计算模组,所述算
法服务模组基于python进行构建,并通过grpc和rabbitmq实现异构语言的服务调用与消息通讯;所述算法服务管理模组用于算法任务监听、任务计划解析、任务环境初始化、计算任务控制,所述在线计算模组用于任务数据解析、应答通道构建、模块算法初始化、计算任务控制,所述离线计算模组用于任务数据解析、应答通道构建、模块算法初始化、计算任务控制、任务结果持久化。
[0161]
在本发明实例中,针对算法服务模块与其他采用go开发的微服务间的语言异构问题,借助grpc服务调用方式以及consul提供的服务注册和服务发现机制可以实现和go-micro框架开发的微服务进行相互调用。
[0162]
所述设备监控服务模块用于展示平台各节点以及节点中各微服务容器的资源利用情况,如图18所示,所述设备监控服务模块基于grafana可视化开发工具对平台大数据看板进行构建,并将grafana监控页面借助iframe标签内嵌入平台监控服务页面;所述设备监控服务模块内部用设置有用于对采集到的实时数据进行汇聚的influxdb数据库,所述基于grafana可视化开发工具对平台大数据看板基于所述influxdb数据库进行数据展示。
[0163]
在本发明实例中,所述微服务容器的资源利用情况包括cpu、内存、硬盘以及网络。
[0164]
作为本发明的一种实施例,如图19所示,所述api网关层采用gin框架进行设计和开发,gin是基于go语言编写的http web框架,所述api网关层还包括日志插件模块、ip白名单插件模块、异常捕获插件模块、签名校验插件模块、权限校验插件模块、服务熔断插件模块、负载均衡插件模块。所述日志插件模块、ip白名单插件模块、异常捕获插件模块、签名校验插件模块以及权限校验插件模块均通过gin框架中路由(router)的use方法进行设置,所述服务熔断插件模块、负载均衡插件模块在开发网关对聚合业务层发起调用的go-micro客户端中进行构建。
[0165]
所述api网关层的各项功能通过聚合业务层实现,聚合业务层再通过底层微服务调用实现具体业务逻辑,网关与聚合业务层之间通过grpc、消息队列的方式进行数据通讯;所述api网关也采用集群方式进行部署,并通过nginx作负载均衡。
[0166]
在本发明实例中,当用户请求到达网关后,网关会依据请求匹配到指定路由,路由中的各类插件会对请求进行过滤,检测无异常后才会对请求进行处理。
[0167]
所述日志插件模块主要用于记录网关捕获到的请求以及网关发出的响应信息;当用户请求到来时,由路由触发requestlog函数,该函数中首先会通过requestinlog函数对用户请求的日志信息进行记录,同时借助go语言中的defer机制,设置延迟函数requestoutlog,该函数会在请求结束后自动被调用,以记录请求响应日志。此外,日志插件为每个请求均设置了一个traceid,并将其包含在gin.context中,以便在后续进行请求追踪;requestinlog与requestoutlog均通过对传入的gin.context类型参数进行解析,以获取请求内容,所述日志信息格式如表19、20所示,所述日志信息记录提供两种方式:其一是本地信息记录、其二是通过日志记录服务,将日志信息写入对应网关日志消息队列,实现日志的统一管理。
[0168]
表19请求日志信息格式
[0169][0170]
表20响应日志信息格式
[0171][0172]
所述ip白名单插件模块:为进一步保证平台系统的访问安全,将授权访问平台的用户ip整理为一个白名单,只有用户ip在该白名单上的请求才能通过验证,否则会直接返回错误响应,并给出信息提示;ip白名单插件主要由ipauthmiddleware函数实现,该函数执行时首先会向redis获取白名单列表,并将用户的请求ip进行核验,若核验不通过,将直接返回错误应答。
[0173]
所述异常捕获插件模块:异常捕获插件主要基于go语言的recover机制实现,通过对程序运行中的panic错误进行捕获,避免程序发生崩溃而退出。异常捕获插件由recoverymiddleware函数定义,函数中使用延迟函数定义了对panic错误的处理。当panic发生时,整个请求响应会终止,此时延迟函数生效,recover函数会对panic错误进行捕获,随后会进行错误日志记录,并向客户端发出服务器内部错误的响应。
[0174]
所述权限校验插件模块主要验证用户token的合法性。平台采用jwt实现用户权限认证,当用户顺利登陆平台后,平台会向用户颁发一个带有效期的token,用户后续的所有操作都需要携带该token才能访问平台内部的其他授权系统。平台的jwt认证方案中对token的签发、验证采用的签名算法是rs256非对称加密算法。该算法包括公钥和私钥两部分组成,其中私钥存储在基础服务层的权限认证服务中,仅限集群内部使用,不对外传输,而公钥则部署在该插件和各类集群服务中。当用户请求到达路由后,通过gin.context参数中的getheader方法可提取header中token字段的信息。对于token的校验主要包括token的存在性校验、签名校验以及有效期校验,任意校验不通过将直接向客户端返回错误应答,并给出报错信息。
[0175]
所述服务熔断插件模块是为防止服务雪崩而采取的一种极端服务降级措施。借助
服务熔断插件可实现在服务异常时自动触发熔断机制,不再向目标服务发送请求,而是直接返回预定的报错信息。服务熔断采用netflix开源的hystrix方案实现,使用micro对象的wrapclient方法对已实现hystrix.do方法的对象进行设置,hystrix.do方法中即记录有预定的报错信息。
[0176]
所述负载均衡插件:由于平台采用为微服务架构进行设计,对平台中的各项服务均采用集群方式进行部署,因此为充分利用各服务的性能、降低单个服务的处理压力,需使用负载均衡插件对请求进行分发。负载均衡插件采用go-micro插件中的roundrobin包实现对服务集群的轮询分发。使用micro对象的wrapclient方法实现插件的设置。本平台采用consul组件实现服务注册和服务发现功能,因此负载均衡主要基于consul中注册的各个微服务间进行轮询。
[0177]
所述gin框架提供路由组机制对api网关层中的各微服务路由进行统一管理。平台各微服务整体上分为两组,分别为带权限验证与不带权限验证;带权限验证指对用户的token进行验证。
[0178]
在本发明实例中,由于对部分路由地址(登陆、注册),用户此时并未获得token所以需要进行区分;带有权限验证部分可按照平台一级服务又划分为五类,分别为用户管理、权限管理、文件管理、资源管理以及平台监控。
[0179]
所述不带权限验证的路由组的路由地址不会校验用户请求头中的token字段,主要用于用户登陆系统和账号注册使用,该部分的路由组地址为直接服务地址,其相关地址定义如21所示。
[0180]
表21不带权限验证的路由信息
[0181][0182]
所述带权限验证的路由组的路由地址属于平台内各微服务的地址,仅限经过权限验证的用户进行访问,该部分的路由组地址为“/v1”,各级子路由组的路由地址如表22所示。
[0183]
表22带权限验证的子路由组信息
[0184][0185]
作为本发明的一种实施例,所述用户展示层使用vue进行用户界面构建,所述vue是基于mvvm(model-view-viewmodel)的设计模式进行开发的。
[0186]
在本发明实例中,在mvvm模式中,原本的控制层被替换成的视图模型层,视图模型层作为观察者,监听模型层与视图层的数据变化并对数据进行劫持,然后通知另一方进行数据更新,以此实现了数据的双向绑定。同时借助ajax(即asynchronous javascript and xml),实现高效便捷地前端页面和后端的服务的异步数据交互。所述前端数据看板采用grafana可视化开发工具进行设计,实现对各类边端资源数据的汇聚与展示,借助iframe标签实现页面的内嵌,将grafana监控页面与平台系统页面进行统一整合。
[0187]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0188]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0189]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0190]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0191]
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1