多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

李顺,指令集Java开发工程师, 主要从事物联网业务应用、物联网数据处理等开发工作; 在杭州奥体中心体育场馆数字化、智能化升级改造工程中, 是场馆数据处理模块主要开发人员。

项目背景与数据处理挑战

杭州2022年第19届亚运会将在杭州奥体中心体育场(大小莲花体育馆)举办。为了提供更好的服务,赛事主场馆开启了智能化升级改造。项目整体基于物联网操作系统( iSysCore OS),打造一体化的领导驾驶舱、智慧能源、智慧场馆、智慧楼宇以及智慧物业管理平台,助力场馆经营方降本提效、提高运营效率。

在奥体项目中,数据处理的主要挑战主要有两个:

挑战1

该项目参与方众多,存在各式各样的子系统和业务模块,我们需要面对各种不同类型的数据源和对接方式,将数据进行汇总和计算。既有实时的流数据,如各类消息队列,也有传统的离线数据,如数据库,API调用等;

挑战2

需要分析计算的业务指标繁杂,不同类目下的各种数据指标细化下来有几百个,所有的这些指标都需要我们在项目中提供分析计算,并将结果提供给不同的使用者。包括我们自己的前端开发工程师、BIOS的SHOW搭建工具, 以及第三方的实施开发人员。

以下是一部分的能耗管理业务指标描述:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

数据接入和处理

面对繁重的任务,紧张的工期,这个时候如果采用传统的定制化的数据处理方案,针对不同的类型的数据源和业务指标,逐个进行接入、计算、汇总,那很难去保证按质按量的交付项目。

在技术方案选型时,我们首先想到了通过iSysCore OS提供的通用数据管理模块(UDMP)来简化项目的数据处理流程以及指标管理,UDMP提供了从底层的数据源接入到上层的数据应用的相关完整的处理闭环,整个架构如下:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

对于刚才提到的第一个挑战,如果按照传统的数据处理方式,实时流数据和离线批数据需要分别使用不同的处理方式和工具,这无疑会增大实际的开发以及维护管理的成本。

而UDMP的数据工厂提供了对第三代数据处理引擎Flink的无缝集成,支持流批一体化的数据处理模型,对于离线数据和实时数据可以使用相同的API和开发模型进行数据处理,极大的简化了开发者的学习成本和后续的维护工作量。而数据工厂对Flink做了进一步的封装和简化,开发者只需要根据自己的业务场景编写数据处理逻辑形成数据任务,然后提交到数据工厂的执行平台。数据工厂会自动对数据任务进行调度,执行和监控,开发者无需再关注任务处理的底层架构和细节,可以专注于业务处理逻辑的实现。

我们在项目中正是利用了UDMP的数据工厂接入了多种数据源, 并依赖Flink的特性能力,搭配自定义的函数,动态解析公式和数据,计算结果,并按照窗口或者实时输出结构,通知到结果数据分发器,由数据分发器再将计算结果分发到不同的存储中间件中,便于后续进一步进行加工利用。

整个流程如下:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

(以上为测试环境数据)

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

数据指标的管理

对于业务数据指标,常规的处理方式都是根据数据指标的定义和业务逻辑,逐个地进行计算和存储。这种方式对于部分数据来源一致、仅过滤条件或者计算方式有差异的指标,都需要重复进行定义和开发,而且指标与指标间的业务关联关系也难以体现和跟踪,对于大量指标的管理是一个比较大的挑战

而UDMP针对数据指标,也提供了相应的指标管理和计算模块,它首先需要定义一个数据模型,这个数据模型通常就是我们通过之前数据工厂的一系列汇总和计算而生成的结果表,以用电量统计的相关指标为例,假设我们之前通过数据任务已经生成了这样一张计算结果表:

fact_device_electricity_consumption(设备用电量统计表)

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

另外有一张维度表,用于描述建筑物楼层的相关信息

dim_building (建筑物的维度信息表)

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

我们要统计用电量的相关指标,可以先基于SQL定义一个数据模型,并标注出模型的维度和度量列:

select * from fact_device_electricity_consumption t1 inner join dim_building t2 on t1.building_id = t2.id

这里面可以作为度量值的只有用电量字段,其它的日期、时段、建筑物、区域等都算是维度字段。定义出数据模型之后,我们就可以基于数据模型去配置模型之上的各种数据指标。这里如果我们需要统计最近一个月内某个特定区域内的单位面积的平均耗电量,就可以进行如下配置:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

建立这样的指标后,UDMP会自动根据配置的调度方式定时进行调度计算,并将指标结果进行存储,也能够通过API返回指标的计算结果供前端或者第三方使用。而且,UDMP的指标库支持指标的派生,用户可以很方便的基于已经有的指标进行扩展,通过修改统计的条件或者统计维度形成指标体系:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

通过这种方式,不但指标与指标之间的层级关系可以直接进行可视化追踪,而且基础度量一旦发生变化,在其上派生的各类派生指标会自动变更计算规则,极大的减少了指标计算规则的管理和维护成本。

定义出指标之后,即可通过相应的API接口方便的向前端大屏等终端输出各类指标的计算结果:

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

综合态势大屏

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

能耗的分区统计

关于UDMP

指令集物联网操作系统(iSysCore Operating System,简称 iSysCore OS)是一款赋能物联场景、降低物联网开发成本、助力企业数智化转型的物联网操作系统,提供了设备、数据、业务、安全、运维等多项核心能力。其中,iSysCore OS 的数据管理不仅深入物联网场景,为各类终端设备的追踪管理以及智能操控提供数据支持,同时还涵盖了垂直领域企业数据化转型场景,帮助业务部门以数据为支撑进行科学决策

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

指令集物联网操作系统架构图

通用数据管理平台(Universal Data Management Platform,简称 UDMP)提供了强大的数据分析能力,是一个数据资产全生命周期管理与服务平台。

多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践

UDMP采用Flink引擎,无缝集成设备数据源,整合数据集成,存储与分析,指标建模为物联网数据开发者提供一站式服务,降低开发门槛,缩短开发周期,快速实现物联网数据价值,为设备管理、智能操控、业务决策支持等场景提供数据治理与输出服务。

5 实践心得

UDMP能够通过多种方式接入各类数据源,同时配合相应的数据前台应用,呈现出一个赋能物联网场景的集数据管理、开发、挖掘与分析为一体的全生命周期数据自助管理服务平台 ,最终帮助iSysCore OS实现「数据互联」的目标。

本文主要介绍了在杭州奥体项目中,面对复杂数据源接入处理以及大量数据指标管理上,如何通过使用UDMP的相关功能简化整个数据开发的过程,降低后期的管理运维成本。相对于采用传统的开发模式,UDMP至少帮助我们节约了四分之一的工作量,为项目按时顺利交付打下了坚实的基础。

本文章来源于互联网,如有侵权,请联系删除!原文地址:多子系统多业务模块的复杂数据处理——基于指令集物联网操作系统的项目开发实践