孫周軍,郭 捷,李高潔,喬文文,何文春
(1.廣東省氣象探測(cè)數(shù)據(jù)中心 數(shù)據(jù)共享科,廣東 廣州 510080;2.廣東省氣象公共服務(wù)中心,廣東 廣州 510080;3.國(guó)家氣象信息中心 系統(tǒng)工程室,北京 100081)
氣象行業(yè)主要采用傳統(tǒng)關(guān)系型數(shù)據(jù)庫、集中式文件存儲(chǔ)系統(tǒng)和磁帶庫對(duì)數(shù)據(jù)進(jìn)行分級(jí)管理,在對(duì)歷史天氣進(jìn)行研究過程中無法及時(shí)、便捷地使用完整時(shí)間序列的科研資料[1-3];業(yè)務(wù)系統(tǒng)對(duì)數(shù)據(jù)的調(diào)用多為直接訪問數(shù)據(jù)源,與存儲(chǔ)系統(tǒng)高度耦合度,存儲(chǔ)系統(tǒng)的技術(shù)更新給業(yè)務(wù)應(yīng)用的適配造成很大障礙;傳統(tǒng)的存儲(chǔ)策略和供給方式無法最大限度發(fā)揮訪問效率與并發(fā)供給能力;數(shù)據(jù)資源分散存儲(chǔ)和發(fā)布,沒有集中統(tǒng)一的資料發(fā)布途徑,科研人員無法獲悉資料用法,管理與應(yīng)用脫節(jié)嚴(yán)重。對(duì)海量數(shù)據(jù)的集中治理和高效服務(wù)已經(jīng)是制約氣象業(yè)務(wù)高質(zhì)量發(fā)展的關(guān)鍵問題。
本文提出一體化數(shù)據(jù)訪問服務(wù)方法(integrated database for easy access,IDEA),基于數(shù)據(jù)存儲(chǔ)與應(yīng)用系統(tǒng)間的中間層,作為異構(gòu)數(shù)據(jù)系統(tǒng)與應(yīng)用系統(tǒng)之間的適配器,消除數(shù)據(jù)存儲(chǔ)與應(yīng)用間的強(qiáng)依賴關(guān)系;集中多源地球科學(xué)數(shù)據(jù)管理,統(tǒng)一多種異構(gòu)數(shù)據(jù)格式,融合實(shí)時(shí)與歷史數(shù)據(jù)形成數(shù)據(jù)完整序列;利用服務(wù)總線和服務(wù)化技術(shù),向氣象行業(yè)及時(shí)集中發(fā)布數(shù)據(jù)資源,打通地球科學(xué)數(shù)據(jù)管理與科研應(yīng)用的信息通道,提升了科學(xué)數(shù)據(jù)的管理和應(yīng)用效能。
(1)地域范圍廣:氣象學(xué)研究的是大氣圈內(nèi)各層大氣的運(yùn)動(dòng)規(guī)律,涉及到地球多圈層,且大氣圈與星際太空并無明顯分界。只要是科研需要,且觀測(cè)手段能夠達(dá)到的地方,幾乎均采用立體觀測(cè)平臺(tái),多手段測(cè)量獲取相關(guān)數(shù)據(jù)。我國(guó)除過擁有涵蓋本土的觀測(cè)數(shù)據(jù)外,在WMO組織框架下,也有共享收集到全球部分觀測(cè)、預(yù)報(bào)預(yù)測(cè)產(chǎn)品等數(shù)據(jù)。
(2)時(shí)空密度大:目前,全國(guó)已經(jīng)建成5萬多地面氣象觀測(cè)站,觀測(cè)頻率達(dá)每分鐘每次,160多部多普勒天氣雷達(dá),觀測(cè)頻次達(dá)到6分鐘每次;80多探空觀測(cè)站,觀測(cè)頻率達(dá)秒級(jí)每次;8顆氣象衛(wèi)星,靜止衛(wèi)星觀測(cè)頻率達(dá)到6分鐘每次;閃電定位、GPS/MET、負(fù)氧離子、大氣成分等觀測(cè)已遍布全國(guó),觀測(cè)設(shè)備的布設(shè)密度大,觀測(cè)頻次也大幅提升。
(3)數(shù)據(jù)種類多:氣象業(yè)務(wù)和科研活動(dòng)中涉及到氣象領(lǐng)域本身和社會(huì)多行業(yè)的相關(guān)數(shù)據(jù)。氣象領(lǐng)域以觀測(cè)平臺(tái)分類有天基、空基和地基觀測(cè)資料等,包括衛(wèi)星遙感、雷達(dá)、高空、海洋、輻射、農(nóng)氣、地面常規(guī)觀測(cè)等資料,以及由業(yè)務(wù)系統(tǒng)或科研產(chǎn)生的預(yù)報(bào)、預(yù)警、服務(wù)產(chǎn)品、實(shí)驗(yàn)數(shù)據(jù)等;社會(huì)多行業(yè)的數(shù)據(jù)包括水利、農(nóng)業(yè)、旅游、交通、漁業(yè)、航空、環(huán)保等專業(yè)數(shù)據(jù),以及互聯(lián)網(wǎng)相關(guān)數(shù)據(jù)。按照格式分類,包括文本、圖片、視頻、柵格等。
(4)高時(shí)效性:氣象數(shù)據(jù)在不同的業(yè)務(wù)場(chǎng)景及時(shí)的被獲取和應(yīng)用,才能充分的發(fā)揮其價(jià)值,高時(shí)效性是氣象資料的基本特征之一。天氣預(yù)報(bào)、氣候預(yù)測(cè)、防災(zāi)減災(zāi)和公眾服務(wù)是氣象業(yè)務(wù)活動(dòng)的重要內(nèi)容,臨近預(yù)報(bào)在0-2小時(shí)內(nèi)有效,短時(shí)預(yù)報(bào)在0-12小時(shí)有效,短期預(yù)報(bào)在隨后1-3天有效等;數(shù)值天氣預(yù)報(bào)也一直努力在更短時(shí)間內(nèi)計(jì)算出范圍更廣、時(shí)間更長(zhǎng)的預(yù)報(bào),氣象觀測(cè)數(shù)據(jù)作為其參數(shù)輸入,對(duì)其采集頻次和傳輸時(shí)效要求達(dá)到秒級(jí)。
(5)一致性要求高:氣象部門按照分級(jí)結(jié)構(gòu)劃分為觀測(cè)臺(tái)站、地市、省和國(guó)家氣象局,所從事的業(yè)務(wù)和科研活動(dòng)內(nèi)容非常相似。各級(jí)氣象局在進(jìn)行數(shù)據(jù)質(zhì)量控制、統(tǒng)計(jì)分析、公共信息發(fā)布等采用不同方法和參數(shù)變量,導(dǎo)致部門內(nèi)數(shù)據(jù)存在差異,既造成不良的社會(huì)影響,也給科研工作也帶來諸多不便。氣象數(shù)據(jù)的一致性需要由頂層進(jìn)行統(tǒng)籌規(guī)劃和解決。
因此,氣象部門需要迫切建立具有高擴(kuò)展性、高并發(fā)性、高時(shí)效性的規(guī)范化、集約化的統(tǒng)一氣象科研數(shù)據(jù)治理策略和平臺(tái),為氣象科研與業(yè)務(wù)系統(tǒng)正常運(yùn)行提供強(qiáng)有力的數(shù)據(jù)支撐。
圖1給出了平臺(tái)的系統(tǒng)架構(gòu)。平臺(tái)涉及氣象數(shù)據(jù)從生產(chǎn)到業(yè)務(wù)應(yīng)用,涵蓋數(shù)據(jù)探測(cè)感知、存儲(chǔ)管理和數(shù)據(jù)服務(wù)等環(huán)節(jié)的統(tǒng)一規(guī)劃。感知層是數(shù)據(jù)的來源,涵蓋多行業(yè)的各類異構(gòu)地球科學(xué)數(shù)據(jù),通過質(zhì)量控制、編碼解碼、統(tǒng)計(jì)分析、格式轉(zhuǎn)換形成統(tǒng)一數(shù)據(jù)源。數(shù)據(jù)存儲(chǔ)層是數(shù)據(jù)的存儲(chǔ)管理,通過多態(tài)數(shù)據(jù)庫(關(guān)系型數(shù)據(jù)庫、分析型數(shù)據(jù)庫、內(nèi)存數(shù)據(jù)庫、文件/對(duì)象數(shù)據(jù)庫等)、數(shù)據(jù)同步、讀寫分離、分庫分表等進(jìn)行的分類整理和全序列存儲(chǔ)管理。分布式服務(wù)層是數(shù)據(jù)的調(diào)用方法和算法封裝,包括統(tǒng)計(jì)分析、圖像渲染、等值線追蹤、站點(diǎn)數(shù)據(jù)插值等,通過Docker容器進(jìn)行發(fā)布管理,形成分布式的服務(wù)層。平臺(tái)服務(wù)層是面向管理用戶提供數(shù)據(jù)、算法、可視化服務(wù)、眾創(chuàng)服務(wù)發(fā)布管理和性能監(jiān)視等功能,通過RESTful、Web Service、服務(wù)總線、在線調(diào)試、性能監(jiān)視等提供標(biāo)準(zhǔn)化的調(diào)用API接口和使用資源清單。應(yīng)用層則是該平臺(tái)提供數(shù)據(jù)、算法和服務(wù)的最終用戶應(yīng)用系統(tǒng)。

