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