APP下载

基于微服务架构与区块链技术的环境监测系统①

2022-06-27李长杰

计算机系统应用 2022年5期
关键词:分片中间件监测数据

李长杰, 李 威, 徐 亮, 陈 鹏, 成 波

1(湖北交投智能检测股份有限公司, 武汉 430050)

2(湖北省协诚交通环保有限公司, 武汉 430030)

环境问题日趋复杂, 传统的环境监测方式已经难以满足环境治理需求和公众的要求. 因此, 环境在线监测技术应运而生, 出现了各种针对污水、大气、噪声、土壤、固体废弃物等污染物进行在线监测的解决方案, 利用计算机模拟人工进行分析, 并排除了人工分析时的不稳定、分析速度慢等人为因素, 提高了稳定性和分析速度. 这种方案具有实时性、智能化、精确度高、运行维护简单等优点, 但各设备厂商所遵循的标准不尽相同, 且各厂商均有各自的维护管理平台, 系统之间相互独立, 数据不能共享, 孤岛效应严重, 企业无法利用监测数据进行综合分析, 难以发挥数据的应用价值; 另外, 由于设备供应商较多, 各厂商系统互相独立, 维护和管理比较麻烦. 企业需要一套集动态感知、智能管理、智慧决策为一体的环保监控管理平台,通过动态采集环境在线监测数据, 汇集污染数值, 集合各类环境数据, 形成环境数据专题, 帮助环境管理者了解环境现状、分析环境问题及成因, 实现对生态环境的精细监管、精准执法、科学决策.

国内的环境工作者在改进环境监测方案方面已经做出了大量的尝试和创新, 取得了丰硕的研究成果, 并在实际应用中得到了较好的推广和应用. 2012 年, 王静等设计了一种基于无线传感网络和GPRS 无线网络的水环境监测系统, 采用分布式数据采集方式, 提高了监测精确度, 降低了对单个节点传感器的精度要求[1].2013 年, 廖玉霞以江河流域水环境水质状态为研究对象, 提出了基于B/S 模式的水环境监测系统模型, 实现了对水质参数的网络化、信息化、规范化管理[2]. 2014年, 吴烈国设计了一套适用于复杂水域环境监测的多传感器数据融合机制, 包括基于自适应加权算法和冗余数据融合以及基于弹性BP 网络的互补数据融合[3].嵇晓燕等阐述了水环境质量监测网络的发展历程与现状, 提出建立水环境质量监测网络设计技术体系、扩大监测网覆盖面、扩展监测项目等建议[4]. 2019 年, 姚国勤对环保大数据在环境污染防治管理中的应用进行了研究, 提出构建环保大数据的共享和应用平台, 实现环境污染防治管理的动态模拟以及应急预案的制定,从而提升环境污染防治管理效率与质量[5]. 崔丽萍通过深入研究, 梳理并提炼大气环境污染物监测的方法: 首先针对目标区域开展调研, 做好基本资料的储备和各项准备工作, 其次做好监测点的布设, 最后进行采样与数据分析[6]. 车祥等采用3 台传感器对环境空气中气态污染物(NO2、SO2、O3、CO)和颗粒物(PM10、PM2.5)进行为期1 个月的连续监测, 探讨了传感技术在环境空气监测中的方法适用性[7]. 阚丽萍分析了生态环境监控系统的设计架构, 并探讨了生态环境监控系统在具体应用方面的创新与发展[8]. 刘皎等设计了一种基于物联网的环境监测系统, 采用ZigBee 传感网络实时采集大气环境数据, 并利用4G 网络对采集到的各种数据进行实时传输, 能够实现对环境温湿度、CO、NOx、PM2.5等参数进行实时显示及存储[9]. 韩福财对我国目前对水环境的监测所存在的问题和加强水环境监测质量控制的相关措施进行了阐述[10].

以上研究主要集中在环境监测的水质或大气等某个单项, 很少有机构或学者针对集成环境监测问题进行相应探索.

