劉櫻,楊明,徐集云,王銳,曾悠,高婷
(1.浙江省氣候中心,杭州310017;2.浙江省氣象信息網絡中心,杭州310017;3.浙江省交通規劃設計研究院有限公司,杭州310017)
暴雨強度公式是反映降雨規律、指導城市排水防澇工程設計和相關設施建設的重要基礎。傳統的暴雨強度統計是根據當地降水數據進行擬合后給出經驗公式,根據經驗公式代入需要計算的重現期及降水歷時后,得出暴雨強度值,這樣的查詢方式復雜、繁瑣且較為費時,已經不能滿足現在氣象業務中大數據量、高并發、高效查詢的需求。為了提高暴雨強度計算與查詢的性能和低耦合性的要求,本文嘗試采用Spring Cloud微服務框架重構傳統的暴雨強度公式計算與查詢方式,并對其采用的技術方法進行研究。
由于暴雨強度公式編制的特殊性,傳統的暴雨強度計算查詢是通過人工計算,沒有一個簡單全面的操作平臺。浙江省氣候中心自2015 年開始,為期4 年時間編制完成了浙江省站70 多個站點的暴雨強度公式,這為本系統提供了基礎支撐,也是本系統的亮點所在。鑒于此,本文以需求為牽引,結合業務應用的特點,基于微服務框架研發了一套能充分發揮分層服務和高并發的優勢,為用戶提供扁平化服務體驗的暴雨強度服務平臺。為了解暴雨強度情況提供了翔實的數據基礎,且操作簡單,大大節約了計算與查詢時間,為暴雨強度在氣象業務和氣候評估中的應用起到一定的作用。
隨著云計算、虛擬化等技術和理念的發展,2014 年由Martin Fowler 和James Lewis 共同提出微服務(Micro Service)[1]。微服務是一個具有高并發、高擴展、獨立部署等特性的應用,它將復雜的應用系統以獨立業務模塊的形式拆解成多個應用服務[2],根據業務場景的需要,選擇相應的服務構建業務場景,每個應用服務都是自治單元,可以采用不同的實現技術,各個應用服務都運行在各自的進程中,并使用輕量級的通信機制(如RESTful 或RPC),相互配合實現完整應用[3]。有利于開發者專注于某個模塊的快速實現,并提供應用服務。
相對于傳統的單一的服務架構,微服務將各個功能分解到各個獨立自治的應用服務,實現了對整個應用系統的解耦,具有以下的優勢[4-5]:
(1)實現技術選型靈活:開發人員可以針對不同的業務場景和服務需求,選擇不同的開發技術或平臺,從而有針對性地解決具體業務問題。
(2)復雜度可控:各個應用服務都專注于單一的功能實現,將整體的服務需求,分散到各個應用服務,復雜度減低,較傳統架構更加可控。
(3)功能邊界清晰:各個應用服務之間通過輕量級的接口通信,服務邊界更加清晰。
(4)具有高擴展性:每個應用服務可以根據業務需求獨立進行擴展。
(5)獨立部署:每個微服務都運行在獨立的進程中,當某個應用服務發生變更時,可獨立進行部署,無需部署整個應用系統。
(6)高容錯:在微服務架構下,故障被隔離在微服務內部??赏ㄟ^超時重試、多副本策略等機制實現應用層面的容錯,避免全局不可用[6]。
從邏輯上,暴雨強度服務平臺分為暴雨數據采集、暴雨數據處理與強度計算和暴雨信息發布三個主要模塊,在微服務架構下,三個主要模塊為分解為多個不同的微服務,對于功能相近的微服務歸并為一個微服務集,制定相關服務標準規范,微服務間通過服務接口通信調用。暴雨強度服務平臺的服務框架如圖1 所示。

