微服务架构下安全监测智能平台的开发及部署
2023-08-26李培聪袁明道徐云乾李田贵
李培聪 ,袁明道 ,徐云乾 ,李田贵
(1.广东省水利水电科学研究院,广东 广州 510635;2.广东省大坝安全技术管理中心,广东 广州 510635)
0 引言
智慧水利是新阶段水利高质量发展的重要标志,随着人工智能、大数据、云计算、物联网与移动互联等新一代信息技术的发展,智慧水利体系的构建,数字孪生水利工程的建设成为可能,同时在工程设计、建设、运行中,全要素全过程的感知、模拟、分析、预警的数字化和智能化需求日益增强,相关平台迭代优化也逐渐加快。
构建安全监测智能平台是实现智慧水利的关键一环,为工程管理提供全过程、全要素信息,是水利工程安全监测最基本和最重要的支撑。20 世纪 90 年代,葛洲坝船闸、小浪底大坝等工程开始尝试应用自动化监测系统采集监测数据[1];2000 年以后,由于存储数据容量越来越大,存储内容媒体形式不再只是单一的文本或数据,涉及到文本、图形、图像等媒体,因此,三峡大坝[2]、小浪底大坝[3]等工程逐渐在现有系统基础上进行数据库优化;“十三五”以来,随着人工智能、识别技术及软硬件的快速发展,水利工程各类平台系统开始从数字水利向智慧水利发展,GIS 综合展示[4]、BIM 模型构建[5]、图像水位识别[6]等功能开始在各类平台系统中应用。
然而,随着用户需求的增加,安全监测智能平台功能日渐增多,应用程序日趋庞大复杂,迭代周期也日益缩短,以往单体式结构平台已经无法满足智慧水利快速发展的需求。因此,目前安全监测智能平台的一个发展趋势是将整体的系统拆分成独立的业务模块,每个业务模块独立运行,共同构建整个平台的微服务基础架构,提高平台开发、维护、迭代更新的效率。
本研究将微服务基础架构应用于安全监测智能平台中,通过业务拆分和服务封装等构建一个服务之间互相协调、配合,能独立地部署到生产环境、类生产环境中,具备高可拓展性及快捷部署的安全监测智能平台。
1 基础架构
微服务基础架构是区别于单体式架构的平台开发方法[7],相比单体式架构,微服务技术的松耦合式结构可靠性高,迭代更新快,同时具备更好的可扩展性[8]。安全监测智能平台结合监测、管理、预警等工作,通过划分不同业务模块,形成独立运行的各服务,服务之间采用基于 TCP/IP 传输协议中应用层的 http 通信协议进行通信[9],各服务可在不影响整体系统运行的情况下修改,运行,停止[10],实现高内聚和低耦合。微服务架构如图1 所示。
图1 微服务架构
2 关键技术
2.1 服务构造
采用微服务架构的主要难点在于颗粒度的最优划分:颗粒度划分过细,容易导致服务数量倍增,加剧相互之间协调、配合、通信的复杂程度;颗粒度划分过粗,则无法实现系统的解耦,不同服务会存在较多的重复功能与代码。因此,采用领域驱动设计(DDD)的方法进行服务划分。DDD 是一种处理复杂系统架构的设计方法,通过业务需求构建领域模型,控制业务的复杂性,将复杂业务领域简单化,实现颗粒度划分[11]。
本研究从大坝安全监测及工程运行管理的实际需求出发,控制单个业务的复杂性,合理划分领域边界,从业务出发的领域驱动设计结构图如图2 所示。
图2 领域驱动设计结构图
2.2 数据管理
微服务架构下,各微服务可部署在不同的服务器上,也可部署在相同服务器的不同容器上,因此,数据管理也是主要难点,目前通常采用一库一服或一库多服 2 种方式:一库多服是常用的方式,即 1 个数据库可对应多个模块;一库一服,即每个微服务准备 1 个单独的数据库。2种方式的部署模式如图3 所示。
图3 数据库部署模式
一库多服存在以下问题:1) 数据库出现问题,会导致整批服务全部停止;2) 程序编写中存在数据间的依赖性大、耦合性高的部分,不利于后续拓展;3) 无法针对某一个服务进行精准优化或扩展。而一库一服模式在数据管理上可保证共享数据的全局一致性,解决跨流程服务组合时数据丢失的问题。因此本研究中的微服务框架采用一库一服模式。
2.3 服务组合
微服务架构下,服务组合通常采用编排和协同 2 种方式,将相互独立的各服务按照需求组合成更为复杂、完善、满足使用需要的整体模块,其中:编排是根据业务流程处理顺序,通过中心服务组织多个服务的配合;协同通常是在没有中心服务的情况下,所有服务以需求或某一功能为核心的相互协作。2 种组合方式具体形式如图4 所示。
图4 服务组合方式
本研究根据安全监测系统中监测、预警等业务需要,以本业务为中心,同时调动其他业务协助的需求,以编排的方式,在中心服务的组织下,按照一定的顺序调用配合的多个微服务,并对配合服务返回的成果进行组合、转换等加工,最终实现整体功能。中心服务与每个配合服务都有自己的缓存和数据库,利用Rabbit 等分布式事件流平台协调组合服务的调用,不需要持久化任何数据。
3 业务服务
3.1 基本架构及模块化
微服务架构核心是模块化,通过 DDD 的方法,合理划分系统颗粒度,将系统拆分成合适的微服务。
目前,安全监测智能平台主要包括业务及基础两部分功能,其中业务功能主要包括监测、预报、预警等内容,而大坝主要监测项目包括环境量、变形、渗流、应力应变及温度等监测项目。根据水利工程安全监测需求及用户使用情况,将安全监测、用户管理等作为单一领域模型,安全监测智能平台的基本架构如图5 所示。
图5 安全监测智能平台服务基本架构
3.2 数据管理
数据管理体现为管理某一服务完成某一功能所需的数据,在微服务架构中包括数据及数据库管理。本研究根据服务划分,采用一服一库的方式设计微服务的数据库,限制对应服务对其他服务数据库的访问能力,同时保证数据在全局上的一致性,并利用 Rabbit 等分布式事件流平台协调组合服务的调用。
本监测平台涉及的独立数据库主要包括用户、基础、安全监测、雨水情、运行管理、监控数据云服务等数据库,其中:监控云服务器数据库采用对象存储方式,存储和检索非结构化的数据和元数据,通过 URL(Uniform Resource Locator)访问一个空间及其中的文件,存储对象包括非结构化的图像文件、视频文件、日志、HTML 文件等。
3.3 模块化开发
本研究将整体系统拆分成独立的业务模块,每个模块独立运行的微服务共同构建起整个系统,微服务是一种以服务为中心的架构,服务之间通过定义明确的协议和接口进行通信,因此,可根据不同水库的不同需求,针对某一个服务定制开发,同时共用大部分服务,提高开发效率。
微服务架构在阳江大河水库及广州黄龙带水库体现明显,2 座水库均部署了安全监测智能平台,需求类似,因此仅需修改部分服务内容即可部署,极大提高了开发效率。如 2 座水库的接入数据方式不同,可采取以下方式部署:大河水库通过设备厂商的物联网平台直接接入数据,监测平台通过安全监测服务中的数据定时抓取,满足安全监测数据的需求;黄龙带水库建立本地数据库,数据由监测设备直接通过部署在本地的采集服务传回数据库。
3.4 部署及开发工具
部署服务器环境为:Centos7 + Java+ Docker +MySQL + Redis。考虑平台具备生产级应用的移植性、稳定性及跨平台性等特性,选择Docker 作为部署的应用容器,主要开发环境及工具如表1 所示。
表1 开发工具表
4 部署应用
4.1 系统部署
微服务程序十分适合在 Docker 环境下部署。Docker 是基于容器的平台,可以在物理或虚拟机,云服务上或混合环境(开发、测试及实际部署环境)中部署、应用。
Docker 中主要有以下 3 个基本概念:1) 镜像。镜像是一个可执行的程序包,是创建容器的基础,包括运行应用程序所需要的所有内容,包含代码、通用类程序库、环境变量和配置文件。2) 容器。容器是从镜像创建的运行实例,可以被启动、停止和拆除。3) 仓库。仓库是用来集中保存镜像的存储位置。
本研究在 Docker 环境下部署安全监测智能平台,主要部署步骤如图6 所示。
图6 主要部署步骤
4.2 服务编排
4.2.1 监测预警
根据业务流程处理的需要,以编排的方式,将安全预警服务作为中心服务,调用多个微服务,包括通过安全监测、雨水情测报等服务提供数据,结合气象、水文要素对监测数据进行分析,提供各类监测预警情况,及时发布报警信息等,黄龙带水库相关业务平台安全预警界面示例如图7 所示。
4.2.2 智慧管理
将运行管理服务作为中心服务,涉及移动端、视频监控等服务,最终实现水库日常管理所需的功能,包括巡视检查、维修养护、档案管理等功能,大河水库智慧管理具体巡查结果界面示例如图8 所示。
图8 智慧管理
4.3 提升效果
在阳江大河水库、黄龙带水库应用微服务架构进行开发及部署,对比单体式架构的平台,微服务架构部署快捷,可扩展性高,具体提升效果如下:
1) 快捷部署性。黄龙带水库在大河水库安全监测系统平台基础上,仅重新开发安全监测服务,其他服务在调整后优先部署,极大缩短了开发周期。
2) 高可拓展性。微服务架构的核心是模块化,本次展示的 2 座水库的服务部署在不同的服务器上,其中大河水库的巡查模块包括电脑端及手机移动端,具体业务需求确定及开发时间较久,因此是在平台上线运行后,在保证其他服务仍可正常工作基础上的一个拓展。
3)故障独立处置。在开发过程中,各服务同步独立开发,因此,平台日常运行中某一服务出现故障,可单独处理,其他服务仍可正常工作。测试环境中,模拟大批量同时请求运行管理服务时,会导致运行管理服务数据库并发死锁,但其他服务仍可正常使用。
4)智能化。前端感知设备及平台自动化智能化采集信息,如智能全站仪自动采集表面位移监测数据,极大减轻了水库管理单位工作人员的负担,提升了水利管理自动化、智能化水平。
5 结语
详细阐述了水库安全监测这一复杂系统的解耦过程及平台模块化的服务组合的关键技术,并将安全监测智能平台成功部署于阳江大河水库,后续通过修改安全监测服务及拓展其他服务,快速应用于黄龙带水库,与传统软件开发相比具有代码复用率高、扩展性好、部署效率高等优势,使平台可适应各水库大坝的安全监测与运行管理需求,也可为其他系统平台开发提供简化开发流程,提高整体开发效率。后续可以根据监测数据及实际使用需要融入智能分析服务,实现大坝安全风险预警分析,为管理决策提供依据。