劉櫻,楊明,徐集云,王銳,曾悠,高婷
(1.浙江省氣候中心,杭州310017;2.浙江省氣象信息網(wǎng)絡(luò)中心,杭州310017;3.浙江省交通規(guī)劃設(shè)計研究院有限公司,杭州310017)
暴雨強度公式是反映降雨規(guī)律、指導(dǎo)城市排水防澇工程設(shè)計和相關(guān)設(shè)施建設(shè)的重要基礎(chǔ)。傳統(tǒng)的暴雨強度統(tǒng)計是根據(jù)當(dāng)?shù)亟邓當(dāng)?shù)據(jù)進行擬合后給出經(jīng)驗公式,根據(jù)經(jīng)驗公式代入需要計算的重現(xiàn)期及降水歷時后,得出暴雨強度值,這樣的查詢方式復(fù)雜、繁瑣且較為費時,已經(jīng)不能滿足現(xiàn)在氣象業(yè)務(wù)中大數(shù)據(jù)量、高并發(fā)、高效查詢的需求。為了提高暴雨強度計算與查詢的性能和低耦合性的要求,本文嘗試采用Spring Cloud微服務(wù)框架重構(gòu)傳統(tǒng)的暴雨強度公式計算與查詢方式,并對其采用的技術(shù)方法進行研究。
由于暴雨強度公式編制的特殊性,傳統(tǒng)的暴雨強度計算查詢是通過人工計算,沒有一個簡單全面的操作平臺。浙江省氣候中心自2015 年開始,為期4 年時間編制完成了浙江省站70 多個站點的暴雨強度公式,這為本系統(tǒng)提供了基礎(chǔ)支撐,也是本系統(tǒng)的亮點所在。鑒于此,本文以需求為牽引,結(jié)合業(yè)務(wù)應(yīng)用的特點,基于微服務(wù)框架研發(fā)了一套能充分發(fā)揮分層服務(wù)和高并發(fā)的優(yōu)勢,為用戶提供扁平化服務(wù)體驗的暴雨強度服務(wù)平臺。為了解暴雨強度情況提供了翔實的數(shù)據(jù)基礎(chǔ),且操作簡單,大大節(jié)約了計算與查詢時間,為暴雨強度在氣象業(yè)務(wù)和氣候評估中的應(yīng)用起到一定的作用。
隨著云計算、虛擬化等技術(shù)和理念的發(fā)展,2014 年由Martin Fowler 和James Lewis 共同提出微服務(wù)(Micro Service)[1]。微服務(wù)是一個具有高并發(fā)、高擴展、獨立部署等特性的應(yīng)用,它將復(fù)雜的應(yīng)用系統(tǒng)以獨立業(yè)務(wù)模塊的形式拆解成多個應(yīng)用服務(wù)[2],根據(jù)業(yè)務(wù)場景的需要,選擇相應(yīng)的服務(wù)構(gòu)建業(yè)務(wù)場景,每個應(yīng)用服務(wù)都是自治單元,可以采用不同的實現(xiàn)技術(shù),各個應(yīng)用服務(wù)都運行在各自的進程中,并使用輕量級的通信機制(如RESTful 或RPC),相互配合實現(xiàn)完整應(yīng)用[3]。有利于開發(fā)者專注于某個模塊的快速實現(xiàn),并提供應(yīng)用服務(wù)。
相對于傳統(tǒng)的單一的服務(wù)架構(gòu),微服務(wù)將各個功能分解到各個獨立自治的應(yīng)用服務(wù),實現(xiàn)了對整個應(yīng)用系統(tǒng)的解耦,具有以下的優(yōu)勢[4-5]:
(1)實現(xiàn)技術(shù)選型靈活:開發(fā)人員可以針對不同的業(yè)務(wù)場景和服務(wù)需求,選擇不同的開發(fā)技術(shù)或平臺,從而有針對性地解決具體業(yè)務(wù)問題。
(2)復(fù)雜度可控:各個應(yīng)用服務(wù)都專注于單一的功能實現(xiàn),將整體的服務(wù)需求,分散到各個應(yīng)用服務(wù),復(fù)雜度減低,較傳統(tǒng)架構(gòu)更加可控。
(3)功能邊界清晰:各個應(yīng)用服務(wù)之間通過輕量級的接口通信,服務(wù)邊界更加清晰。
(4)具有高擴展性:每個應(yīng)用服務(wù)可以根據(jù)業(yè)務(wù)需求獨立進行擴展。
(5)獨立部署:每個微服務(wù)都運行在獨立的進程中,當(dāng)某個應(yīng)用服務(wù)發(fā)生變更時,可獨立進行部署,無需部署整個應(yīng)用系統(tǒng)。
(6)高容錯:在微服務(wù)架構(gòu)下,故障被隔離在微服務(wù)內(nèi)部??赏ㄟ^超時重試、多副本策略等機制實現(xiàn)應(yīng)用層面的容錯,避免全局不可用[6]。
從邏輯上,暴雨強度服務(wù)平臺分為暴雨數(shù)據(jù)采集、暴雨數(shù)據(jù)處理與強度計算和暴雨信息發(fā)布三個主要模塊,在微服務(wù)架構(gòu)下,三個主要模塊為分解為多個不同的微服務(wù),對于功能相近的微服務(wù)歸并為一個微服務(wù)集,制定相關(guān)服務(wù)標(biāo)準(zhǔn)規(guī)范,微服務(wù)間通過服務(wù)接口通信調(diào)用。暴雨強度服務(wù)平臺的服務(wù)框架如圖1 所示。
圖1 暴雨強度服務(wù)平臺的服務(wù)框架圖
通過將暴雨強度服務(wù)平臺的暴雨數(shù)據(jù)采集、暴雨數(shù)據(jù)處理與強度計算和暴雨信息發(fā)布三個主要微服務(wù)集,統(tǒng)一注冊到注冊中心,用戶通過API 網(wǎng)關(guān)和安全管理微服務(wù),根據(jù)需求組合不同的微服務(wù),通過統(tǒng)一的數(shù)據(jù)標(biāo)準(zhǔn)規(guī)范,經(jīng)過采集、加工等流程,在用戶端展示。
微服務(wù)應(yīng)用需要統(tǒng)一管理,因此,需要引入一套微服務(wù)治理框架,本文采用比較流行的Spring Cloud 微服務(wù)治理框架,它主要利用Spring Boot 能夠簡化應(yīng)用服務(wù)的復(fù)雜性,以簡單快速的方式實現(xiàn)各個服務(wù)和部署應(yīng)用,并且具有跨平臺的互操作性、數(shù)據(jù)重用性等優(yōu)勢,可以有效解決快速開發(fā)部署、跨平臺、網(wǎng)絡(luò)異構(gòu)和數(shù)據(jù)重用等問題,簡化了分布式系統(tǒng)的基礎(chǔ)開發(fā),如配置中心、負載均衡、斷路器、服務(wù)注冊發(fā)現(xiàn)、數(shù)據(jù)監(jiān)控和消息總線等。
本文利用Spring Cloud 微服務(wù)框架定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)調(diào)用方式和接口,為各個服務(wù)之間的數(shù)據(jù)交換和查詢等提供標(biāo)準(zhǔn)化的數(shù)據(jù)支撐。利用Spring Cloud 框架在暴雨強度服務(wù)平臺中主要具有以下功能:①利用Config 公共配置組件,為微服務(wù)集群的參數(shù)提供統(tǒng)一的配置;②利用Eureka 服務(wù)注冊中心組件,在微服務(wù)啟動時,向Eureka 注冊中心注冊微服務(wù),利用心跳連接,監(jiān)控各個微服務(wù)的運行狀況;③利用Zuul的API 網(wǎng)關(guān)服務(wù)組件,實現(xiàn)微服務(wù)的路由,通過配置映射指定服務(wù)分發(fā)請求,發(fā)現(xiàn)調(diào)用其他的微服務(wù),并執(zhí)行相關(guān)的業(yè)務(wù)邏輯;④利用Hystrix 服務(wù)斷路器,實現(xiàn)服務(wù)的調(diào)用熔斷控制、降級處理,保障服務(wù)故障快速處理,提供可視化監(jiān)控;⑤利用Ribbon 軟負載均衡組件,提供的負載均衡算清,結(jié)合服務(wù)注冊中心實現(xiàn)服務(wù)間調(diào)用的軟負載、動態(tài)部署和橫向擴容等。在微服務(wù)框架中,面向用戶的是暴雨信息發(fā)布服務(wù),其他服務(wù)在微服務(wù)框架的內(nèi)部進行調(diào)用。因此,權(quán)限管理統(tǒng)一放在網(wǎng)關(guān),所有外部服務(wù)請求經(jīng)過網(wǎng)關(guān)時,判斷是否合法。
暴雨數(shù)據(jù)查詢系統(tǒng)面臨著大量的歷史數(shù)據(jù)、查詢計算等高效服務(wù)問題,隨著各類數(shù)據(jù)的廣泛使用,暴雨相關(guān)的數(shù)據(jù)呈現(xiàn)出了大數(shù)據(jù)的特征。從數(shù)據(jù)角度來看,傳統(tǒng)的單臺服務(wù)器的存儲和處理能力性能,越來越難得滿足數(shù)據(jù)集增長和計算的需求,這些需要把傳統(tǒng)的微服務(wù)進行再分解和架構(gòu)。根據(jù)暴雨強度服務(wù)平臺的暴雨數(shù)據(jù)采集、暴雨數(shù)據(jù)處理與強度計算和暴雨信息發(fā)布三個主要模塊,分解微服務(wù),形成微服務(wù)集群。
(1)暴雨數(shù)據(jù)采集
暴雨強度計算數(shù)據(jù)的來源主要包括歷史降水量、歷時各地區(qū)暴雨強度計算參數(shù)和其他數(shù)據(jù)等,這些數(shù)據(jù)一方面通過歷年氣象自動站采集,整理質(zhì)控后的氣象數(shù)據(jù);另一文獻是根據(jù)各個地區(qū)不同重現(xiàn)期整理的計算參數(shù)等。后期還包括空間數(shù)據(jù)等,數(shù)據(jù)的來源具有全面性、異構(gòu)性和多元性,通過分析本文將暴雨采集微服務(wù)群,對數(shù)據(jù)進行分類與歸納,拆分為不同的微服務(wù),對接不同的數(shù)據(jù)類型和存儲。數(shù)據(jù)存儲主要分為關(guān)系型結(jié)構(gòu)化數(shù)據(jù)庫和非結(jié)構(gòu)化數(shù)據(jù)庫兩種數(shù)據(jù)庫,同時針對大數(shù)據(jù)量的數(shù)據(jù),采用分布式文件系統(tǒng)來存儲。拆分的微服務(wù)包括歷史氣象數(shù)據(jù)采集、參數(shù)采集和其他數(shù)據(jù)采集三個服務(wù)。
圖2 暴雨數(shù)據(jù)采集示意圖
(2)暴雨數(shù)據(jù)處理與強度計算
根據(jù)業(yè)務(wù)分析,按照業(yè)務(wù)場景和種類拆分為不同的微服務(wù),實現(xiàn)不同的微服務(wù)之間的通信。計算任務(wù)采用Spark 框架進行流式計算。微服務(wù)集為分短歷時暴雨強度計算微服務(wù)、歷時最大降水量計算微服務(wù)和降水分布特征查詢策服務(wù)。
①短歷時暴雨強度計算
根據(jù)各歷時不同重現(xiàn)期下的降水量和暴雨強度公式,計算不同地區(qū)的短歷時暴雨強度。
式中:q 為暴雨強度(單位:L/(S·hm2)),P 為重現(xiàn)期(單位:a),t 為降雨歷時(單位:min)。重現(xiàn)期越長、歷時越短,暴雨強度就越大,而A1、b、c、n 是與地方暴雨特性有關(guān)的參數(shù),A1雨力參數(shù),即重現(xiàn)期為1a 時的1min 設(shè)計降雨量(單位:mm);c 為雨力變動參數(shù);b 為降雨歷時修正參數(shù),即對暴雨強度公式兩邊求對數(shù)后能使曲線化成直線所加的一個時間參數(shù)(單位:min);n為暴雨衰減指數(shù),與重現(xiàn)期有關(guān)。
②歷時最大降水量計算
以滑動求和的方法,計算各地區(qū)常規(guī)歷時下的最大降水量。以分鐘數(shù)據(jù)庫為基礎(chǔ),計算5、10、15、20、30、45、60、90、120、150、180、1440 分鐘下的常規(guī)站及自動站的年最大降水量值,實現(xiàn)降水分布制圖功能。
③降水分布特征查詢
通過歷時數(shù)據(jù),實現(xiàn)常年降水分布特征統(tǒng)計值及空間分布計算(時段分為1971-2000 年及1981-2010年兩個時段,共計30 年),計算常年同期的降水值計算及空間分布計算。
(3)暴雨信息發(fā)布
暴雨信息發(fā)布是面向用戶或應(yīng)用的環(huán)節(jié),用戶通過客戶端或應(yīng)用對服務(wù)端API 的資源進行請求,經(jīng)過網(wǎng)關(guān)合法性驗證后,根據(jù)業(yè)務(wù)邏輯,調(diào)用不同的微服務(wù)進行統(tǒng)計計算,向用戶或應(yīng)用返回請求計算或查詢結(jié)果。提供的功能如下:①統(tǒng)計與查詢?nèi)我鈺r段,任意重現(xiàn)期(年)下的各地區(qū)降水量;②全省多年一遇降水分布,提供各地區(qū)降水量的空間分布特征分析;③各地區(qū)暴雨強度公式,提供計算公式參數(shù)的查詢。
利用本文介紹的技術(shù)及方案,實現(xiàn)了基于Spring Cloud 微服務(wù)框架的暴雨強度計算與查詢系統(tǒng),簡稱暴雨強度服務(wù)平臺。應(yīng)用結(jié)果顯示,該設(shè)計方案具有較好的效果和良好的應(yīng)用價值。暴雨強度服務(wù)平臺效果如圖3 所示。
圖3 暴雨強度服務(wù)平臺效果圖
氣象信息化是解決未來氣象集約化、一體化的發(fā)展方向。本文針對傳統(tǒng)的暴雨強度單體結(jié)構(gòu)應(yīng)用存在的可擴展性、并發(fā)性、維護性等方面的問題,介紹了一種微服務(wù)框架下的暴雨強度服務(wù)平臺的設(shè)計與實現(xiàn)。介紹了微服務(wù)框架的特征及優(yōu)勢、微服務(wù)架構(gòu)的暴雨強度服務(wù)平臺微服務(wù)化關(guān)鍵問題的總體結(jié)構(gòu)、解決治理方案、接口方案等,設(shè)計了暴雨數(shù)據(jù)采集、暴雨數(shù)據(jù)處理與強度計算和暴雨信息發(fā)布三個主要微服務(wù)集的各個子功能服務(wù),最后介紹了其應(yīng)用實現(xiàn)。Spring Cloud 框架的實踐為暴雨強度公式計算在研究降雨規(guī)律、評估指導(dǎo)城市排水防澇工程設(shè)計和相關(guān)設(shè)施建設(shè)的重要基礎(chǔ),也為氣象業(yè)務(wù)系統(tǒng)提供了一種新的建設(shè)思路和手段,提高了氣象信息化能力。