圖1 系統(tǒng)架構(gòu)
圖2給出了平臺(tái)的軟件架構(gòu)。平臺(tái)的應(yīng)用層由多個(gè)等功能Web應(yīng)用服務(wù)器組成,利用硬件負(fù)載均衡服務(wù)器組件集群形成高可用架構(gòu);Web應(yīng)用服務(wù)器采用混合MVC架構(gòu)和Hibernate持久化架構(gòu),系統(tǒng)邏輯清晰、層次分明、松散耦合,使得系統(tǒng)具有較強(qiáng)的擴(kuò)展性和兼容性。緩存層是提升整套業(yè)務(wù)系統(tǒng)并發(fā)能力的核心。采用了雙Redis[4]集群作為氣象數(shù)據(jù)的高速緩存,對(duì)緩存有效時(shí)限內(nèi)的相同數(shù)據(jù)請(qǐng)求,直接通過內(nèi)存提供數(shù)據(jù)服務(wù),避免對(duì)底層數(shù)據(jù)庫和存儲(chǔ)系統(tǒng)發(fā)出IO請(qǐng)求,降低了存儲(chǔ)層的并發(fā)壓力。數(shù)據(jù)層主要包括平臺(tái)字典數(shù)據(jù)和多圈層地球科學(xué)數(shù)據(jù)的存儲(chǔ),與緩存層和應(yīng)用層分布在不同的網(wǎng)絡(luò)區(qū)域。

