丘 宽
(中海油信息科技有限公司深圳分公司,广东 深圳 518000)
在生产企业中,基于DCS控制系统对各设备端数据进行采集、存储以及处理已经成为企业提高生产效率的重要手段。在生产制造中,需要实时对DCS采集的数据进行初步的处理与存储,以加强对生产过程稳定性的监督,及时对可能的故障或事故进行预警,保障生产的连续与稳定。而实时数据库需要保障DCS采集的数据被及时处理,采用标准化的接口进行存储与调用,建立实时数据中心[1]。
在生产控制中,各类应用系统具有较强的实时要求,需要在较短的时间周期内,或者在规定的时间点对设备数据进行采集,并对数据进行实时处理。一般而言,在生产系统中,通过构建实时数据库以存储实时数据,同时向关系数据库定时写入数据,成为当前生产中常用的做法。但是采用Oracle等关系数据库,难以满足实时数据库大量的写入以及存储海量数据的要求。并且由于DCS采集可能来源于不同的渠道,随着数据源的增多,传统的DBMS系统难以有效解决实时数据的海量存储[2]。
随着大数据架构的发展,出现了数据湖的架构。数据湖主要是采用大数据架构对各类异质架构的数据进行存储,包括结构化或非结构化数据,以及二进制数据。数据湖架构可以集成实时数据流、数据仓库,并基于数据湖提供机器学习应用服务。由于数据湖基于大数据的相关架构,因而在存储能力以及效率方面优于传统的数据库,并且在适应性上优于Hadoop等大数据结构。数据湖中采用原生方式存储数据,即可以存储原始的数据结构,而不用将其进行结构化处理。同时,数据湖接收多源异构数据,提供统一的管理视图,有助于解决信息孤岛,实施数据安全及质量管理。为此,可以在生产端DCS控制器实时采集数据的情况下,整合实时数据库以及数据湖技术,提供新的数据管理架构。
在实时数据库方面,不同的DCS厂商搭建了基于自身产品系统的实时数据库,比如Wonderware公司提供基于其DCS系统的实时数据库等,可以同步设备端传感器采集的实时数据。而国内,浙江中控以及紫金桥等公司,在为各制造企业提供的工业级解决方案中,包括其架构的实时数据库。此类实时数据库采用内存结构,提供数据的读写以及缓存机制,具有较高的响应速度以及读写效率。在架构上,控制事务的并发性、减少对事务的抢占,以保障在预测的时间内完成各项数据库任务。在数据库的架构上以内部为基础,然后在传统的关系数据库上进行改造,增加时间处理约束。当前在实时数据库的研究方面,由于处理时间的要求越来越高,其复杂性也有所增长,导致实时数据库的应用与研究相对滞后[3]。
目前,国内外不少厂商提出了数据湖的相关架构以及解决方案。其中,国外较为著名的架构有亚马逊的AWS数据湖,该数据湖架构包括完整的端到端的解决方案,提供了各类数据传输接口以及应用层接口,并且为用户提供了成熟的管理工具以及数据治理方案。在国内厂商中,华为较早提出自己的数据湖架构,采用云端解决方案,在线提供数据分析、查询等服务;阿里提出了DLA数据湖,基于阿里云实现多源异构数据的存储、查询与分析。
数据湖与一般的数据仓库有很大的不同,数据湖对数据仓库进行了优化,并且无须处理复杂的数据结构,其自由度高于数据仓库,并且存储能力也高于普通的数据仓库。在读写数据仓库时,数据湖支持实时性数据,可以直接映射源端数据,而无须进行结构化的定义。数据湖不仅能解决海量多源数据的存储,还能提高数据的实时处理能力,因而适合具有一定实时性数据要求的应用场景。
本文构建的基于数据湖的实时数据管理平台具有以下要求:实时数据采集采用数据单向对外传输模式,保障与中控系统网络安全隔离;数据采集客户端采用断点续传功能,保障数据完整传输;形成双实时库模式数据中心;建立实时数据中心,实现数据统一存储,并为其他的系统提供数据支持;数据湖平台应用可实现作业实时数据的全面采集、长效存储、统一管理和灵活发布;采用微服务开发框架进行应用配置开发,保障UI界面的风格统一,快速配置开发。
基于以上实时数据管理平台要求,本文设计了基于数据湖的实时数据管理平台(见图1)。
如图1所示,为保障生产过程安全,采用生产网与管理网隔离的方式进行网格安全防护,主要的数据实时采集在生产网段进行,通过DCS系统,控制终端设施的实时数据采集。各终端设施符合OPC技术规范,通过OPC技术可以在不同的硬件终端设施中获取硬件设施的各项数据,并按照标准的数据接口进行读取,然后通过OPC服务器将读取的实施数据存入到生产网的实时数据库中。为了缓解存储压力,在实施数据库中设置了数据库缓存。在数据库缓存的同步机制下,将数据同步到管理网的实施数据库中,实现双实时数据库的机制。在管理网段,实时数据库通过缓存与阴影机制,缓冲生产网同步数据。同时,基于数据湖技术,将同步到管理网段的实时数据传输到数据湖中进行存储。在应用层,通过微服务接口,读取数据湖中的各项数据,为各项应用终端提供数据支持,比如各类组态维护与实施应用等[4]。
图1 基于数据湖的实时数据管理平台架构
基于双数据库以及数据湖的实时数据管理平台架构,能够有效解决网络安全防护下实时数据的同步问题,同时也能解决海量数据的存储以及应用问题。相比原有的基于关系型数据库的架构,能够解决多源实时数据的存储、分析以及应用问题,并且能够提高存储的规模以及应用的效率。
实时数据管理平台对实时数据库具有较高的要求,为此本文采用内存数据库的方式实现实时数据库,其结构如图2所示。
图2 实时数据库实现结构
实时数据库为4层结构,第一层(M1层)和第二层(M2层)主要采用内存方式存储数据,其中第一层存储实时性最高的DCS数据,然后映射到第层,最终将数据同步到第三以及第四层。同时,为了提高效率,采用位示图进行内存的动态分配,如图3所示。
图3 位示图动态分配内存
实时数据库系统内存被划分成若干小块,在实现方式中,每一小块内存是字节,每字节的内存在位示图中用一个位来表示。为了找到一个可用的空闲内存,实时数据库在位示图页面上搜索对应大小的连续的没有被占用的位。实时数据库采用循环的方式扫描位示图页面,它保存当前位示图页面的标识和所在当前页面的位置,当每次需要分配内存的时候,就从当前位置开始扫描位示图。当扫描完最后一个位示图页面后,接着从第一个位示图页面继续扫面,直到回到当前位置。当把位示图页面循环扫描一遍之后没有找到空闲的内存空间时,就会扩充一段新的内存区供实时数据库系统使用[5]。
数据湖的实现基于Kappa架构,如图4所示。
图4 数据湖实现
如图4所示,采用MaxWell和canal同步不同来源的DCS实时数据库,基于kafka对实时数据进行初步的加工,形成从ODS到DWS的不同层次的数据处理结构,并采用SparkStreming和Flink进行流失调度,并汇总到数据湖中。数据湖采用Hbase作为数据的存储结构,采用Redis进行缓存,然后基于ES进行数据的管理,以提供给应用层使用。
应用层并不直接读写数据湖中的数据,而是采用微服务结构,将各类应用请求进行封装,微服务层实现方式,如图5所示。
图5 微服务层实现
微服务采用Java SpringCloud进行实现,采用Erueka进行服务注册,采用Zuui实现微服务网关,采用Redis进行微服务的缓存,由Feign提供对外服务接口。不同的应用,比如组态信息监督等,从数据湖中访问对应的数据。当开发DCS应用时,通过微服务层向数据湖发起请求,隔离不同应用的请求,同时提供简洁的访问接口[6]。
本文在传统DCS数据实时管理系统的基础上,采用双数据库的形式,将生产网数据同步到管理网端,以控制网络安全,同时基于数据湖架构,将实时数据库中的数据同步到数据湖中,解决多源实时数据的海量存储问题。同时,采用微服务架构,在应用层通过微服务接口将数据湖中的数据在不同的终端上应用,有效地解决了原有实时数据管理系统中实时数据的海量存储以及应用问题,能够为不同生产企业构建实时数据方案提供借鉴。■