APP下载

Redis内存数据库在长江上游水资源管理决策支持系统中的应用研究

2021-10-19方豪文周建中贾本军汤正阳纪传波

水力发电 2021年7期
关键词:决策支持系统内存框架

方豪文,周建中,贾本军,汤正阳,纪传波

(1.华中科技大学土木与水利工程学院数字流域科学与技术湖北省重点实验室,湖北 武汉 430074;2.中国长江电力股份公司智慧长江与水电科学湖北省重点实验室,湖北 宜昌 443000)

0 引 言

近年来,信息化技术的快速发展促进了水利行业由传统管理模式向信息化方向的转变[1]。作为国民经济和社会发展的基础产业,水利行业必须充分利用先进的信息化技术,加快水利信息化建设,实现水利现代化发展[2]。水资源管理决策支持系统构建是水利信息化建设的重要环节,深化信息化技术在水资源管理决策支持系统的应用,对水利信息化建设具有巨大的推进作用[3]。

随着流域巨型水库群的建成投运和流域水文监测站网体系的逐步完善,水文水资源数据的规模呈现显著的增长趋势[4]。传统的水资源管理决策支持系统直接通过操作磁盘数据库对大规模水文水资源数据进行存取,需要进行频繁的磁盘I/O操作,制约了系统的响应速度,系统服务压力剧增,难以有效满足水资源管理系统信息化建设的功能多样化、数据多元化、业务复杂化的需求[5],亟需设计一种新型数据存储交互框架,进一步提高决策支持系统的整体性能。

为此,研究设计了一种基于Redis的新型数据存储交互框架,利用Redis内存数据库对系统业务常用的水库调度数据、断面水文数据、电站特征数据、水文预报数据以及模型实时计算结果等多元化数据进行缓存,以规避频繁的磁盘数据读写操作和模型重复计算,进而提高系统响应速度,缓解系统服务压力,最终解决传统水资源管理决策支持系统存在的数据交互低效的问题。

1 Web缓存与Redis技术简介

为便于决策者随时随地获取决策支持信息,水资源管理决策支持系统通常被设计为基于分布式架构的Web系统。传统的Web水资源管理决策支持系统通过数据服务频繁执行数据库查询实现数据交互。在水资源数据量呈指数增长的压力下,极易导致数据请求过慢、响应超时等问题。为解决此问题,研究将Web缓存技术应用到系统开发中。

Web缓存是用于临时存储数据文档信息、降低服务请求延时的一种信息技术[6]。使用Web缓存可以有效减少网络带宽消耗、降低服务器压力、提高页面访问速度。根据缓存所处位置的不同,可以将Web缓存分为数据库缓存、CDN缓存、代理服务器缓存、浏览器缓存和应用层缓存等[7]。其中,数据库缓存适用于短时间内存在高并发数据查询请求的系统,如水资源管理决策支持系统。

在水资源管理决策支持系统中,不同用户调用相同的数据访问接口重复查询相同数据、获取计算方案的情况频繁发生,易导致时间和空间资源的浪费。通过使用内存数据库对热点数据进行缓存可以有效解决此类资源浪费问题。内存数据库是区别于传统磁盘数据管理方式、将全部数据存储于内存的一种数据存储体系[8]。内存数据库基于内存对数据进行操作,相较于传统数据库,数据处理速度提升10~103倍;此外,其通过重新设计数据存储体系,取消缓冲区管理器,消除了磁盘和内存之间的数据拷贝开销,简化了内存管理,从而降低了空间开销。

Redis和Memcached数据库是最常用的两种内存数据库。其中,Redis(Remote Dictionary Server)内存数据库是一种可持久化的Key-Value型存储系统[9]。相较于Memcached数据库而言,其在水资源管理决策支持系统开发中具有如下独特的优点:①支持多类型编程语言,如Java、Python、C/C++,能够有效降低系统的开发集成复杂度[10];②具备更多的数据类型(列表,集合,有序集合等)和数据操作(交集、并集、排序),能够提升系统的敏捷开发速度[11];③增加数据持久化功能以及主从复制功能,能够提升系统的稳定性和可用性。

2 基于Redis的水资源管理决策支持系统数据交互框架

2.1 模式设计

在传统水资源管理决策支持系统中,水文水资源数据都存储于结构化数据库中。数据服务模块在收到各业务模块的数据请求后,通过执行SQL语句在结构化数据库中获取相应数据并传递给相应业务模块,在此基础上,业务模块进行模型计算,并将计算结果返回给客户端,具体流程见图1。

图1 传统的数据交互模式