圖2 軟件架構(gòu)
圖3給出了平臺(tái)的部署架構(gòu)。平臺(tái)主要有兩個(gè)集群:①基于Socket的格點(diǎn)服務(wù)集群;②基于HTTP的一體化數(shù)據(jù)服務(wù)集群,包含了格點(diǎn)集群服務(wù)的HTTP協(xié)議實(shí)現(xiàn)。

圖3 系統(tǒng)架構(gòu)
基于Socket的格點(diǎn)集群服務(wù):分別在獨(dú)立的兩臺(tái)服務(wù)器(GIFT-1、GIFT-2)上部署格點(diǎn)數(shù)據(jù)服務(wù)(GridDataServer)軟件,由高可用軟件組建主備集群,主服務(wù)器綁定服務(wù)IP對(duì)外發(fā)布服務(wù),主備間通過心跳私網(wǎng)進(jìn)行數(shù)據(jù)同步和服務(wù)健康性的信息傳遞。由于精細(xì)化格點(diǎn)預(yù)報(bào)訂正平臺(tái)對(duì)數(shù)據(jù)的交互操作時(shí)效性要求非常高,因此采用SOCKET進(jìn)行原生數(shù)據(jù)傳輸交換。
基于HTTP的一體化數(shù)據(jù)服務(wù)集群:分別在5臺(tái)服務(wù)器上部署一體化數(shù)據(jù)訪問服務(wù)總線,由兩臺(tái)硬件負(fù)載均衡將其組件為總線集群;Redis緩存服務(wù)利用格點(diǎn)服務(wù)集群高可用軟件和服務(wù)器,搭建Redis集群提供緩存服務(wù);MySQL、Oracle等利用自身數(shù)據(jù)庫的集群架構(gòu),文件數(shù)據(jù)、衛(wèi)星數(shù)據(jù)、圖形產(chǎn)品和格點(diǎn)數(shù)據(jù)按照類別存儲(chǔ)在不同服務(wù)器上,并對(duì)應(yīng)部署FileDataServer、SateDataServer、ImageDataServer、GridDataServer等微服務(wù),形成數(shù)據(jù)服務(wù)層;一體化數(shù)據(jù)訪問服務(wù)總線根據(jù)訪問路由策略,從目前微服務(wù)中獲取數(shù)據(jù)。平臺(tái)各環(huán)節(jié)均采用了集群、高可用方法從而避免了系統(tǒng)單點(diǎn)故障的發(fā)生。
圖4給出了平臺(tái)的主要功能劃分。平臺(tái)主要由服務(wù)總線、資源管理和數(shù)據(jù)服務(wù)三大模塊構(gòu)成。

