基于集群化架构的水资源管理系统设计与案例研究
2021-07-12
(1.华中科技大学 数字流域科学与技术湖北省重点实验室,武汉 430074; 2.中国长江电力股份有限公司智慧长江与水电科学湖北省重点实验室,湖北 宜昌 443000; 3.长江勘测规划设计研究院,武汉 430010)
1 研究背景
水资源管理系统的软件集成是水利信息化的重要体现,随着现代化信息技术日趋完善,其在水利信息化中的应用有效促进了水利事业的发展,并将水利事业现有的发展模式创新、完善、形成一种全新的发展结构[1],信息化水平已经成为衡量一个国家和地区水利事业现代化水平的重要标志[2]。近年来,国内外水资源管理系统的软件集成水平大幅提升,在理论和实践上取得了较多成果。基于对象建模技术(OMT)的水资源环境信息系统提供了一套软件产品,用于辅助研究非洲大陆的水文变化[3];水资源质量管理信息分析系统在很大程度上提高了区域和流域水资源管理效率[4];水文地质信息系统能够实时更新数据,快速提供可视化的水文地质条件信息[5]。在长江水利信息化的顶层设计中,提出了一种统筹兼顾、延伸覆盖、业务拓展、安全保障和制度整合的网络设计思路[6];在信息化顶层设计的指导下,积极跟踪云计算和物联网等新技术,围绕日益复杂的长江流域综合管理需求,提出了“智慧长江”的建设构想[7]。
系统软件的架构设计是应用系统能否正确、有效实现的关键因素[8],早期的水资源管理系统多基于集中式软件架构,集中式架构虽然结构简单,但是难以对系统进行升级和扩展。近年来,随着计算机技术的不断发展,水资源管理系统由集中式向分布式发展[9],采用轻量级数据模式的分布式软件架构为数据交换提供了解决方案[10]。相对于集中式架构,分布式的微服务框架具有技术选型灵活、独立按需扩展、可重用性高等优点,更符合当前水资源管理系统的需求[8]。随着云计算技术在水利信息化中的逐步应用[11],为应对现代水资源管理系统中数据规模的迅速增长和复杂处理需求,具有可伸缩性、高可用性的集群技术得到了广泛的应用[12]。
分布式水资源管理系统中单个服务的运行效率,是影响系统整体性能的关键因素。本文在微服务系统架构下,结合水资源管理专业模型的服务化需求,采用主流的虚拟化容器技术和网关技术,提出了一种有效且可操作的水资源管理系统服务集群化方法,实现了专业模型服务的负载均衡和核心服务的高可用,并在中国长江电力股份有限公司金沙江下游-三峡梯级电站水资源管理决策支持系统中得到应用。
本文提出的设计方法具有可持续集成、跨平台、快速响应等特点,可为水利信息化系统软件的设计和开发提供参考。
2 系统集群化通用技术
2.1 服务集群化
集群是一组计算机资源的有机组合,以单个计算机系统作为集群节点,通过网络交互实现节点的连接和调用,内部结构相对外部透明,为外部提供具有扩展性和可用性的服务平台。根据结构和功能的不同,集群可划分为以下3类:①高可用集群(High Availability Cluster)在发生故障时自动替换失效的节点,不间断地对外提供服务;②负载均衡集群(Load Balancing Cluster)将服务运行压力分散到多个节点上,通过横向扩展来挖掘每个服务的性能潜力;③高性能计算集群(High Performance Computing Cluster)是将多台机器连接起来,通过并行和任务分片的方式解决大规模的复杂计算问题。3种类型的集群分别对应不同的应用场景,在实际运用中经常联合使用。将水资源管理的专业模型进行集群部署,可快速提升模型并发性能,扩展可用的系统模型资源。
为此,在水资源管理系统服务的集群化设计中,根据模型服务的角色、访问量、性能等特性使用不同的集群构建方式,系统集群逻辑结构如图1所示。
图1 多类型集群的水资源管理系统逻辑结构
针对处于系统枢纽位置的核心应用服务应构建高可用集群,增加备用服务节点,避免单个服务的故障导致整个系统的崩溃;针对访问需求大的应用服务应构建负载均衡集群,使用集群的多个服务节点来分担压力;针对单体规模大、计算耗时长、精度要求高的复杂计算应用服务,应构建高性能集群,有效利用集群的并行机制提升计算效率。
2.2 虚拟容器封装
随着水资源管理业务的不断扩展,系统软件的规模与日俱增,如何经济、便捷、高效地利用已有的计算机硬件资源,为具有平台异构化、功能差异化、运行独立化等特点的各水资源管理应用提供基础支撑,成为了亟待解决的问题。容器技术,是将单个计算机操作系统划分成多个不同的虚拟化运行环境,每个虚拟环境之间互相隔离,进而为有不同配置需求的应用提供虚拟运行环境,是主流的服务资源共享技术。在水资源管理模型集成框架中,容器主要承担基础运行支撑作用,不仅可将模型服务和虚拟运行环境进行集成,同时还可以将集成的容器进行快速镜像复制和独立运行,实现服务多实例同时运行。
容器化是实现水资源管理系统服务集群化的关键方法。单个模型服务可以独立运行在基于容器搭建的虚拟环境中,将含有模型服务的容器进行镜像复制,可快速进行模型服务的多实例部署,实现模型服务的集群化横向扩展且无需额外的配置,提升了模型服务的开发部署效率,是服务集群化的基础支撑。
2.3 微服务架构系统
传统的集中式水资源管理系统架构包括单体架构和垂直架构。典型的单体架构只包含单一的应用、数据库和WEB容器,能够简单灵活地保证服务的快速上线,服务的访问压力较小,技术要求较低;垂直架构将原有的业务拆分成后台系统、前端系统、监控系统等,更加适应水资源管理系统业务模式的复杂化和系统交互需求的提升。随着垂直子系统的增加,传统的集中式架构将无法应对系统间调用关系的指数级增长,而面向服务的系统架构(SOA),是满足系统开发和维护复杂化的一种解决方案。
微服务架构是一种与特定技术无关的SOA架构,支持Java、Python等多种主流编程语言。微服务架构可为水资源管理服务的集群化提供系统级集成平台,利用微服务架构的服务治理方案,可实现水资源管理专业模型服务的服务注册、服务发现、请求转发和负载均衡等功能。此外,微服务具有体积小、独立运行、轻量级通讯等特点,每个服务独立运行,服务间通过网络接口相互调用,能够快速、高效地构建出易维护、可伸缩的复杂水资源管理业务。
在构建集群化水资源管理系统时,网关作为微服务系统的组件,通过一系列的过滤器(Filters)对外部请求进行过滤处理,从而实现系统的请求转发、专业模型服务负载均衡、业务系统性能监控、基础数据安全维护等功能。
3 水资源管理系统集群化设计
3.1 系统框架设计与研究
随着数据量和业务量的逐步扩充,水资源管理系统对可复用性、易管理性、强安全性、高稳定性等多方面特征提出了更高的要求。本文基于微服务的服务治理平台构建水资源管理系统服务集群化框架,设计框架如图2所示。其中服务注册中心是服务治理的核心组件,是服务、服务实例和服务地址的数据库,可以感知整个系统内部服务的运行状态。外部请求和上层智能应用从服务注册中心获取服务的真实地址,从而实现服务的调用。对于注册中心这样的核心组件服务,采用多实例部署的方式实现服务的高可用集群化,每个注册中心实例功能相同,当主注册中心节点发生故障时,备用注册中心节点继续运行,从而保障系统安全稳定运行。
图2 水资源管理系统服务集群化框架
将水资源管理相关专业模型封装成服务并对外提供可调用接口,运行在基于容器的独立虚拟运行环境中,进一步将运行服务的容器进行镜像复制,以快速将模型服务进行多节点部署。同一服务的多个节点可部署在一台物理机上,也可以部署在多台物理机上并通过网络进行连接,形成水利模型服务负载均衡集群。当外部和上层智能应用对同一个模型服务同时发送多个请求时,系统网关模块首先通过注册中心获取模型服务集群内所有节点的地址,然后选取不同的节点资源对服务请求进行响应,将服务请求压力分散到多个功能相同的服务节点上,实现专业模型服务的负载均衡集群。为了最大化程度挖掘负载均衡集群的性能,系统网关模块常采用多种负载均衡算法进行集群内节点的选取和调用,判断依据为集群节点的状态和可正常运行节点数量等多种因素,常用的算法有:轮询法、随机法、随机轮询法、源地址哈希法、加权轮询法等。
由此可见,基于服务集群化框架,可构建水资源管理专业模型服务的负载均衡集群,横向提升单个模型服务性能,从而提升系统整体性能。同时,针对系统关键的枢纽节点构建高可用集群,保证系统关键服务不间断运行,提高了系统整体稳定性。
3.2 系统框架实现流程
在服务集群化系统构建过程中,首先要将专业模型进行服务化封装,然后需要对服务运行环境进行快速搭建和镜像复制,并实现系统分布式架构中服务的高效治理,最终完成系统集成。为此,以水文预报模型的系统集成为例,详细介绍水资源管理系统服务集群化框架的实现流程,并以水文预报评估业务为例,介绍水资源管理系统复杂业务的集成方法。
3.2.1 专业模型的服务化封装
将水资源管理相关专业模型进行服务化封装,是本文系统框架实现的前提条件。如图3所示,为了方便表示和通用化设计,将水文预报模型简化描述为单一的功能模块,通过设置模型的静态参数,并输入与时间相关的动态数据,水文预报模型能够输出预报的结果序列。
图3 水文预报模型
将水文预报模型与网络请求处理接口(如Servlet)进行结合,由网络请求处理接口处理水文预报模型的对外交互,接收外部请求(Request)发送的模型参数和输入数据,通过模型计算后将输出结果通过响应(Response)进行反馈,如图4所示,模型内部结构对系统集成人员透明,从而完成水文预报模型的服务化封装。
图4 水文预报模型服务
3.2.2 服务资源的容器化封装
水文预报模型的运行需要相应的软硬件支持,例如运行Java语言开发的水文预报模型服务需要安装Java运行环境JRE(Java Runtime Environment)和Web 应用服务器Tomcat等软件资源,且至少为其分配256 M内存空间和512 M硬盘空间的硬件资源。
如图5所示,根据水文预报模型服务运行软硬件需求,采用虚拟容器(如轻量级的Docker)技术将服务及其软硬件运行环境进行打包,得到虚拟容器镜像(Image),根据镜像可创建水文预报模型服务的最小运行环境,即虚拟容器,最大限度提高系统资源利用率。由于虚拟容器与外部相对隔离,不依赖于特定的操作系统和硬件资源,所以创建的容器化水文预报模型服务可独立发布到任意支持Linux或Windows操作系统的计算机上,可以极大节省开发流程中的软硬件资源和配置时间。
图5 水文预报服务容器
3.2.3 基于镜像的容器节点扩展
服务容器镜像具有快速复制的能力,可以在短时间内可扩展为多个功能相同的服务节点,可以为水文预报模型服务提供可复用的基础运行环境、灵活的资源配置管理和便捷的集成测试方法。如图6所示,水文预报模型服务容器节点1、节点2以及其他扩展节点具有相同的模型功能,即可以部署在同一台物理机上,也可以部署在不同的物理机上,通过网络将多个节点连接,采用负载均衡机制响应并发的网络请求,可构建基本的水文预报服务负载均衡集群,缓解单个服务节点的运行压力。
图6 水文预报模型集群部署
3.2.4 基于微服务的集群化部署
要实现水文预报模型服务集群的部署和应用,需要考虑分布式系统架构高效服务治理的各种应用需求,包括服务注册发现、服务配置、服务互相调用和请求转发等多种功能。以主流的微服务治理框架SpringCloud为例,如图7所示,SpringCloud框架使用一系列子组件简化微服务系统的基础设施开发,采用基于默认配置的Springboot技术实现了服务的发现注册、配置中心、系统监控等功能,极大简化了系统开发和应用流程。将服务之间的直接依赖转化为服务对服务中心的依赖,实现服务之间的高内聚、低耦合及工程应用。
图7 微服务架构集群化部署
SpringCloud Eureka组件是微服务框架的核心模块,可实现服务的注册和发现,将水文预报服务集群所有节点进行注册,可对外提供可用的服务资源地址列表。网关模块主要负责系统请求转发和路由过滤,同时可实现系统服务的请求负载均衡,当外部PC端或移动端对水文预报服务发送请求时,网关模块查询注册中心的服务资源地址列表,根据负载均衡算法得到当前可访问的服务地址,然后通过地址访问水文预报服务集群中对应的服务节点,触发水文预报模型并将模型输出结果进行返回。
水资源管理相关专业模型之间不可避免会存在数据关联和依赖,系统内部各种专业模型服务之间的互相调用与通信是实现系统复杂业务的技术支撑。主流的微服务架构都有内部服务通讯的实现方法,如图7中Feign调用路径所示,SpringCloud微服务架构根据注册中心实现这一功能,其他服务通过网络接口对注册中心查询,得到水文预报服务的真实地址从而进行访问,且对水文预报服务集群的访问地址由负载均衡算法优化。
3.2.5 复杂业务集成
除单个模型的服务集群化部署外,水资源管理系统往往包含了复杂的业务功能,需要多个专业模型的协同作业。以水文预报评估业务为例,该业务包括水文预报和预报评估2个模型,其中水文预报模型是预报评估模型的依赖,即必须先进行水文预报,才能进行预报结果评估。水文预报评估业务集成步骤如下:
(1)首先将2个模型分别服务化,得到水文预报模型服务和预报评估模型服务。此外为实现预报评估模型对预报模型的数据通信,将预报模型的访问接口写入评估模型中。
(2)然后将2个服务及其运行环境依赖进行封装,得到水文预报模型服务容器镜像和预报结果评估模型服务容器镜像。
(3)将产生的2个模型服务容器镜像分别进行快速复制,扩展得到对应的多个镜像水文预报模型服务容器和多个镜像预报结果评估模型服务容器。
(4)将所得的水文预报模型服务容器和预报结果评估模型服务容器均与高可用的服务注册中心节点和备用服务注册中心节点连接,实现2种专业模型的负载均衡集群。
针对一次外部请求,服务注册中心节点的高可用集群依靠备份节点的冗余性,保证了系统基本功能的正常运行,提升了系统的稳定性;水文预报模型构建的高可用集群,减少了服务的中断时间,保证了系统水文预报评估业务的正常运行;水文预报模型服务和预报结果评估模型服务集群依靠负载均衡集群的构建和网关负载均衡算法,能够自动分配当前运行效率最高的节点进行服务响应,最大限度挖掘系统性能潜力,减少了外部请求的响应等待时间,提升了系统的整体运行速度。
4 案例分析
金沙江下游-三峡梯级水库群是长江流域最大的水库群,包含乌东德、白鹤滩、溪洛渡、向家坝、三峡、葛洲坝6座巨型水电站,总防洪库容376.43亿m3,占长江上中游总防洪库容的2/3;总装机容量将超过7 000万kW、年均发电量超过3 000亿kW·h,装机容量和年发电量均居世界水电行业首位。针对金沙江下游-三峡梯级水库群的综合利用需求,需研发一套扩展性、兼容性强,集水文预报、河道模拟、库群模拟、以及调度方案编制、评估、实施和信息反馈于一体的水资源管理决策支持系统。
金沙江下游-三峡梯级电站水资源管理决策支持系统(The decision support system for water resources management in the lower reaches of Jinsha river-Three Gorges cascade power stations,DSS-JT)包含水文预报、河道演进、梯级水库群调度、厂内经济运行、调度运行评估等多种水资源管理专业模型,将各专业模型进行服务封装并提供访问接口,采用本文设计的水资源管理系统服务集群化框架,逐步构建集群化服务,使系统具备运行稳定、响应快速、易维护、可伸缩等特性。除水资源管理专业模型外,完整的金沙江下游-三峡梯级电站水资源管理决策支持系统还应包含基于基础数据平台的统一数据资源服务、系统数据资源和系统模型资源安全保障体系和丰富的人机交互界面,搭建的集群化系统框架如图8所示,API(Application Programming Interface)是一种预先定义的接口。
图8 金沙江下游-三峡梯级电站水资源管理决策支持系统集群化框架
采用本文提出的框架技术,结合主流的Docker虚拟容器和SpringCloud微服务架构实现的金沙江下游-三峡梯级电站水资源管理决策支持系统部分核心代码如下所示。
public class MyUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(final String username){
String role=userFromDataBaseEntity.getRole();
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(userRole);
grantedAuthorities.add(grantedAuthority);
return new User(grantedAuthorities);
}
}
金沙江下游-三峡梯级电站水资源管理决策支持系统的实际开发全部采用开源软件和工具,最终部署在Windows服务器,以水文预报模型服务的开发与运行为例,通过访问测试,本文框架与传统的集中式框架的系统集成情况比较如表1所示。由表1可以看到,对于水文预报模型的1次请求,集中式架构由于采用了高性能服务器,响应时间相对较小;对于10次并发请求,集中式架构只能串行处理,响应时间成倍增加,而本文的服务集群化架构由于可以快速进行服务节点的扩展,采用负载均衡机制将请求压力分散到10个节点(极端情况),总体响应时间只有少量增加。
表1 系统集成情况对比
基于服务集群化框架设计的金沙江下游-三峡梯级电站水资源管理决策支持系统经过开发、安装、测试、部署和试运行,目前已经在中国长江电力有限股份公司宜昌梯级调度中心上线应用,系统应用部分效果如图9所示。
图9 金沙江下游-三峡梯级电站水资源管理决策支持系统应用效果
系统在多业务环境下,需同时调用安全权限服务、数据读写服务、调度计算服务、地理信息系统(GIS)静态地图服务、GIS动态数据服务等,面向多用户高并发请求,服务集群能够正常稳定运行并正确执行响应。在多用户同时启动相同业务内容的情景下,例如包含GIS模块的河道仿真业务,其中包括多进程调用,系统服务集中式部署与集群化部署响应对比如表2所示。
表2 集中式与集群化响应情况对比
受到网络负载能力以及服务并行能力的限制,在服务独立集中化部署环境下,当用户指数级增长时,响应时间也指数级增长,并在大量用户同时执行时引起响应极慢甚至停滞。由表2看出,服务集群化很好地应对了多用户并发执行高计算消耗任务,极大提升了系统使用体验。同时,DSS-JT系统集群化框架广泛适用于水利信息化系统,分布式微服务的集成方式可以应用在B/S及C/S结构与移动端系统,在做到高性能的同时满足高复用性需求。
5 结论与讨论
5.1 结 论
本文针对传统水资源管理系统中单个模型服务运行效率低的性能瓶颈,探究了系统集群化技术和实现方法,结合虚拟容器提供的基础运行环境支撑,引入微服务的服务治理框架,提出了一种水资源管理系统服务集群化方法。
模型服务化将水文预报、水库群调度等水资源管理专业模型进行服务封装并提供服务访问接口,是水资源管理系统服务集群化的前提。而虚拟容器技术作为轻量级虚拟机技术,是服务集群化基础运行环境的支撑。本文提出并设计的水资源管理系统服务集群化方法,将有限的硬件资源进行合理分配并保持每个容器环境隔离,从而实现每个水资源管理专业模型独立运行且不受其他程序干扰,解决了水资源管理专业模型远程访问、服务间调用和系统负载均衡的技术难题,同时,将水资源管理模型服务容器进行集群化部署,可将单个模型的运行压力分散到多个容器节点,减少外部请求响应时间,为上层应用提供不间断和高性能的服务支持。
采用本文提出的水资源管理系统服务集群化方法研发了金沙江下游-三峡梯级电站水资源管理决策支持系统,并在中国长江电力股份有限公司宜昌梯级调度中心上线应用,实际效果表明,服务集群化方法显著提升了水资源模型服务运行效率和系统交互性能。
5.2 讨 论
作为一种面向水资源管理系统的分布式集群化服务框架,服务集群化部署需要有足够充分的计算机硬件设备支持以及较好的网络互联环境。此外,集群化的建立需要复杂配置,操作难度较大,且单一服务的更新维护均需要同步到所有节点,造成较多的工作量。
深入研究水资源管理专业模型的并行化,寻求高效简便的集群化集成方案,并探索高性能计算集群在进一步提升系统整体性能中的重要作用是水利信息系统集群化架构的重要研究内容。