本文研究的重点放在设计开发针对高速公路服务区的污水、大气、噪声等综合污染源数据的实时采集、高速传输、智能分析、高效决策等集成环境监测系统.创新性地提出了一种基于微服务架构, 采用分治法思想来构建环境监测系统. 具体来说, 以往环境监测系统大都是“单体式”应用系统, 所有的模块或子系统只是在系统内部逻辑上进行了区分. 本文提出的方法是将“单体式”环境监测系统分割为面向水质、大气、噪声和固体废弃物等多污染源服务单元. 服务单元之间在物理层面上实现了分离, 为可独立部署的进程, 且各服务单元之间通过API 接口相互通信, 从而实现模块功能的松耦合. 除此之外, 近年来在公共服务、电力能源、智能制造、供应链、物流、电商、农业、物联网等诸多行业领域都在探索区块链应用[11-15]. 本文率先尝试将区块链技术在环境监测领域进行了探索性应用研究.研发了针对环境监测数据区块链中间件(environmental monitoring Blockchain middleware)技术, 将报警数据通过区块链中间件写入到区块链系统, 实现了报警数据可信存储与验证, 为区块链技术在数字化环境监测的应用做出了较大贡献.

本文的主要研究内容包括: (1)研发监测数据采集中间件, 实现数据从传感器到云服务器直连, 并通过Web和移动互联网技术实现可视化展示; (2)基于分治法思想结合微服务技术实现“单体式”应用向“微服务”应用改造, 基于多污染源概念将环境监测业务拆分为可独立开发, 独立部署的进程, 降低系统模块间的耦合; (3)针对环境监测数据海量且结构化的特点, 采用多数据源结合时间戳水平分片的方法实现数据存储管理与查询索引, 极大提高了数据查询检索效率; (4)研发环境监测区块链中间件, 实现监测报警数据链上存储与检索.

本文组织结构如下: 第1 节从系统实现角度对多污染源微服务架构进行整体详细的阐述; 第2 节的内容是监测数据采集中间件设计与开发中所涉及的关键技术; 第3 节主要对多数据源与数据分片算法模型的实现细节进行介绍说明; 第4 节介绍区块链微服务中间件, 包括报警数据的可信存储与验证; 最后是实验与总结, 对系统总体性能进行实验对比, 并对实验结果进行分析总结.

1 多污染源微服务架构模型

多污染源微服务架构模型如图1 所示, 包括功能服务单元和业务服务单元两种. 其中, 功能服务单元包括服务注册中心和API 网关, 主要解决智能环保监控管理系统所面临的海量数据存储和调度以及大规模的并发访问问题; 业务服务单元包括用户管理服务、污水服务、噪声服务、大气服务、中心服务、数据采集服务和数据上链服务, 所谓多污染源指的是将环境监测污染物指标划分为污水、噪声和大气等几大类, 从单个分类角度来看, 整体系统的业务复杂度和数据规模都呈线性模型减小, 从而降低了系统的设计与开发复杂性, 极大提高了系统的伸缩性和扩展性. 除此之外,模型中还包括环境监测区块链中间件和数采平台中间件.

图1 应用平台微服务架构模型图

1.1 功能服务单元

服务注册中心, 对于注册中心来说, 服务单元分为服务提供者和服务消费者, 负责管理、记录服务单元的信息, 同时将符合要求的服务提供者地址列表返回服务消费者. 服务消费者向注册中心订阅服务, 表达自己的需求, 然后得到服务提供者消息, 远程调用即可.

API 网关是一个更为智能的应用服务器, 它是微服务架构系统的门面, 所有的外部访问都要先经过API 网关, 然后API 网关来实现请求路由、负载均衡、权限验证等功能, 随后将各个访问请求分发到对应的服务单元.

1.2 业务服务单元

(1) 数据采集服务起到了承上启下的作用, 下接物联网中间件, 上接污水、噪声、大气服务, 定时采集最新监测数据. 数据采集服务采用两种通信方式: Feign、RabbitMQ. 通过Feign 与对应服务单元通信, 获取服务区、监测因子等信息, 查询最新数据, 并通过RabbitMQ,发送给其他服务单元.