圖4 功能分布
服務(wù)總線是平臺(tái)用戶的統(tǒng)一出入口。提供數(shù)據(jù)、接口和算法等資源的分類瀏覽和檢索服務(wù);通過基于角色權(quán)限控制技術(shù)確保平臺(tái)的訪問安全;通過建立資源訪問黑、白名單確保數(shù)據(jù)、算法和服務(wù)資源安全;系統(tǒng)建立總體訪問量、用戶訪問量等流量信息內(nèi)存模型,新的請(qǐng)求發(fā)起之前進(jìn)行流量限制策略對(duì)比,達(dá)到限制則立即中斷訪問,確保系統(tǒng)在有效負(fù)載下運(yùn)行;平臺(tái)的各類數(shù)據(jù)存放在不同存儲(chǔ)系統(tǒng),算法與服務(wù)也以微服務(wù)方式部署在不同主機(jī),服務(wù)總線收到用戶的資源訪問請(qǐng)求后,根據(jù)訪問接口名稱、數(shù)據(jù)種類與時(shí)間戳進(jìn)行綜合判斷確定提供服務(wù)的訪問鏈路進(jìn)行重新路由定位,它是平臺(tái)的核心內(nèi)容之一;平臺(tái)根據(jù)每次調(diào)用的詳細(xì)日志記錄,分析各個(gè)接口的平均耗時(shí)、最大耗時(shí),以及時(shí)間段內(nèi)的訪問量和緩存命中率,綜合分析平臺(tái)運(yùn)行的性能等;在線調(diào)試是提供給用戶的可視化在線資源調(diào)用模擬環(huán)境。
資源管理是管理員和眾創(chuàng)人員注冊(cè)、發(fā)布和變更各類資源的統(tǒng)一入口。各類資源的需求都會(huì)隨業(yè)務(wù)需求發(fā)生變化,例如新增數(shù)據(jù)種類,新增服務(wù)算法,修改算法具體實(shí)現(xiàn)、變更接口參數(shù)、變更訪問路由策略等,該模塊提供了以上可視化的操作功能。
接口服務(wù)是平臺(tái)部署的各類數(shù)據(jù)訪問、內(nèi)嵌算法服務(wù)和眾創(chuàng)算法服務(wù)微服務(wù)集。主要涵蓋站點(diǎn)、格點(diǎn)、文件、圖形產(chǎn)品、衛(wèi)星數(shù)據(jù)等的寫入、讀取功能;內(nèi)置有統(tǒng)計(jì)分析、圖形渲染與格點(diǎn)數(shù)據(jù)的融合、插值、裁剪等算法,眾創(chuàng)算法服務(wù)主要由第三方公司編寫的具有復(fù)用性的算法或業(yè)務(wù)功能微服務(wù)。
以上三大模塊構(gòu)成平臺(tái)的整體框架,其中平臺(tái)還涉及到多類數(shù)據(jù)的融合、格式轉(zhuǎn)換、日志維護(hù)等,這些功能相互協(xié)調(diào)才能形成完整的平臺(tái)。
平臺(tái)的綜合運(yùn)用多種IT技術(shù),其中多源異構(gòu)數(shù)據(jù)融合是利用同步技術(shù)將結(jié)構(gòu)化與格式轉(zhuǎn)換技術(shù)將非結(jié)構(gòu)化的數(shù)據(jù)集中統(tǒng)一存儲(chǔ),解決數(shù)據(jù)格式、存儲(chǔ)策略、存儲(chǔ)技術(shù)和管理系統(tǒng)集中統(tǒng)一化問題,是平臺(tái)數(shù)據(jù)支撐基礎(chǔ);網(wǎng)格數(shù)據(jù)裁剪和插值等技術(shù),主要是面向基于位置氣象應(yīng)用場(chǎng)景提供的微服務(wù)算法,是平臺(tái)算法服務(wù)的部分內(nèi)容;熔斷技術(shù)是平臺(tái)主動(dòng)檢測(cè)微服務(wù)性能、響應(yīng)時(shí)間是否正常,當(dāng)異常發(fā)生時(shí)則主動(dòng)將該服務(wù)進(jìn)行隔離,避免過多請(qǐng)求排隊(duì)等待該服務(wù)響應(yīng),導(dǎo)致平臺(tái)整體性能和容量被擠占無法正常服務(wù),是平臺(tái)正常運(yùn)行的關(guān)鍵;高可用和高并發(fā)是決定平臺(tái)承載容量的關(guān)鍵,緩存、數(shù)據(jù)壓降低平臺(tái)響應(yīng)延時(shí),提升并發(fā)能力;高可用軟件保證核心數(shù)據(jù)的熱備,負(fù)載均衡保證服務(wù)節(jié)點(diǎn)共擔(dān)服務(wù)壓力,提升數(shù)據(jù)與服務(wù)的可靠性。下面詳細(xì)對(duì)關(guān)鍵技術(shù)實(shí)現(xiàn)進(jìn)行詳述。
采用同步技術(shù)實(shí)現(xiàn)數(shù)據(jù)的主-備分離存儲(chǔ),主庫提供數(shù)據(jù)的寫入服務(wù),備庫提供檢索服務(wù),讀寫分離策略是提升系統(tǒng)服務(wù)能力的常用手段。平臺(tái)涉及的數(shù)據(jù)庫的同步技術(shù)根據(jù)捕獲數(shù)據(jù)源發(fā)生變更方法分為ETL、觸發(fā)器和歸檔日志同步3種。ETL(extract-transform-load)同步,即將源數(shù)據(jù)抽取出來后,進(jìn)行數(shù)據(jù)字段轉(zhuǎn)換等處理操作,再插入到目標(biāo)存儲(chǔ)系統(tǒng)中的過程,該方法最為簡(jiǎn)單,但同步時(shí)效性最差。觸發(fā)器同步,在源數(shù)據(jù)表上創(chuàng)建觸發(fā)器對(duì)表格數(shù)據(jù)的變更記錄在表中,自行開發(fā)程序讀取變更記錄在目標(biāo)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)變更操作回放,達(dá)到同步目的。歸檔日志同步,數(shù)據(jù)庫在運(yùn)行過程中均會(huì)對(duì)數(shù)據(jù)的變更產(chǎn)生歸檔日志,由第三方軟件產(chǎn)品抽取日志,并對(duì)變更數(shù)據(jù)進(jìn)行可選擇處理后在目標(biāo)庫進(jìn)行數(shù)據(jù)變更操作回放,達(dá)到數(shù)據(jù)同步目的。主流的工具有(oracle goldengate,OGG),可兼容絕大多數(shù)關(guān)系型數(shù)據(jù)庫同步等。
圖5給出了平臺(tái)的數(shù)據(jù)同步業(yè)務(wù)流程。采用3種同步技術(shù)將分散、凌亂、異構(gòu)數(shù)據(jù)整合到緩沖數(shù)據(jù)庫臨時(shí)存儲(chǔ)短時(shí)數(shù)據(jù),利用OGG將數(shù)據(jù)同步到應(yīng)用數(shù)據(jù)庫中的短時(shí)數(shù)據(jù)表,隨時(shí)間推移短時(shí)數(shù)據(jù)轉(zhuǎn)變?yōu)闅v史數(shù)據(jù)被遷移到按年存儲(chǔ)的歷史表中,服務(wù)平臺(tái)根據(jù)用戶請(qǐng)求數(shù)據(jù)的時(shí)間參數(shù)決定訪問對(duì)應(yīng)數(shù)據(jù)表,從而向業(yè)務(wù)提供合適的數(shù)據(jù)和增強(qiáng)系統(tǒng)的并發(fā)承載能力。