圖1 暴雨強度服務平臺的服務框架圖
通過將暴雨強度服務平臺的暴雨數據采集、暴雨數據處理與強度計算和暴雨信息發布三個主要微服務集,統一注冊到注冊中心,用戶通過API 網關和安全管理微服務,根據需求組合不同的微服務,通過統一的數據標準規范,經過采集、加工等流程,在用戶端展示。
微服務應用需要統一管理,因此,需要引入一套微服務治理框架,本文采用比較流行的Spring Cloud 微服務治理框架,它主要利用Spring Boot 能夠簡化應用服務的復雜性,以簡單快速的方式實現各個服務和部署應用,并且具有跨平臺的互操作性、數據重用性等優勢,可以有效解決快速開發部署、跨平臺、網絡異構和數據重用等問題,簡化了分布式系統的基礎開發,如配置中心、負載均衡、斷路器、服務注冊發現、數據監控和消息總線等。
本文利用Spring Cloud 微服務框架定義了一套標準的數據調用方式和接口,為各個服務之間的數據交換和查詢等提供標準化的數據支撐。利用Spring Cloud 框架在暴雨強度服務平臺中主要具有以下功能:①利用Config 公共配置組件,為微服務集群的參數提供統一的配置;②利用Eureka 服務注冊中心組件,在微服務啟動時,向Eureka 注冊中心注冊微服務,利用心跳連接,監控各個微服務的運行狀況;③利用Zuul的API 網關服務組件,實現微服務的路由,通過配置映射指定服務分發請求,發現調用其他的微服務,并執行相關的業務邏輯;④利用Hystrix 服務斷路器,實現服務的調用熔斷控制、降級處理,保障服務故障快速處理,提供可視化監控;⑤利用Ribbon 軟負載均衡組件,提供的負載均衡算清,結合服務注冊中心實現服務間調用的軟負載、動態部署和橫向擴容等。在微服務框架中,面向用戶的是暴雨信息發布服務,其他服務在微服務框架的內部進行調用。因此,權限管理統一放在網關,所有外部服務請求經過網關時,判斷是否合法。
暴雨數據查詢系統面臨著大量的歷史數據、查詢計算等高效服務問題,隨著各類數據的廣泛使用,暴雨相關的數據呈現出了大數據的特征。從數據角度來看,傳統的單臺服務器的存儲和處理能力性能,越來越難得滿足數據集增長和計算的需求,這些需要把傳統的微服務進行再分解和架構。根據暴雨強度服務平臺的暴雨數據采集、暴雨數據處理與強度計算和暴雨信息發布三個主要模塊,分解微服務,形成微服務集群。
(1)暴雨數據采集
暴雨強度計算數據的來源主要包括歷史降水量、歷時各地區暴雨強度計算參數和其他數據等,這些數據一方面通過歷年氣象自動站采集,整理質控后的氣象數據;另一文獻是根據各個地區不同重現期整理的計算參數等。后期還包括空間數據等,數據的來源具有全面性、異構性和多元性,通過分析本文將暴雨采集微服務群,對數據進行分類與歸納,拆分為不同的微服務,對接不同的數據類型和存儲。數據存儲主要分為關系型結構化數據庫和非結構化數據庫兩種數據庫,同時針對大數據量的數據,采用分布式文件系統來存儲。拆分的微服務包括歷史氣象數據采集、參數采集和其他數據采集三個服務。

圖2 暴雨數據采集示意圖
(2)暴雨數據處理與強度計算
根據業務分析,按照業務場景和種類拆分為不同的微服務,實現不同的微服務之間的通信。計算任務采用Spark 框架進行流式計算。微服務集為分短歷時暴雨強度計算微服務、歷時最大降水量計算微服務和降水分布特征查詢策服務。
①短歷時暴雨強度計算
根據各歷時不同重現期下的降水量和暴雨強度公式,計算不同地區的短歷時暴雨強度。

式中:q 為暴雨強度(單位:L/(S·hm2)),P 為重現期(單位:a),t 為降雨歷時(單位:min)。重現期越長、歷時越短,暴雨強度就越大,而A1、b、c、n 是與地方暴雨特性有關的參數,A1雨力參數,即重現期為1a 時的1min 設計降雨量(單位:mm);c 為雨力變動參數;b 為降雨歷時修正參數,即對暴雨強度公式兩邊求對數后能使曲線化成直線所加的一個時間參數(單位:min);n為暴雨衰減指數,與重現期有關。
②歷時最大降水量計算
以滑動求和的方法,計算各地區常規歷時下的最大降水量。以分鐘數據庫為基礎,計算5、10、15、20、30、45、60、90、120、150、180、1440 分鐘下的常規站及自動站的年最大降水量值,實現降水分布制圖功能。
③降水分布特征查詢
通過歷時數據,實現常年降水分布特征統計值及空間分布計算(時段分為1971-2000 年及1981-2010年兩個時段,共計30 年),計算常年同期的降水值計算及空間分布計算。
(3)暴雨信息發布
暴雨信息發布是面向用戶或應用的環節,用戶通過客戶端或應用對服務端API 的資源進行請求,經過網關合法性驗證后,根據業務邏輯,調用不同的微服務進行統計計算,向用戶或應用返回請求計算或查詢結果。提供的功能如下:①統計與查詢任意時段,任意重現期(年)下的各地區降水量;②全省多年一遇降水分布,提供各地區降水量的空間分布特征分析;③各地區暴雨強度公式,提供計算公式參數的查詢。
利用本文介紹的技術及方案,實現了基于Spring Cloud 微服務框架的暴雨強度計算與查詢系統,簡稱暴雨強度服務平臺。應用結果顯示,該設計方案具有較好的效果和良好的應用價值。暴雨強度服務平臺效果如圖3 所示。

圖3 暴雨強度服務平臺效果圖
氣象信息化是解決未來氣象集約化、一體化的發展方向。本文針對傳統的暴雨強度單體結構應用存在的可擴展性、并發性、維護性等方面的問題,介紹了一種微服務框架下的暴雨強度服務平臺的設計與實現。介紹了微服務框架的特征及優勢、微服務架構的暴雨強度服務平臺微服務化關鍵問題的總體結構、解決治理方案、接口方案等,設計了暴雨數據采集、暴雨數據處理與強度計算和暴雨信息發布三個主要微服務集的各個子功能服務,最后介紹了其應用實現。Spring Cloud 框架的實踐為暴雨強度公式計算在研究降雨規律、評估指導城市排水防澇工程設計和相關設施建設的重要基礎,也為氣象業務系統提供了一種新的建設思路和手段,提高了氣象信息化能力。