方豪文,周建中,賈本軍,湯正陽,紀傳波
(1.華中科技大學土木與水利工程學院數字流域科學與技術湖北省重點實驗室,湖北 武漢 430074;2.中國長江電力股份公司智慧長江與水電科學湖北省重點實驗室,湖北 宜昌 443000)
近年來,信息化技術的快速發展促進了水利行業由傳統管理模式向信息化方向的轉變[1]。作為國民經濟和社會發展的基礎產業,水利行業必須充分利用先進的信息化技術,加快水利信息化建設,實現水利現代化發展[2]。水資源管理決策支持系統構建是水利信息化建設的重要環節,深化信息化技術在水資源管理決策支持系統的應用,對水利信息化建設具有巨大的推進作用[3]。
隨著流域巨型水庫群的建成投運和流域水文監測站網體系的逐步完善,水文水資源數據的規模呈現顯著的增長趨勢[4]。傳統的水資源管理決策支持系統直接通過操作磁盤數據庫對大規模水文水資源數據進行存取,需要進行頻繁的磁盤I/O操作,制約了系統的響應速度,系統服務壓力劇增,難以有效滿足水資源管理系統信息化建設的功能多樣化、數據多元化、業務復雜化的需求[5],亟需設計一種新型數據存儲交互框架,進一步提高決策支持系統的整體性能。
為此,研究設計了一種基于Redis的新型數據存儲交互框架,利用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];③增加數據持久化功能以及主從復制功能,能夠提升系統的穩定性和可用性。
在傳統水資源管理決策支持系統中,水文水資源數據都存儲于結構化數據庫中。數據服務模塊在收到各業務模塊的數據請求后,通過執行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.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,完成增量同步,最終完成一次完全同步過程。為保證系統性能、降低數據傳輸開銷,主從庫數據持久化方式的具體配置為:主庫完全關閉持久化配置,以此來保證主庫數據寫入性能達到最優;從庫開啟數據快照持久化方式及文件追加持久化方式,并對不同的從庫設置不同的數據同步時間,避免數據同時同步影響系統使用。
以三峽水利樞紐工程為核心的金沙江下游~三峽梯級水庫群,包括烏東德、白鶴灘、溪洛渡、向家壩、三峽和葛洲壩6座巨型水電站,總防洪庫容約376.43億m3,占長江中上游總防洪庫容的2/3;總裝機容量超過7 000萬kW,年均發電量超過 3 000億kW·h,裝機容量和年發電量均居世界水電行業首位[12]。為滿足長江上游干支流控制性水庫群聯合優化運行工程應用及長江經濟帶重大戰略需求,研究建立了一整套適合流域梯級水庫群優化運行的核心技術與方法體系,研發了擁有自主知識產權和核心技術、能夠滿足金沙江下游~三峽梯級水庫群綜合運行管理工程需求的流域梯級水庫群聯合優化調度管理應用系統。金沙江下游~三峽梯級水資源管理決策支持系統涉及水文預報、庫群調度、流域仿真和運行評估等多個方面的內容,各個模塊都需要以大量的水文數據作為支撐來完成相應的功能。
本文設計的基于Redis的數據交互框架已成功應用于金沙江下游~三峽梯級水資源管理決策支持系統中,解決了系統開發過程中遇到的系統訪問慢、易崩潰等問題,顯著提升了系統的響應速度,保障了系統的穩定性和可用性。系統應用效果如圖5所示。

圖5 金沙江下游~三峽梯級水資源管理決策支持系統應用效果
性能測試旨在檢驗基于Redis的數據交互框架在金沙江下游~三峽梯級水資源管理決策支持系統中的功能與作用。選取系統服務中典型的服務接口,使用JMeter進行服務請求,分別記錄系統服務在使用新型數據交互框架前后的性能變化。
(1)典型緩存接口測試。選擇系統中典型的常用服務接口,使用JMeter分別發送一百次請求,記錄每次請求的時間,計算每次請求時間的平均值,結果如見表1。由表1可以看出,系統服務在使用基于Redis的新型數據交互框架后,對數據請求的響應速度得到了數量級的提升,顯著提高了數據交互的效率。

表1 典型緩存接口測試結果 ms
(2)不同數據量查詢測試。選擇常用典型接口daydb/getBetweenData,進行多次請求,每次數據請求量逐漸增大,同一量級數據請求執行10次,計算響應時間的平均值,獲得數據請求量與服務響應時間的關系,如圖6所示。

圖6 有無緩存時查詢記錄數與查詢時間關系對比
由圖6可以看出,使用設計的Redis新型數據交互框架之后,隨著數據請求查詢數據量的增加,服務響應時間的變化較小,在查詢記錄數達到30 000條左右時,響應時間仍然維持在500 ms以內,而在傳統的無緩存數據交互模式中,隨著請求數據量的增加,服務響應時間逐漸增加,且在相同查詢記錄數時,服務響應時間顯著大于有緩存模式的響應時間,此外,隨著查詢數據量的增大,二者響應時間的差異也不斷增大。
綜上所述,集成Redis內存數據庫后,金沙江下游~三峽梯級水資源管理決策支持系統數據交互的響應性能有了數量級的提升,顯著降低了服務響應時間,減小了系統服務器的壓力,提高了系統的可用性及穩定性。
研究以提高水資源管理決策支持系統的數據交互效率為目標,從原理上分析了傳統水資源系統數據交互模式的不足,詳細剖析了頻繁的磁盤I/O操作給系統帶來的巨大時間開銷和資源浪費,構建了基于Redis的水資源管理決策支持系統數據交互框架。實踐應用效果表明,基于Redis的水資源管理決策支持系統數據交互框架顯著提高了系統數據交互速度,能夠有效保障系統的可用性和穩定性。