(2) 污水服务是针对水质监测业务构建的多污染源服务单元. 主要负责服务区水质监测管理以及水质数据的标准化处理、存储、查询等. 通过接收数据采集服务发送的水质监测消息, 标准化处理后存入数据库. 同时提供标准化的RESTful 接口供服务消费者调用.

(3) 大气服务是针对大气监测业务构建的多污染源服务单元. 主要负责服务区的大气监测管理以及大气数据的标准化处理、存储、查询等. 通过接收数据采集服务发送的大气监测消息, 标准化处理后存入数据库. 提供标准化的RESTful 接口, 供服务消费者调用.

(4) 噪声服务是针对噪声监测业务构建的多污染源服务单元. 主要负责服务区的噪声监测管理以及噪声数据的标准化处理、存储、查询等. 通过接收数据采集服务发送的噪声监测消息, 获取噪声数据, 标准化处理后存入数据库. 提供标准化的RESTful 接口, 供服务消费者调用.

(5) 中心服务是数据处理的业务服务单元, 包括报警管理、报表管理、站点管理等模块. 通过Feign 调用污水服务、大气服务、噪声服务接口, 生成报警信息、报表等数据. 通过RabbitMQ 将用户操作信息发送到用户管理模块, 生成日志.

(6) 数据上链服务负责其他服务单元与区块链系统的交互. 具体来说, 本服务提供了两类接口, 前者将监测报警数据写入区块链分布式账本; 后者提供了报警数据有效性验证, 验证数据在存储过程中是否被篡改. , 报警数据由中心服务中产生, 通过RabbitMQ 发送至数据上链服务, 在此服务单元中, 报警数据通过序列化技术转为JSON 格式, 再通过环境监测区块链中间件将数据写入分布式账本. 有效性验证逻辑与前述数据写入类似.

2 监测数据采集中间件

环境监测数据数采平台中间件负责对接高速公路服务区终端环境监测设备, 如图2 所示, 实现终端监测设备与应用系统之间的解耦, 极大增加了应用系统业务以及数采平台自身的扩展性.

图2 数采平台中间件示意图

其特点体现在: (1)提供独立于应用系统外的服务能力, 可服务扩展其他环保监控系统; (2)集成HJ 212-2017 与HJ/T212-2005 两套污染源在线传输国标, 环境监测传感器的接入、管理; (3)提供了基于RESTful接口实现终端设备实时数据获取以及设备反向控制;(4) 提供了数据库访问接口实现分钟数据、小时数据、天数据检索查询.

3 多污染源数据分片模型

高速公路服务区监测数据存储管理面临以下几大痛点问题: (1)服务区数量多; (2)监测指标较多, 分为水质、大气和噪声3 大类, 总共30 多个指标参数;(3)监测数据回传频率高, 每个服务区平均数分钟回传一次监测数据. 综上所述, 在高速公路服务区应用场景下环境监测数据具有海量结构化的特点, 在此情形下, 需要针对该数据特点提出特殊的数据模型进行存储管理.

本文提出了一种多污染源数据分片模型来解决上述问题. 多污染数据分片模型的含义分为两层: (1)基于分治法和微服务架构的多污染源; (2)监测数据水平分片算法. 首先前者从系统架构上将监测指标类型分为3 大污染源服务, 与第2 节中阐述水质、大气和噪声业务服务单元一一对应. 从而业务体系上针对监测数据存储调度进行了一次分流, 将单一数据源分为3 个数据源, 减少了系统2/3 的查询检索的时延, 如图3 所示.

图3 多污染源示意图

除此之外, 多数据源还能够有效地分散对数据库单点的访问量; 数据分片算法是指数据规模过大的单表通过某种算法将表中的数据均匀的分散到若干表中,从而达到降低单表数据规模减少检索时延的目的. 本文提出监测数据分片算法基于月份时间戳通过Hash函数将监测数据动态分配到对应的月份分表中. 使用多主多从的分片方式, 有效的避免数据单点, 从而提升数据架构的可用性.