圖5 平臺(tái)數(shù)據(jù)同步業(yè)務(wù)流程
氣象行業(yè)對(duì)于網(wǎng)格數(shù)據(jù)的較多采用GRIB、NetCDF、HDF、AWX和自定義二進(jìn)制格式進(jìn)行存儲(chǔ)。格式不同,但格點(diǎn)數(shù)據(jù)的使用方法非常類似,為此許婧[5]、劉立明[6]、肖華東[7]等利用Mars系統(tǒng)對(duì)氣象模式數(shù)據(jù)管理和業(yè)務(wù)應(yīng)用進(jìn)行研究,但從實(shí)際的使用效果來看,復(fù)雜命令集和自定義功能擴(kuò)展的局限性給氣象業(yè)務(wù)系統(tǒng)開發(fā)提出較高技術(shù)要求。
因此,根據(jù)實(shí)際業(yè)務(wù)需求(例如:裁剪、插值、升降尺度等操作)設(shè)計(jì)符合氣象業(yè)務(wù)需求的統(tǒng)一格點(diǎn)數(shù)據(jù)格式,建立集中存儲(chǔ)的格點(diǎn)數(shù)據(jù)庫和格點(diǎn)數(shù)據(jù)統(tǒng)一化處理模塊,將天氣、氣候、海洋、環(huán)境模式,大氣再分析和天氣實(shí)況等進(jìn)行規(guī)整化處理,為開發(fā)格點(diǎn)產(chǎn)品服務(wù)集提供數(shù)據(jù)基礎(chǔ)。圖6詳細(xì)描述了格點(diǎn)數(shù)據(jù)融合業(yè)務(wù)流程。

圖6 格點(diǎn)數(shù)據(jù)融合業(yè)務(wù)流程
數(shù)值模式產(chǎn)品大多為涵蓋為全球、半球、洲際或局部地區(qū),實(shí)際應(yīng)用中區(qū)域性需求非常普遍,為提高業(yè)務(wù)處理效率需要對(duì)數(shù)據(jù)進(jìn)行按需裁剪。根據(jù)文獻(xiàn)[8]中提出網(wǎng)格裁剪的內(nèi)縮和外擴(kuò)方法,根據(jù)用戶裁剪范圍的始、終點(diǎn)落在網(wǎng)格點(diǎn)的具體方位不同給出對(duì)應(yīng)的處理方法,圖7為具體處理,本文設(shè)計(jì)了內(nèi)縮和外擴(kuò)方法的具體實(shí)現(xiàn)算法。