传统的数据交互模式逻辑简单、易于实现,在数据规模较小、业务逻辑简单的系统中运用效果良好;但在具有海量水资源数据、业务逻辑错综复杂的现代水资源管理决策支持系统中,极易导致大量时间和空间资源的浪费,不足以满足水利信息化的业务需求。为克服传统数据交互模式存在的问题,设计了一种新型水资源管理决策支持系统数据交互模式。在新型数据交互模式中,通过充分利用缓存的读写速度优势,将耗时较长的数据库查询结果和模型计算结果进行缓存,显著减小外部数据请求的响应时间,极大提升系统整体数据的交互效率,改进后的数据交互过程如图2所示。

图2 优化后数据交互模式

在图2所示的改进数据交互模式中,针对客户端发送的服务请求,业务模块首先判断是否涉及缓存操作,对于不需要缓存的部分业务,其数据交互流程与传统数据交互流程相同,而对于涉及缓存的相关业务,具体的数据交互过程为:

步骤1,根据请求的内容生成键值(Key),在Redis内存数据库中根据Key进行查找。

步骤2,如果Redis缓存中存在与此键值相对应的内容,则取出,执行步骤6。

步骤3,如果在Redis缓存中未查询到相应结果,则在原始数据服务器中查询所需数据,并判断是否需要进行模型计算,如果需要则执行步骤4;否则,直接执行步骤5。

步骤4,进行模型计算。

步骤5,将结果缓存到Redis数据库,并设置加入随机值的过期时间。

步骤6,返回结果。

特别地,在将查询或模型计算结果缓存进Redis内存数据库前,会对结果进行非空检验。若结果不为空,将其写入Redis内存数据库,并设置一个加入随机值的缓存过期时间,避免大量缓存同时过期造成的缓存雪崩;若结果为空,则将空值缓存进Redis内存数据库,并设计一个较短的过期时间,防止系统遭受恶意攻击时,大量查询为空的请求造成的缓存穿透问题。新型数据交互模式相较于传统数据交互模式具有以下优点:①减少数据查询时间,对于重复查询的数据可以直接从Redis内存数据库中查询,节省从海量数据中筛选数据的时间;②降低服务器压力,减少磁盘数据库访问次数可以减轻数据库服务器压力,避免模型服务重复计算,缓解Web服务器压力;③提高水资源管理决策支持系统稳定性,多用户同时向服务端发送请求,对于相同请求可以直接响应,避免高并发引起的系统崩溃。

2.2 设计与实现

2.2.1 数据交互框架设计

基于新型数据交互模式(见图2),设计了一种新型的水资源管理决策支持系统数据交互框架(见图3),通过在系统中加入缓存模块,优化对用户数据请求的响应方式,显著提高了系统的数据交互效率,有效释放了原始数据库服务器的压力。

将Redis内存数据库部署于服务器集群,并配置哨兵模式(Sentinel)以及主从机制(Master-Slave),对各Redis服务的任务进行明确分工,进而保证在部分服务器宕机的情况下数据交互机制的正常使用;此外,对Redis数据库中的数据进行持久化存储备份,降低服务器重启导致的数据丢失风险,确保水资源管理决策支持系统安全稳定运行。具体的数据交互框架如图3所示。

图3 基于Redis的数据交互框架

2.2.2 数据交互框架技术实现

根据图3所示的框架,对其进行技术实现。虽然将Redis应用于单机时,部署简单且通信资源占用少,但单机数据库的性能受软硬件性能的影响较大,增大了数据库节点故障导致的系统无法使用的风险。因此,在基于Redis的水资源管理决策支持系统数据交互框架的技术实现中,使用主从机制和哨兵机制对Redis数据库进行集群化部署,可有效减轻单个数据库节点故障对系统正常使用的影响,提高系统的可用性和稳定性。此外,Redis内存数据库的操作都是基于内存进行的,为避免因服务器宕机或重启导致的水资源数据丢失风险,数据交互框架的技术实现使用持久化机制对Redis中的缓存数据进行持久化存储。Redis常用的持久化机制有快照持久化(RDB)和文件追加持久化(AOF)两种。在水资源管理决策支持系统数据交互框架中,为保证数据的安全性与稳定性,同时使用了这两种持久化方式。水资源管理决策支持系统中,Redis集群化部署与持久化方式的技术关键如下所述。

Redis内存数据库的集群化部署依赖于主从机制和哨兵机制的实现。Redis主从机制部署多台Redis数据库在不同服务器上,并区分主库(Master)和从库(Slave)。在水资源管理决策支持系统中,对主库和从库的任务进行明确分工,选取一个主库主要负责数据的写操作,其他数据库作为从库负责读操作,且主库与从库之间会进行同步备份,保证主从库之间数据的一致性。哨兵机制可实时监控所有Redis数据库的运行状态,哨兵系统中的每一个监控节点都会与所监控的数据库节点保持通信,通过监控节点与数据节点的实时信息交换,可以在主库出现故障时,立即选择其他的从库成为新的主库,保证数据库集群读写功能的正常使用。主从机制与哨兵机制的部署如图4所示。