通过多数据源和月份时间戳的分表进行数据的拆分来使得各个监测数据表的数据量保持在阈值以下,以及对流量进行疏导应对高访问量, 是应对高并发和海量数据系统的有效手段. 采用本模型之后, 相比传统单点数据库在监测数据方面的检索效率提高5-10 倍,而且随着数据条目的增加, 效率会相对呈线性增加. 每个分表中仅含各年份一个月的监测数据, 极大提高历史监测数据检索效率(30 s 稳定减少至1.5 s).

多污染源数据分片模型算法步骤细节说明: 假设监测数据集合为D, 多污染的分类为K, 月份时间分类Tn(1≤n≤12), 那么模型算法伪代码可表述为算法1所示.

算法1. 数据分片模型算法current_db current_table for (d in D){for (k in K){if (type of d within k) {current_db =: k Td =: hash_mod(d)while (Tn){if (Td= Tn) {current _table = Td insert(current_db, current_table, d)}}}}}}

模型算法具体思路步骤为:

(1) 对于监测数据集中的每笔Datad, 对于多污染源的每种分类k;

(2) 判定Datad是否属于k分类, 是, 跳转到流程(3); 否, 跳转到流程(1);

(3) 将当前数据库置为k污染源对应数据库, 根据hash_mod(d)计算得到Td, 计算Datad时间戳分表;

(4) 遍历月份时间分类Tn, 如果Td与某个Tn一致, 则将当前current_table 置为Td月份时间分表;

(5) 将Datad插入到当前指定database 中的当前指定分表.

4 区块链微服务中间件

根据我国《大气污染防治法》的规定, 排污单位应当对自动监测数据的真实性和准确性负责. 因此, 本文引入了区块链技术保障监测数据在线传输和存储过程中真实性和防篡改性, 同时本研究是区块链技术在环境监测领域第一次创新性应用与尝试.

在本文湖北高速公路服务区应用场景下, 共有210 个左右监测点, 每个监测点平均8 个监测指标, 上传频率为3 min. 监测数据的瞬时峰值可达1 680 条. 为了保证监测数据上链过程的稳定性和高可用性, 本文采用了双缓冲队列接入技术进行流量削峰.

如图4 所示, 区块链微服务中间件作为连接环境监测系统和环保联盟链中间节点, 起到承上启下作用.其核心职责是以基于RESTful 接口为环境监测系统提供数据上链、数据溯源和数据验证服务.

图4 区块链微服务中间件示意图

区块链依托分布式账本和密码不可篡改的特性为上层应用提供可信的分布式数据网络. 环境监测系统的数据(报警数据)通过区块链微服务中间件写入至区块链系统的账本中, 可通过基于区块链本身的区块链浏览器浏览上链数据, 可通过基于区块链本身的钱包应用来管理数据资产.

在此, 以报警数据的全生命周期视角出发来描述环境监测系统和区块链微服务中间件的交互情况.

(1)报警数据通过TCP/IP 回传至监测数据采集中间件, 再调用区块链微服务中间件数据上链接口将数据写入到区块交易中;

(2)通过监测数据采集中间件将数据发送至微服务环境监测系统数据采集服务, 然后由数据采集服务分发至中心服务中存储;

(3)环境监测系统中心服务发起验证流程, 中心服务首先调用数据采集服务接口, 由数据采集服务代理向区块链微服务中间件发送报警数据, 校验该数据是否合法或未修改.

针对数据上链可能遇到的TPS 瓶颈问题, 本文提出了基于双缓冲队列的多节点上链方法. 如图5 所示,左侧为环境监测中间件; 中间为区块链微服务中间件,包括双缓冲队列和线程池两部分; 右侧为环保联盟链,其中白色节点为当前可用节点, 灰色节点为当前不可用节点. 环境监测中间件回传的数据并写入双缓冲队列; 消费者通过读取缓冲队列数据, 结合联盟链中当前可用节点创建上链任务传入线程池任务队列, 实现多节点异步上链.