圖7 內(nèi)縮算法效果
算法1: 內(nèi)縮和外擴(kuò)裁剪算法—左上角定位
輸入:ltP左上坐標(biāo),rbP右下坐標(biāo),xArray是X方向的升序經(jīng)度值數(shù)組,yArray是Y方向的升序緯度值數(shù)組,offsetleft為采用內(nèi)縮或外擴(kuò)標(biāo)識(shí)位。
輸出:ret取值點(diǎn)的下標(biāo)值
(1)functionfindLeftTopP(ltP.x,rbP.y,xArray,yArray,offsetleft)
(2)ret←0
(3)tmpIndex1←0,tmpIndex2←0,i←0;
(4)whilei (5)ifltP.x-xArray[i]<=0.00001then (6)tmpIndex1←tmpIndex2←i; (7)break; (8)elseifltP.x-xArray[i]>0.00001then (9)break; (10)else (11)tmpIndex1←i; (12)tmpIndex2←i+1; (13)i++; (14)endif (15)endwhile (16)ifoffsetleftthen (17)ret←tmpIndex1 (18)else (19)ret←tmpIndex2 (20)endif (21)returnret (22)endfunction 基于用戶位置的氣象服務(wù)場(chǎng)景中,需要從網(wǎng)格數(shù)據(jù)中提取當(dāng)前位置的氣象要素(天氣實(shí)況和預(yù)報(bào)),因此需要通過插值方法從相鄰網(wǎng)格中計(jì)算當(dāng)前位置的氣象要素值。本系統(tǒng)采用氣象中常用的最近距離法[9]、反距離加權(quán)[10](IDW)和雙線性插值算法(BL)。網(wǎng)格密度小于1 km*1 km 時(shí)采用NN算法較為合理,否則可采用IDW或BL插值算法。本文給出具體的任意位置氣象要素插值算法如下: 算法2: 任意點(diǎn)求值算法 輸入:lon經(jīng)度值,lat緯度值,type插值算法類型 輸出:ret氣象要素值 (1)functioninterpolate(lon,lat,type) (2)ret←UNDEFINED (3)xArray←getXPointsFromGridFile() (4)yArray←getXPointsFromGridFile() (5)ifisInThePoint(xArray,yArray,lon,lat)then (6) ret←findVal(findP(lon,xArray,lat,yArray)); (7)else (8)ltP←findVal(findLeftTopP (lon,lat)) (9)lbP←findVal(findLeftButP (lon,lat)) (10)rtP←findVal(findRighTopP (lon,lat)) (11)rbP←findVal(findRighButP (lon,lat)) (12)switch(type) (13)caseNN: (14)ret←NNInterpolate(ltP,lbP,rtP,rbP) (15)caseIDW: (16)ret←IDWInterpolate(ltP,lbP,rtP,rbP) (17)caseBL: (18) ret←BLInterpolate(ltP,lbP,rtP,rbP) (19)endswitch (20)endif (21)returnret (22)endfunction (23) (24)functionfindP(lon,xArray,lat,yArray) (25)i←0,j←0; (26)whilexArray[i++]-lon<0.00001do (27) break; (28)endwhile (29)whileyArray[i++]-lat<0.00001do (30) break; (31)endwhile (32)point.x←i,point.y←j; (33)returnpoint; (34)endfunction (35) (36)functionfindVal(point) (37)valArray←getXPointsFromGridFile() (38)xRowGridLen←xArray.len (39)yRowGridLen←yArray.len (40)index←(int)(point.x/xRowGridLen)+point.x%xRowGridLen+(int)(point.y/yRowGridLen) (41)returnvalArray[index] (42)endfunction 平臺(tái)的服務(wù)總線會(huì)根據(jù)用戶調(diào)用的數(shù)據(jù)內(nèi)容將請(qǐng)求路由到后臺(tái)服務(wù),當(dāng)后臺(tái)服務(wù)出現(xiàn)故障、性能下降或超出承載能力時(shí),則需要通知服務(wù)總線限制或暫停對(duì)該類調(diào)用提供服務(wù),避免服務(wù)總線負(fù)載大量的不可達(dá)服務(wù)而使整個(gè)平臺(tái)無法提供其它數(shù)據(jù)服務(wù)的情況。 設(shè)計(jì)鏈路狀態(tài)數(shù)據(jù)結(jié)構(gòu)S={r,s,a,mi,ma,ut}, 其中r為平臺(tái)能唯一標(biāo)識(shí)的服務(wù)鏈路,s為服務(wù)是否可達(dá)狀態(tài),a為服務(wù)平均響應(yīng)時(shí)間,mi為服務(wù)響應(yīng)最小時(shí)間,ma為服務(wù)響應(yīng)最大時(shí)間,ut為鏈路狀態(tài)的更新時(shí)間。設(shè)計(jì)鏈路健康性檢查,定時(shí)探測(cè)更新平臺(tái)中的所有服務(wù)鏈路健康狀態(tài),利用高速緩存持久化保存。服務(wù)總線收到請(qǐng)求首先檢查服務(wù)鏈路狀態(tài),然后依據(jù)表1所示熔斷規(guī)則進(jìn)行處理。 表1 服務(wù)熔斷處理策略 格點(diǎn)服務(wù)是數(shù)字網(wǎng)格預(yù)報(bào)業(yè)務(wù)的基礎(chǔ),它提供了網(wǎng)格數(shù)據(jù)的寫入、讀取和插值服務(wù),該服務(wù)的中斷或數(shù)據(jù)缺失直接影響預(yù)報(bào)業(yè)務(wù)的中斷,利用RoseMirrorHA[11]設(shè)計(jì)了服務(wù)高可用和主、備數(shù)據(jù)準(zhǔn)實(shí)時(shí)同步的架構(gòu)。圖8由2臺(tái)服務(wù)器、高可用軟件、公網(wǎng)與私網(wǎng)組成,兩臺(tái)服務(wù)器安裝相同的業(yè)務(wù)軟件,高可用軟件創(chuàng)建服務(wù)IP對(duì)外提供服務(wù),當(dāng)用戶發(fā)起讀取或?qū)懭霐?shù)據(jù)請(qǐng)求時(shí),由主服務(wù)器進(jìn)行響應(yīng),高可用軟件將發(fā)生變化的數(shù)據(jù)塊通過私網(wǎng)同步到備份服務(wù)器。當(dāng)主服務(wù)器宕機(jī)或格點(diǎn)服務(wù)掉線,備服務(wù)器會(huì)探知主服務(wù)器異常發(fā)生,則綁定服務(wù)IP并接管格點(diǎn)服務(wù),由此達(dá)到數(shù)據(jù)一致且服務(wù)高可用的效果。 圖8 格點(diǎn)服務(wù)高可用架構(gòu) 數(shù)據(jù)的存儲(chǔ)層性能和網(wǎng)絡(luò)傳輸速率是影響系統(tǒng)并發(fā)的兩個(gè)關(guān)鍵因素,系統(tǒng)利用緩存技術(shù)減少系統(tǒng)對(duì)數(shù)據(jù)存儲(chǔ)的讀寫操作,利用壓縮技術(shù)減少數(shù)據(jù)與客戶端之間數(shù)據(jù)量,從而提升平臺(tái)的響應(yīng)能力。 (1)高速緩存:服務(wù)總線根據(jù)調(diào)用請(qǐng)求中的參數(shù)值,以接口定義中的參數(shù)順序形成唯一的Key,若命中緩存,則從緩存中讀取數(shù)據(jù);否則,從存儲(chǔ)系統(tǒng)檢索數(shù)據(jù),將原始結(jié)果加工為字符型Value,存儲(chǔ)到緩存系統(tǒng)后,返回給用戶,從而緩解大量相同數(shù)據(jù)請(qǐng)求對(duì)存儲(chǔ)系統(tǒng)造成IO的沖擊,提高數(shù)據(jù)服務(wù)響應(yīng)能力和并發(fā)能力。主要實(shí)現(xiàn)算法如下: 算法3: 緩存算法 輸入:apiObj接口定義對(duì)象 輸出:retObj返回?cái)?shù)據(jù)結(jié)果對(duì)象 (1)functiongetDatasFromCache(apiObj) (2)ret←newObject{} (3)key←getKeyStr(apiObj) (4) if Redis.contains(key) (5)ret←Redis.get(key) (6) else (7)ret←getDatasFromDisk()//根據(jù)存儲(chǔ)類型具體實(shí)現(xiàn)方法有所差別 (8) Redis.put(key,ret,apiObj.expireTime) (9) end if (10) returnretObj; (11)endfunction (12)functiongetKeyStr(apiObj) (13)ret←UNDEFINED (14)list←sortParameters(apiObj.parameters) (15)whilei (16)p←list.get(i) (17)ret←‘.’+p.val (18)i++ (19)endwhile (20)returnret (21)endfunction (22)functionsortParameters(ps) (23)fori=ps.size→0do (24)forj=0→i-1do (25)ifps[j]>ps[j+1] (26)temp←ps[j] (27)ps[j]←ps[j+1] (28)ps[j+1]←temp (29)endif (30)endfor (31)endfor (32)endfunction (2)數(shù)據(jù)壓縮:平臺(tái)采用HTTP協(xié)議與客戶端進(jìn)行數(shù)據(jù)交換,對(duì)于格點(diǎn)、衛(wèi)星、圖形產(chǎn)品和文件等二進(jìn)制數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行Base64編碼后才能返回用戶,但Base64編碼會(huì)讓數(shù)據(jù)量增長(zhǎng)原有長(zhǎng)度的1/3,從而增加網(wǎng)絡(luò)的傳輸時(shí)延,特別是在大數(shù)據(jù)量情況下影響非常大。因此,平臺(tái)調(diào)用設(shè)計(jì)啟用與關(guān)閉數(shù)據(jù)壓縮的系統(tǒng)參數(shù),由調(diào)用用戶控制是否進(jìn)行壓縮傳輸。平臺(tái)默認(rèn)使用GZIP壓縮算法進(jìn)行數(shù)據(jù)傳輸,具體的編解碼過程和效率可參見文獻(xiàn)[12]。 (3)負(fù)載均衡:用戶通過網(wǎng)絡(luò)直接與Web服務(wù)器相連接,但如果服務(wù)器出現(xiàn)故障,則無法正常提供服務(wù);即使服務(wù)器正常工作,但當(dāng)很多用戶同時(shí)訪問服務(wù)器,超過服務(wù)器的承載能力,則會(huì)出現(xiàn)響應(yīng)慢甚至無法連接的情況,這兩種情況都影響系統(tǒng)可用性和并發(fā)性。將多個(gè)等功能的服務(wù)器組成集群,由負(fù)載均衡將用戶的訪問請(qǐng)求分發(fā)到不同的服務(wù)器,可提高平臺(tái)整體的承載能力,也可快速擴(kuò)展系統(tǒng)承載力,同時(shí)容忍部分服務(wù)器宕機(jī)情況發(fā)生,很好解決了上面提到的兩個(gè)問題。 針對(duì)一體化數(shù)據(jù)訪問平臺(tái)和省級(jí)綜合氣象信息共享平臺(tái)(簡(jiǎn)稱:CIMISS)[13]進(jìn)行性能對(duì)比測(cè)試,測(cè)試終端環(huán)境如下:硬件環(huán)境:CPU I5-4590 3.3 GHz;內(nèi)存8 GB;硬盤500 GB;千兆網(wǎng);軟件環(huán)境:JMeter3.1,Windows 10 64位。 表2以調(diào)取廣東某觀測(cè)時(shí)國(guó)家氣象站資料為例,分別在10、20、50、100、150、200并發(fā)下測(cè)得兩套系統(tǒng)的平均響應(yīng)時(shí)效和業(yè)務(wù)吞吐量,一體化訪問平臺(tái)的優(yōu)于CIMISS系統(tǒng),且在200并發(fā)時(shí)平均響應(yīng)314 ms響應(yīng),事務(wù)處理能力達(dá)到530 TPS,能夠滿足業(yè)務(wù)應(yīng)用需求。 表2 站點(diǎn)數(shù)據(jù)訪問性能測(cè)試 表3以調(diào)取廣東范圍格點(diǎn)預(yù)報(bào)資料為例,10-200并發(fā)時(shí),一體化訪問服務(wù)平臺(tái)訪問效率和吞吐量遠(yuǎn)遠(yuǎn)于CIMISS系統(tǒng),且在200并發(fā)時(shí)在15 ms內(nèi)響應(yīng),事務(wù)處理能力達(dá)到4787 TPS,能夠滿足全省智能網(wǎng)格預(yù)報(bào)業(yè)務(wù)的訪問需求。 表3 格點(diǎn)數(shù)據(jù)訪問性能測(cè)試 表4以調(diào)取華南區(qū)域雷達(dá)拼圖產(chǎn)品為例,在10、20并發(fā)時(shí)CIMISS的時(shí)效性和吞吐量相差不大,但在50-200并發(fā)時(shí)一體化平臺(tái)明顯優(yōu)于CIMISS平臺(tái),且在200并發(fā)時(shí)系統(tǒng)能在41 ms內(nèi)響應(yīng),事務(wù)處理能力達(dá)到2017 TPS,能夠滿足全省圖形產(chǎn)品訪問的業(yè)務(wù)支撐。 表4 圖形產(chǎn)品訪問性能測(cè)試 綜合以上的響應(yīng)性能和并發(fā)能力對(duì)比測(cè)試,一體化數(shù)據(jù)訪問平臺(tái)的設(shè)計(jì)改善了數(shù)據(jù)訪問的時(shí)效和系統(tǒng)的吞吐量,且在200并發(fā)時(shí)能在秒級(jí)以內(nèi)響應(yīng)用戶請(qǐng)求,平臺(tái)的事務(wù)處理能力最少530 TPS,最大達(dá)到4787 TPS,完全滿足每日全省的氣象業(yè)務(wù)應(yīng)用訪問需求,達(dá)到預(yù)期的設(shè)計(jì)目的。 系統(tǒng)自應(yīng)用以來,用戶訪問量逐年增長(zhǎng),2019年相比2014年度數(shù)據(jù)下載量增長(zhǎng)100倍,訪問量增長(zhǎng)近50倍,如圖9所示。目前,系統(tǒng)單日數(shù)據(jù)訪問下載量達(dá)3.2 TB,單日訪問次數(shù)達(dá)3000萬次,成功支撐了廣東省精細(xì)化格點(diǎn)預(yù)報(bào)訂正平臺(tái)[8]、廣東省SWIFT系統(tǒng)平臺(tái)[8]、珠海城市生態(tài)氣象綜合系統(tǒng)[14]、繽紛微天氣公眾服務(wù)平臺(tái)等核心業(yè)務(wù)。 圖9 平臺(tái)逐年訪問量統(tǒng)計(jì) 本文分析了氣象領(lǐng)域的數(shù)據(jù)感知現(xiàn)狀和數(shù)據(jù)治理與應(yīng)用中存在的問題,形成的一體化數(shù)據(jù)訪問服務(wù)平臺(tái)為氣象數(shù)據(jù)的治理和分析應(yīng)用提供了統(tǒng)一環(huán)境,搭建了數(shù)據(jù)管理者與使用者之間的關(guān)鍵通道。該平臺(tái)對(duì)氣象行業(yè)和技術(shù)有以下貢獻(xiàn):①綜合利用多態(tài)數(shù)據(jù)存儲(chǔ)管理技術(shù)和數(shù)據(jù)同步技術(shù)將地球多圈層科研數(shù)據(jù)按照存儲(chǔ)格式分類規(guī)整處理,形成了一體化的綜合型氣象數(shù)據(jù)倉庫。②采用同步技術(shù)和分布式服務(wù)技術(shù)從邏輯上屏蔽了數(shù)據(jù)源的異構(gòu)性,借用服務(wù)總線設(shè)計(jì)思路形成標(biāo)準(zhǔn)化的數(shù)據(jù)、算法等服務(wù)集,為氣象業(yè)務(wù)形成一體化的數(shù)據(jù)調(diào)用環(huán)境。③提供的數(shù)據(jù)可視化與算法服務(wù),滿足了氣象業(yè)務(wù)中多數(shù)產(chǎn)品制作需求,推動(dòng)了數(shù)據(jù)服務(wù)向應(yīng)用服務(wù)的觀念轉(zhuǎn)型。④在全國(guó)氣象行業(yè)率先以RESTful API的方式向業(yè)務(wù)單位發(fā)布數(shù)據(jù),為全國(guó)氣象綜合業(yè)務(wù)系統(tǒng)的建設(shè)提供先進(jìn)經(jīng)驗(yàn)。 隨著氣象業(yè)務(wù)應(yīng)用復(fù)雜度增加,其對(duì)數(shù)據(jù)的種類和數(shù)量也在增加,可視化服務(wù)的個(gè)性化需求更加突出,平臺(tái)面臨數(shù)據(jù)、算法和服務(wù)能力的多重挑戰(zhàn)。后期研究中除兼容更多先進(jìn)存儲(chǔ)技術(shù)外,針對(duì)用戶個(gè)性化需求研究算法服務(wù)眾創(chuàng)功能,結(jié)合微服務(wù)和容器技術(shù)降低平臺(tái)的耦合度,增強(qiáng)平臺(tái)的橫向擴(kuò)展能力和服務(wù)處理能力。3.4 插值算法
3.5 熔斷設(shè)計(jì)

3.6 格點(diǎn)服務(wù)高可用設(shè)計(jì)

3.7 高并發(fā)策略
4 性能分析與業(yè)務(wù)應(yīng)用
4.1 性能分析



4.2 業(yè)務(wù)應(yīng)用

5 結(jié)束語