图4 主从机制与哨兵机制

主库与从库之间的数据同步依赖于持久化机制。主库接收到从库发来的同步请求后,会进行一次RDB持久化操作生成一个dump.rdb文件,并将此文件发送至从库,从库对其进行解析存储,进而完成一次全量备份。在完成全量备份后,如果主库接收到新的写入命令,则会在全量同步之后将命令发送给Slave,完成增量同步,最终完成一次完全同步过程。为保证系统性能、降低数据传输开销,主从库数据持久化方式的具体配置为:主库完全关闭持久化配置,以此来保证主库数据写入性能达到最优;从库开启数据快照持久化方式及文件追加持久化方式,并对不同的从库设置不同的数据同步时间,避免数据同时同步影响系统使用。

3 应用案例与性能测试

3.1 应用案例

以三峡水利枢纽工程为核心的金沙江下游~三峡梯级水库群,包括乌东德、白鹤滩、溪洛渡、向家坝、三峡和葛洲坝6座巨型水电站,总防洪库容约376.43亿m3,占长江中上游总防洪库容的2/3;总装机容量超过7 000万kW,年均发电量超过 3 000亿kW·h,装机容量和年发电量均居世界水电行业首位[12]。为满足长江上游干支流控制性水库群联合优化运行工程应用及长江经济带重大战略需求,研究建立了一整套适合流域梯级水库群优化运行的核心技术与方法体系,研发了拥有自主知识产权和核心技术、能够满足金沙江下游~三峡梯级水库群综合运行管理工程需求的流域梯级水库群联合优化调度管理应用系统。金沙江下游~三峡梯级水资源管理决策支持系统涉及水文预报、库群调度、流域仿真和运行评估等多个方面的内容,各个模块都需要以大量的水文数据作为支撑来完成相应的功能。

本文设计的基于Redis的数据交互框架已成功应用于金沙江下游~三峡梯级水资源管理决策支持系统中,解决了系统开发过程中遇到的系统访问慢、易崩溃等问题,显著提升了系统的响应速度,保障了系统的稳定性和可用性。系统应用效果如图5所示。

图5 金沙江下游~三峡梯级水资源管理决策支持系统应用效果

3.2 性能测试

性能测试旨在检验基于Redis的数据交互框架在金沙江下游~三峡梯级水资源管理决策支持系统中的功能与作用。选取系统服务中典型的服务接口,使用JMeter进行服务请求,分别记录系统服务在使用新型数据交互框架前后的性能变化。

(1)典型缓存接口测试。选择系统中典型的常用服务接口,使用JMeter分别发送一百次请求,记录每次请求的时间,计算每次请求时间的平均值,结果如见表1。由表1可以看出,系统服务在使用基于Redis的新型数据交互框架后,对数据请求的响应速度得到了数量级的提升,显著提高了数据交互的效率。

表1 典型缓存接口测试结果 ms

(2)不同数据量查询测试。选择常用典型接口daydb/getBetweenData,进行多次请求,每次数据请求量逐渐增大,同一量级数据请求执行10次,计算响应时间的平均值,获得数据请求量与服务响应时间的关系,如图6所示。

图6 有无缓存时查询记录数与查询时间关系对比

由图6可以看出,使用设计的Redis新型数据交互框架之后,随着数据请求查询数据量的增加,服务响应时间的变化较小,在查询记录数达到30 000条左右时,响应时间仍然维持在500 ms以内,而在传统的无缓存数据交互模式中,随着请求数据量的增加,服务响应时间逐渐增加,且在相同查询记录数时,服务响应时间显著大于有缓存模式的响应时间,此外,随着查询数据量的增大,二者响应时间的差异也不断增大。

综上所述,集成Redis内存数据库后,金沙江下游~三峡梯级水资源管理决策支持系统数据交互的响应性能有了数量级的提升,显著降低了服务响应时间,减小了系统服务器的压力,提高了系统的可用性及稳定性。

4 总结与展望

研究以提高水资源管理决策支持系统的数据交互效率为目标,从原理上分析了传统水资源系统数据交互模式的不足,详细剖析了频繁的磁盘I/O操作给系统带来的巨大时间开销和资源浪费,构建了基于Redis的水资源管理决策支持系统数据交互框架。实践应用效果表明,基于Redis的水资源管理决策支持系统数据交互框架显著提高了系统数据交互速度,能够有效保障系统的可用性和稳定性。

猜你喜欢

决策支持系统内存框架
护理临床决策支持系统的理论基础
有机框架材料的后合成交换
框架
面向知识转化的临床决策支持系统关键技术研究
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
基于数据挖掘的决策支持系统及应用研究
关于原点对称的不规则Gabor框架的构造
内存搭配DDR4、DDR3L还是DDR3?
我国在WYO框架下面对的贸易保护现状及应对