图5 缓冲队列数据上链模型

这种方式先将数据存放到缓冲队列, 然后通过线程池异步上链. 与数据直接上链的方式相比, 很大程度解决了区块链系统可能存在的TPS 瓶颈问题.

5 实验对比

本节针对环境监测系统查询性能以及系统扩展性方面进行对比分析与评价.

实验硬件环境: CPU Intel Core i7-7700 3.6 GHz, 内存 16 GB, 硬盘 HDD 2T, 操作系统 Windows 10.

实验软件环境: 微服务开发框架Springcloud Finchley. RELEASE; 区块链采用井通公链; 服务注册中心Netflix Eureka.

(1) 系统查询性能对比分析. 通过单查询和多查询评价指标分别对“单体式”系统模型、多污染系统模型、数据分片系统模型以及多污染源数据分片模型4 类系统的随机模拟查询实验结果进行对比分析, 此处随机模拟指在数据时间序列上进行均匀随机, 对多次查询结果取平均值.

本实验结果中, 针对各类系统模型分别进行单次和多次查询统计(10, 20, 30, 40, 50), 实验结果统计各类查询所造成的系统时延(单位: ms). 由表1 实验结果可知, 从单体模型、多污染模型、数据分片系统模型和多污染源数据分片模型, 实验结果(查询时延)逐步递减, 说明多污染数据分片模型在查询时延评价指标上优于其他模型, 且数据分片系统模型优于单体式模型和多污染模型, 多污染模型优于单体式模型.

表1 各系统模型查询实验统计结果(ms)

(2) 监测数据写入性能对比分析. 通过批量写入评价指标分别对“单体式”系统模型、多污染系统模型、数据分片系统模型以及多污染源数据分片模型4 类系统的监测数据写入操作实验结果进行对比分析.

本实验结果中, 针对各类系统模型分别进行批量写入统计(10 000, 20 000, 50 000, 100 000, 500 000, 1 000 000),实验统计各类写入操作时间消耗(单位: s). 由表2 实验结果可知, 单体式模型和数据分片系统模型写入时间基本一致, 多污染源模型和多污染源数据分片模型写入时间基本一致. 而后者比前者的写入时间有较大程度的减少, 由实验结果可知, 多污染源模型和多污染源数据分片模型在监测数据批量写入方面性能提升显著, 表现出较大优势.

表2 各系统模型写入实验统计结果 (s)

(3) 系统的功能性和扩展性分析, 对传统单体式监测系统和基于微服务架构与区块链技术监测系统在区块链使用、传感器接入管理和监测指标扩展3 个维度进行对比分析. 如表3 所示. 从总的结果来看, 基于微服务架构与区块链技术相对于传统单体式在区块链使用、传感器接入管理和监测指标扩展3 个维度均表现出较大的优势.

表3 监测系统的优势对比分析

综上实验结果对比, 可以得出结论: 基于微服务架构与区块链技术环境监测系统较其他技术模型的环境监测系统在查询性能、批量写入性能以及功能性和扩展性方面具有较大的优势.

6 总结与展望

本文提出了一种基于微服务架构的环境监测系统的设计开发模式, 在此基础之上提出了多数据源结合基于月份时间戳的分表方法; 并结合了一种环境监测数据数采平台中间件技术. 综上所述, 本系统对现有环境监测系统分布式与扩展性方面的性能进行了优化与改进, 提出了一种新颖的方法解决环境监测系统海量结构化数据的快速检索问题, 对环境监测系统的发展与进步有较为明显的推动作用, 具有较大的研究意义.

猜你喜欢

分片中间件监测数据
上下分片與詞的時空佈局
物联网区块链中基于演化博弈的分片算法
我国自主可控中间件发展研究
基于MongoDB的数据分片与分配策略研究∗
浅谈环境监测垂直管理的优势
环保验收监测异常数据的分析与处理探讨
基于纠删码冗余技术中的数据可靠性技术的研究
以实力证明 用事实说话
中移动集采:东方通中间件脱颖而出
金蝶 引领中间件2.0新时代