徐碧裕 葉朗明* 徐加民 于東海 胡麗華
(1 廣東省江門市氣象局,江門 529000; 2 廣東省江門市新會區(qū)氣象局,新會 529100)
*通信作者,Email:ye_langming@126.com
專業(yè)氣象服務(wù)是在社會相關(guān)行業(yè)對氣象服務(wù)具有特殊需求的前提下產(chǎn)生的,是氣象服務(wù)組織為經(jīng)濟(jì)社會各行各業(yè)和用戶提供的滿足特定需求的專業(yè)化、精細(xì)化、個性化氣象服務(wù)[1]。專業(yè)氣象服務(wù)集約化發(fā)展是以先進(jìn)的“互聯(lián)網(wǎng)+”技術(shù)為依托,通過構(gòu)建“云+網(wǎng)+端”平臺,有效實(shí)現(xiàn)了專業(yè)氣象服務(wù)的全面互聯(lián)互通[2]。傳統(tǒng)氣象信息接收渠道如手機(jī)短信、傳真、報紙、電視、Email等,已然不能夠滿足專業(yè)氣象用戶對于便利性的需求[3]。微信作為目前最為流行最受歡迎的免費(fèi)即時通訊工具,其用戶群正在日漸激增,功能也越來越強(qiáng)大。因為它擁有傳統(tǒng)電話、短信等手段無法比擬的特點(diǎn),可以精準(zhǔn)、快速、主動地傳播消息,方便有效的互動特性受到了無數(shù)用戶和團(tuán)體、機(jī)構(gòu)的關(guān)注與青睞[4]。因此,近年來越來越多學(xué)者開始研究將氣象信息發(fā)布融合到當(dāng)下熱門社交軟件微信App提供的公眾號或企業(yè)號平臺中,這就涉及到氣象信息跨平臺發(fā)布問題。對于微信平臺氣象信息推送系統(tǒng),許多學(xué)者已有研究[5-9],但前人研究的推送系統(tǒng)終端一般為微信服務(wù)號,對象是公眾,具有普適性;每個行業(yè)氣象用戶具體需求不同,借助微信企業(yè)號應(yīng)用,搭建滿足專業(yè)氣象定制化需求的系統(tǒng)更加有意義。本文以“江門市氣象公共服務(wù)中心”企業(yè)號為例,以不同行業(yè)氣象用戶為對象,搭建了跨平臺發(fā)布系統(tǒng),實(shí)現(xiàn)了專業(yè)氣象信息移動端自動提醒。
每個行業(yè)專業(yè)氣象用戶所關(guān)注的氣象要素都不相同,航運(yùn)及公路交通行業(yè)關(guān)注能見度、風(fēng)力、降雨等;能源電力行業(yè)關(guān)注氣溫、濕度、降雨等。許多用戶工作地點(diǎn)在戶外,搭建能實(shí)現(xiàn)差異化、個性化服務(wù)的跨平臺發(fā)布系統(tǒng),實(shí)現(xiàn)氣象信息的可移動性、便捷獲取性成為開展專業(yè)氣象服務(wù)的現(xiàn)實(shí)需求。
微信企業(yè)號信息發(fā)送條數(shù)不受限制,不產(chǎn)生費(fèi)用,最高每分鐘可群發(fā)200次消息,支持保密消息,防止成員轉(zhuǎn)發(fā),支持高級接口權(quán)限,可根據(jù)需要為每個行業(yè)氣象用戶群組定制獨(dú)立應(yīng)用,能實(shí)現(xiàn)專業(yè)化、精細(xì)化、個性化的功能和菜單[10-11]。新浪云應(yīng)用SAE在平臺搭建時免架構(gòu)設(shè)計、免運(yùn)維,能從容應(yīng)對流量爆發(fā)式增長。上述2個平臺優(yōu)點(diǎn)適應(yīng)了專業(yè)氣象服務(wù)特性,可以提高信息發(fā)布效率,減少專業(yè)氣象服務(wù)硬件投入和人力資源成本,使系統(tǒng)安全性和穩(wěn)定性得到保障。
專業(yè)氣象跨平臺發(fā)布系統(tǒng)總體框架包括硬件支撐層、數(shù)據(jù)層、服務(wù)層和業(yè)務(wù)應(yīng)用層4部分(圖1)。
(1)硬件支撐層。為平臺提供安全、穩(wěn)定運(yùn)行環(huán)境,提供SAE云空間,并按實(shí)際需要進(jìn)行動態(tài)分配;借助邊界隔離內(nèi)部和外部網(wǎng)絡(luò),阻擋外部網(wǎng)絡(luò)入侵。
(2)數(shù)據(jù)層。主要包含用戶數(shù)據(jù)、管理數(shù)據(jù)、氣象數(shù)據(jù)。氣象數(shù)據(jù)是基于Spring框架、讀寫分離的Oracle 10g數(shù)據(jù)庫,主要包含氣象站點(diǎn)數(shù)據(jù)、圖形產(chǎn)品和NetCDF格式的格點(diǎn)數(shù)據(jù);氣象臨時數(shù)據(jù)則存放于KVDB高速緩存和Storage分布式存儲中。
(3)服務(wù)層。服務(wù)端開發(fā)采用ThinkPHP5開發(fā)框架,它使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu)和MVC(模型-視圖-控制器)模式,封裝了CURD和一些常用操作,在緩存機(jī)制、分布式數(shù)據(jù)庫、多數(shù)據(jù)庫連接和切換、認(rèn)證機(jī)制及擴(kuò)展性方面均有獨(dú)特的表現(xiàn)。該框架結(jié)合微信企業(yè)號API接口和企業(yè)號JS-SDK接口,實(shí)現(xiàn)對氣象數(shù)據(jù)的動態(tài)監(jiān)控;新浪云SAE提供閾值判定和消息推送服務(wù);IDEA(Integrated Database for Easy Access,廣東省氣象探測數(shù)據(jù)中心提供的歷史一體化數(shù)據(jù)訪問平臺)提供氣象基礎(chǔ)數(shù)據(jù)服務(wù)。
(4)業(yè)務(wù)應(yīng)用層。微信企業(yè)號內(nèi)含多個行業(yè)應(yīng)用,如“江門供電”、“廣中江高速”、“川島航線”等,每個應(yīng)用中均有“氣象要素閾值推送”、“氣象預(yù)警信號推送”、“氣象常規(guī)產(chǎn)品推送”、“基于WebGIS的氣象要素實(shí)況查詢”4大功能模塊;后臺管理系統(tǒng)則集成于新浪云服務(wù)器中,提供用戶管理、權(quán)限管理、運(yùn)維監(jiān)控、定時任務(wù)、日志分析、代碼管理等6大功能。
圖1 跨平臺發(fā)布系統(tǒng)的總體架構(gòu)
跨平臺發(fā)布系統(tǒng)中,為了統(tǒng)一管理企業(yè)號的多個行業(yè)應(yīng)用,實(shí)現(xiàn)微信消息轉(zhuǎn)發(fā)、自定義菜單、獲取成員狀態(tài)等功能,開發(fā)者通過對接SAE和企業(yè)號應(yīng)用API接口,開啟應(yīng)用回調(diào)模式?;卣{(diào)模式時,企業(yè)號應(yīng)用URL、Token、EncodingAESKey是必須的3個參數(shù):URL是企業(yè)號應(yīng)用接收企業(yè)號推送請求的訪問地址,支持HTTP或HTTPS協(xié)議;Token由企業(yè)任意填寫,用于生成簽名;EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。
當(dāng)提交以上信息時,企業(yè)號應(yīng)用將發(fā)送GET請求到填寫的URL上,GET請求攜帶4個參數(shù)msg_signature(微信加密簽名)、timestamp(時間戳)、nonce(隨機(jī)數(shù))、echostr(隨機(jī)字符串),企業(yè)號應(yīng)用在獲取時做urldecode解碼處理,否則驗證不成功。企業(yè)號通過參數(shù)msg_signature對請求進(jìn)行校驗,如果確認(rèn)此次GET請求來自企業(yè)號,那么它會對echostr參數(shù)解密并原樣返回echostr明文,此時接入驗證生效,回調(diào)模式開啟[12-13]。
微信企業(yè)號應(yīng)用發(fā)送消息時,需要調(diào)用消息群發(fā)高級接口,為了確保接口通信安全性,微信企業(yè)號要求訪問高級接口要先獲取接口訪問憑證(即access_token)進(jìn)行權(quán)限驗證。還規(guī)定了access_token有效期為7200 s,重復(fù)獲取將導(dǎo)致上次獲取的失效,同時access_token API每天的訪問次數(shù)被限制為2000次。如果每次調(diào)用高級接口都去請求access_token API獲取access_token,在調(diào)用頻繁的情況下將很快達(dá)到access_token API每天訪問限制,導(dǎo)致后續(xù)訪問全部被微信服務(wù)器拒絕,消息無法成功發(fā)送[14]。因此,需要定期在程序中保存獲取到的多個應(yīng)用access_token值,以便調(diào)用消息群發(fā)高級接口。
KVDB是新浪云開發(fā)的分布式key-value數(shù)據(jù)存儲服務(wù),用來支持公有云計算平臺上的海量key-value存儲[15]。KVDB支持的存儲容量很大,支持億萬級數(shù)據(jù)容量,遠(yuǎn)遠(yuǎn)滿足跨平臺發(fā)布系統(tǒng)的數(shù)據(jù)緩存需求。KVDB采用無狀態(tài)對等的分布式架構(gòu),在任一節(jié)點(diǎn)發(fā)生故障時,仍然保持正常運(yùn)行。KVDB提供穩(wěn)定可靠的NoSQL鍵值數(shù)據(jù)庫服務(wù),數(shù)據(jù)保持3份冗余,支持前綴檢索,讀寫均能達(dá)到10萬QPS(Query Per Second,即每秒查詢率)。
借助新浪云KVDB緩存以及定時任務(wù),系統(tǒng)實(shí)現(xiàn)了對企業(yè)號下所有應(yīng)用不同access_token值的自動更新、存儲以及快速讀取,提高了接口訪問憑證的穩(wěn)定性和調(diào)用效率,進(jìn)一步提高了閾值消息發(fā)送效率。
新浪云SAE中提供2種定時任務(wù)方式:①是每隔一定時間執(zhí)行;②是在某個特定時間點(diǎn)執(zhí)行。定時任務(wù)服務(wù)可以用來定期觸發(fā)應(yīng)用執(zhí)行一些后臺任務(wù),定期獲取access_token值、定期輪詢閾值條件、定期推送消息等。定時任務(wù)的執(zhí)行以 HTTP 方式觸發(fā),觸發(fā)后真正執(zhí)行的是應(yīng)用中定義的 HTTP 回調(diào)函數(shù)。定時任務(wù)采用分布式架構(gòu),支持N/2節(jié)點(diǎn)冗余;任務(wù)執(zhí)行的方式是 HTTP 調(diào)用(GET 方法),它具備以下優(yōu)點(diǎn):支持超長的任務(wù)執(zhí)行時間,最長為1800 s;任務(wù)執(zhí)行精準(zhǔn)度高,誤差小于10 s;普通應(yīng)用最大可以并發(fā)執(zhí)行12個定時任務(wù)。
在執(zhí)行消息推送時,如果群發(fā)用戶很多,使用輪詢一對一發(fā)送的方式將出現(xiàn)極大的延遲,跨平臺發(fā)布系統(tǒng)采用任務(wù)隊列的消息異步執(zhí)行方式。SAE任務(wù)隊列是一種分布式隊列服務(wù),提供異步離線隊列服務(wù);提供針對HTTP方式的異步任務(wù)執(zhí)行,如給500個用戶同時發(fā)送預(yù)警消息,頁面容易超時,而異步離線隊列,能實(shí)現(xiàn)任務(wù)非阻塞執(zhí)行,也支持失敗回調(diào)。
跨平臺發(fā)布系統(tǒng)的核心代碼主要搭載在新浪云應(yīng)用SAE的SVN代碼倉中(SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統(tǒng)),通過新浪云服務(wù)器的定時任務(wù)功能,定期執(zhí)行SVN倉代碼,來獲取和處理存放在Storage存儲空間的氣象數(shù)據(jù),當(dāng)檢測到變量達(dá)到設(shè)定的閾值時,在KVDB緩存中進(jìn)行變量新、舊值替換,并將新的變量存入KVDB中(避免重復(fù)推送,下一時刻再進(jìn)行閾值判定),最后執(zhí)行消息推送代碼(圖2)。
圖2 跨平臺發(fā)布系統(tǒng)的關(guān)鍵流程
在系統(tǒng)關(guān)鍵流程中,如果設(shè)定的閾值條件是任意氣象要素值,則可以實(shí)現(xiàn)任意氣象要素的超閾值推送;如果將預(yù)警信號發(fā)布時間作為閾值條件,并加上預(yù)警信號類型以及升、降級條件判斷,則可以實(shí)現(xiàn)預(yù)警信號更新時的消息推送;如果將文件時間作為閾值條件,則可以實(shí)現(xiàn)文件更新時消息提醒功能。
以上3種不同閾值條件的消息推送,實(shí)現(xiàn)了氣象信息發(fā)布平臺與微信企業(yè)號專業(yè)氣象服務(wù)產(chǎn)品“無縫”對接,均由跨平臺發(fā)布系統(tǒng)完成。
氣象實(shí)況模塊可以查詢當(dāng)前氣象站點(diǎn)的多個氣象要素:氣溫、降水、小時極大風(fēng)等;跨平臺發(fā)布系統(tǒng)使氣象數(shù)據(jù)在多個平臺間流轉(zhuǎn),可以根據(jù)用戶需求設(shè)定閾值,實(shí)現(xiàn)氣象要素超閾值自動推送提醒,實(shí)現(xiàn)微信企業(yè)號應(yīng)用定制化服務(wù)。如“川島航線”專業(yè)用戶在出現(xiàn)陣風(fēng)8級時將停航,設(shè)定陣風(fēng)超7級時,企業(yè)號應(yīng)用推送提醒消息。在文獻(xiàn)[16]中,已詳細(xì)闡述極大風(fēng)超閾值推送原理在“川島航線”氣象專業(yè)服務(wù)中的應(yīng)用。借助實(shí)況風(fēng)力閾值推送,企業(yè)適時安排停、售票業(yè)務(wù),生產(chǎn)經(jīng)營得以順利開展。在大風(fēng)天氣過程時,持續(xù)、加密的閾值推送也為企業(yè)爭取了更多通航時間,創(chuàng)造了更多經(jīng)濟(jì)效益。
氣象預(yù)警模塊主要針對跨越不同市縣的專業(yè)氣象用戶。因氣象預(yù)警是屬地發(fā)布原則,為滿足用戶需求,跨平臺發(fā)布系統(tǒng)實(shí)現(xiàn)了微信企業(yè)號中多個應(yīng)用、不同屬地氣象預(yù)警信號同步發(fā)布。如“廣中江高速”關(guān)注江門蓬江、江海和鶴山的預(yù)警信息(圖3);“江門供電”關(guān)注全市各區(qū)縣預(yù)警,在氣象信息發(fā)布平臺更新預(yù)警時,微信企業(yè)號同步更新,多個應(yīng)用預(yù)警更新時差小,達(dá)到了“一次發(fā)布,多頭同步”的效果。截至2020年6月,“江門供電”已有411人加入微信企業(yè)號,用戶根據(jù)系統(tǒng)推送的氣象預(yù)警,適時啟動內(nèi)部應(yīng)急響應(yīng),安排電力檢修、巡查工作。在2018年一次回訪中,用戶反饋在跨平臺發(fā)布系統(tǒng)查詢天氣實(shí)況很方便,戶外作業(yè)也能第一時間接收各地預(yù)警推送消息,對帶電作業(yè)幫助很大。
跨平臺發(fā)布系統(tǒng)檢測文件時間,當(dāng)文件時間出現(xiàn)變化,推送更新消息。如《廣中江高速氣象專報》以PDF格式發(fā)布,在氣象信息發(fā)布平臺發(fā)布后,系統(tǒng)同步在微信企業(yè)號中實(shí)現(xiàn)自動推送(圖4)。據(jù)用戶反饋,微信企業(yè)號推送的《氣象專報》類產(chǎn)品,較傳統(tǒng)的傳真、郵件方式更加及時,也方便接收。
圖3 微信企業(yè)號中“廣中江高速”應(yīng)用的沿線預(yù)警信號消息推送: (a)預(yù)警信號升級消息,(b)預(yù)警信號降級消息,(c)預(yù)警發(fā)布及解除消息
圖4 微信企業(yè)號應(yīng)用《專報》更新推送及大風(fēng)超閾值推送: (a)《專報》更新推送消息,(b)PDF格式的專報內(nèi)容,(c)川島航線大風(fēng)超閾值推送
WebGIS是Web(World Wide Web)技術(shù)應(yīng)用于GIS(Geographic Information System)開發(fā)的產(chǎn)物[17-18]。跨平臺發(fā)布系統(tǒng)借助WebGIS技術(shù)及百度地圖API開放接口,運(yùn)用HTML5+CSS+JavaScript技術(shù)實(shí)現(xiàn)Web版地理信息與氣象實(shí)況相疊加,實(shí)現(xiàn)高速沿線氣象實(shí)況顯示。如在“中開高速”氣象服務(wù)中,可從百度地圖API接口標(biāo)記出項目途經(jīng)點(diǎn);點(diǎn)擊列表中的站點(diǎn)名稱,能跳轉(zhuǎn)并直接在地圖上顯示該站點(diǎn)位置以及當(dāng)前氣象站實(shí)況信息(圖5)??缙脚_發(fā)布系統(tǒng)完成了高速公路沿線氣象站實(shí)況數(shù)據(jù)的逐5 min自動更新,2019年某次局地降雨過程,另一“開春高速”6標(biāo)段用戶根據(jù)項目沿線點(diǎn)天氣情況,適時調(diào)整混凝土澆筑計劃,避免了損失;據(jù)該用戶事后評估反饋,至少節(jié)約了6車混凝土,同時避免了雨天在山間行駛的風(fēng)險。
圖5 基于WebGIS的中開高速線路途經(jīng)點(diǎn)及沿線氣象站分布: (a)高速沿線附近區(qū)域站列表,(b)中開高速線路途經(jīng)點(diǎn)標(biāo)記,(c)沿線氣象站實(shí)況要素顯示
本文借助新浪云服務(wù)器SAE、微信企業(yè)號優(yōu)勢,搭建了專業(yè)氣象跨平臺發(fā)布系統(tǒng),給出了系統(tǒng)架構(gòu)、發(fā)布流程和關(guān)鍵技術(shù)。系統(tǒng)減少了氣象信息發(fā)布成本,解決了專業(yè)氣象信息跨平臺同步發(fā)布問題,實(shí)現(xiàn)了移動端氣象信息的自動提醒。
專業(yè)氣象跨平臺發(fā)布系統(tǒng)已在“江門市氣象公共服務(wù)中心”企業(yè)號中應(yīng)用,給“川島航線”、“江門供電”、“廣中江高速”等專業(yè)用戶帶來極大便利,并創(chuàng)造了一定的經(jīng)濟(jì)效益。這將為全國各地“互聯(lián)網(wǎng)+氣象”專業(yè)氣象跨平臺發(fā)布提供一個良好的建設(shè)思路。