林艳燕,安 觅
(1.水利部交通运输部国家能源局南京水利科学研究院,江苏 南京 210029;2.南京水利水文自动化研究所,江苏 南京 210012)
水利工程是为解决水文地理环境问题、满足农业生产、城市生活、工业生产和水电等多种用水需求而进行的工程建设。水利工程的形式多样,常见的水利工程包括:水库、水电站、水闸、堤防、灌区等。随着国家对水利工程安全的关注度提高,水利工程安全监管系统得到了越来越广泛的应用,该类系统具有多领域交叉性、多系统集成性、高度可靠性、灵活性和可定制性、以及用户友好性等领域特征。
现阶段,很多的水利工程安全监管系统仍然采用单体架构。随着业务增长,系统规模不断扩大,导致系统难以扩展和升级。针对水利工程安全监管平台的特点,微服务架构能够通过服务拆分,服务治理,服务编排等相关技术,解决常规水利工程单体应用无法解决的问题。
(1)通过微服务拆分提高水利工程安全监管平台的可扩展性与可维护性。由于水利工程安全监管平台需要对水利工程建设、运行、维护等各个环节进行全周期、全链条的监管,因此系统的功能模块非常多,需要不断扩展和维护。微服务通过拆分单体应用,形成具有特定功能的单个微服务,每个服务单元都有明确的职责和功能,易于扩展和维护。
(2)通过微服务治理提升平台的弹性和可靠性。由于水利工程安全监管平台需要实时监测和处理大量的数据和信息,系统的负载可能会波动较大,需要具备弹性和可靠性。微服务架构能够实现服务的自动伸缩和容错机制,保证系统能够稳定运行。
(3)利用服务编排提高平台的灵活性和可定制性。由于水利工程安全监管平台需要与多个数据和信息源进行集成和交互,不同的监管和管理需求也可能不同,因此需要具备灵活性和可定制性。微服务架构能够将不同的服务单元组合成不同的应用程序,满足不同的监管和管理需求。
微服务划分理论是指将微服务划分成独立的服务的方法和原则,通过遵循这些原则和方法[1-2],可以使得微服务系统具有更高的可维护性、可扩展性、可用性和容错性,从而更好地满足业务需求。表1为常见的微服务划分原则。
表1 微服务划分原则
依据水利工程安全监管的需求,结合微服务划分理论,平台可划分为网关服务、数据汇集微服务、基础信息微服务、水文监测微服务、安全监测微服务、分析预警微服务、视频图像监测微服务、运行维护微服务、系统权限微服务。这些微服务共同构成了水利工程安全监管平台的核心服务体系,每个微服务都有着不同的功能和作用,从数据采集、处理、分析、预警到管理,以及用户权限控制等方面全面覆盖了水利工程安全监管平台的各个方面。微服务之间相互协作,共同完成水利工程的监管和管理工作,提高平台的可扩展性、可维护性和可重用性。
网关服务:网关是水利工程安全监管平台的入口,负责接收和转发所有外部请求,并进行路由和负载均衡。它还可以提供一些安全认证、授权、限流、日志记录等基础功能。
数据汇集微服务:数据汇集微服务负责收集和汇总水利工程安全监管平台的各种数据,包括水文监测数据、安全监测数据、视频图像数据等。它可以将这些数据保存到数据库或发送到其他微服务进行进一步处理。
基础信息微服务:基础信息微服务负责管理水利工程的基础信息,包括水库、闸门、泵站、水文站等各种设施的基本属性、位置、状态等信息。提供查询、添加、删除、修改等基础信息管理功能。
水文监测微服务:水文监测微服务负责收集、处理和分析水文监测数据,包括水位、流量、水质等指标。实现实时监测、历史数据查询、异常数据报警等功能。
安全监测微服务:安全监测微服务负责收集、处理和分析水利工程的安全监测数据,包括结构变形、渗流压力、振动等指标。实现实时监测、历史数据查询、异常数据报警等功能。
分析预警微服务:分析预警微服务负责对水文监测和安全监测数据进行分析和预警,及时发现水利工程可能存在的问题,并给出相应的处理建议,根据不同的预警级别自动触发相关的应急预案。
视频图像监测微服务:视频图像监测微服务负责收集、处理和分析水利工程的视频图像数据,包括摄像头拍摄的实时画面、录像和照片等。实现实时监测、历史数据查询、异常数据报警等功能。
运行维护微服务:运行维护微服务可实现水利工程的运行维护,包括设备维修养护、巡检管理等。提供设备管理、维修记录、巡检计划、维修报告等功能。
系统权限微服务:系统权限微服务负责管理用户的权限和角色,包括用户管理、菜单管理、角色分配、权限验证等功能。
2.1.1总体架构
平台面向流域/单一水利工程安全监测管理建设需求,以数字映射手段实现业务化应用。按照“大平台设计,产品化开发,分服务建设,模块化链接”建设原则[4],形成可复用产品,预留后期扩展子系统及功能。如图1所示,平台分为4层。
图1 平台总体架构
(1)基础设施层:利用水利工程现地机房或云中心的基础设施,在统一资源分配管理下搭建本平台。基础设施层可实现监测数据的集中汇集为平台安全防护提供基础设施保障。利用现地测控单元、集约化监测装备采集水利工程多要素信息,通过网络交互技术与底层设备、传感器相连接,利用信息化基础设备为监测数据提供存储与管理介质。
(2)数据资源层:针对平台建设中需要用到的水利工程安全监管基础数据,水文监测数据,工程安全监测数据,运行维护数据。数据资源层为平台服务层提供标准化的数据环境。
(3)平台服务层:平台服务层可划分为基础组件、微服务组件和业务服务。基础组件为平台单个微服务使用到的基础依赖;微服务组件包括服务注册组件,跨服务调用组件等,利用微服务组件可实现微服务治理;业务服务组件为拆分后的各业务服务。最终所有的服务通过网关统一发布。
(4)终端服务层:终端服务层通过API网关调用平台的各类服务接口,实现大屏、PC、移动端等多形式的终端应用。
2.1.2技术架构
平台采用前后端分离技术架构,后台采用SpringBoot开发单个微服务,按业务划分服务,可实现服务间的实现灵活组装。利用Spring Cloud Alibaba技术栈相关的服务治理组件(gateway、nacos、openfeign)实现服务的负载均衡注册,统一发布和跨服务调用。
前台基于vue3+vite+Type Script等前沿技术开发,保障系统性能界面样式为采用业内领先的组件库开发,符合大众使用习惯以及审美。
图2为平台的技术架构图。微服务分为基础服务集群和业务服务集群,微服务注册至配置注册中心,由网关作为所有服务的统一出口。使用Springboot Admin实现服务运行状态的监控,使用SkyWalking实现服务的链路追踪。利用Dev Ops相关技术栈实现持续集成。
图2 平台技术架构
2.2.1服务注册与服务发现
平台利用nacos实现服务的注册与统一的配置管理。跨服务调用时,各微服务会自动的在nacos上拉取服务列表。只需在接口类上加上@Feign Client注解即可实现Feign接口的定义,利用将单个服务的公共方法暴露出来形成通用接口,可供其他服务调用。平台的Feign接口主要分为两类:
(1)业务微服务接口:各业务服务中的接口有一些公共方法可以暴露出来供其他服务调用,通过定义业务接口类暴露单个服务的接口,平台采用一个微服务对应一个接口类的形式,例如水文监测微服务定义IWater Service接口类,暴露站点的时段监测数据,时段日数据等通用服务接口。如图3所示。
图3 水文监测微服务接口代码段
(2)第三方服务接口:从外部接入的服务接口,该类接口需要经过统一的鉴权后调用。如通过第三方气象平台接入的气象预警接口。如图4所示。
2.2.2服务网关实现
在网关微服务中引入spring-cloud-starter-gateway依赖后,平台可以使用gateway组件提供的相关功能,本平台主要使用以下4个方面的功能:
(1)API鉴权与token续期:平台鉴权与token续期的流程如图5所示,用户登陆平台后,登录接口为白名单接口,平台直接由网关转发至系统权限微服务进行验证,返回结果给用户,同时将token、用户具备的区域、站点等权限信息存储在redis中,并设置token有效期。除白名单之外,用户所有请求都要携带token,请求经过网关滤器后,通过token在redis中去拿取权限信息,同时对于鉴权成功的接口延长token时间。
图5 网关鉴权与token续期业务逻辑
(2)服务转发:在配置文件中,通过spring.cloud.gateway.routes属性配置路由规则。每个路由规则由id、uri和可选的predicates、filters等属性组成。id是该路由规则的唯一标识,uri指定目标服务的地址。pridicates用于匹配请求,filters用于对请求进行修改或过滤。
(3)权限参数注入:实现Gateway过滤器接口,拦截需要进行参数注入的服务接口,自动对token的解析,从redis中拿到用户的权限信息,通过此种方式可实现自动将权限参数注入至服务接口中,实现非侵入式参数注入。如图6所示。
图6 网关参数注入关键代码段
2.2.3业务微服务开发
单个微服务采用springboot开发,利用持久层框架mybatisPlus的databaseId属性实现一套平台对多厂商的数据库的支持,基于Sharding Sphere根据项目需求实现多种数据分库分表策略,满足大数据量查询效率。
接口开发方面,充分利用反射、数据库表存储json字段,通用sql语句等方式实现通用的服务接口,以水利工程对象的维护为例,设计维护水利对象的功能接口利用hydro Type字段传入水利对象的类型,以此实现一个接口可以维护多种类型的水利对象。
2.2.4平台自动化部署
水利工程软件的运行往往伴随着工程的实施产生需求的更改,为了能够快速相应需求,平台采用持续集成持续交付的方式实现软件的自动化构建与部署。结合版本控制工具(SVN/GIT),项目构建工具(如Jenkins)和部署工具(如Docker)等技术,以实现自动化构建、测试和部署软件的流程。通过自动化的部署提高了部署的效率节约了人力成本,为项目的实施提供了有力的保障。
在实施新项目时,需要结合项目的实际情况部施相应的平台微服务和数据库,以两种不同类型的项目说明。见表2。
表2 平台应用说明
车马碧水库综合业务应用系统构建面向枢纽管理中心和现地站的水库综合信息系统,为车马碧水库工程日常运行管理工作提供服务。主要功能模块包括工程基础信息、安全监测、水质监测、水情监测等。
该系统使用达梦数据库实现国产化部署,使用到的平台微服务见表2,图7为该系统的功能界面截图。
图7 车马碧水库系统截图
基于工程基于水利工程安全监管平台开发海安重点闸站孪生系统,该系统利用多维护信息可视化模拟仿真技术[9],利用虚拟现实,GIS技术,全景影像,遥感等技术,开发海安重点闸站二三位一体化模拟交互系统,实现区域场景、典型工程的二三位一体化建模与全景展示,集成区域相关信息进行综合展示和三维漫游交互,模拟水闸历史启闭过程,提高流域多维度信息模拟展示与可视化交互能力。系统主要关注水利工程的工情监测数据,使用mysql8数据库,在Windows操作系统上部署。如图8所示。
图8 海安重点闸站数字孪生工程水闸历史启闭过程截图
为解决传统水利工程安全监管系统的瓶颈问题,本文对水利工程安全监管领域特征进行分析并结合微服务相关技术提出了基于微服务架构的水利工程安全监管平台,探索了微服务架构的应用和相关技术的融合,为水利行业的安全管理和监督提供了一种创新的解决方案。平台以其模块化、可扩展和灵活的特点,为水利工程管理者提供更高效、更精确的监管手段,从而提升水利工程的安全水平。应用结果表明平台能够应用在不同类别的水利工程应用系统中,实现软件的快速开发和部署。下一阶段将进一步提高平台的安全性和可靠性,以确保用户数据的保密性和完整性。