董良淼 李宇中 覃月鳳 李瑩 藍(lán)盈
(1 廣西壯族自治區(qū)氣象臺(tái),南寧 530022;2 廣西壯族自治區(qū)氣象局,南寧530022;3 廣西壯族自治區(qū)氣象信息中心,南寧530022)
氣象大數(shù)據(jù)云平臺(tái)“天擎”(CMADaaS)是全國氣象綜合信息共享系統(tǒng)(CIMISS)的功能升級(jí)和服務(wù)擴(kuò)充版本?!疤烨妗逼脚_(tái)不僅全面繼承了CIMISS規(guī)范、數(shù)據(jù)種類和接口服務(wù)標(biāo)準(zhǔn),還在數(shù)據(jù)質(zhì)量、資料存儲(chǔ)時(shí)間序列、數(shù)據(jù)處理時(shí)效等方面有顯著提升。作為當(dāng)前業(yè)務(wù)流程整體最優(yōu)、數(shù)據(jù)服務(wù)統(tǒng)一高效的全國氣象部門信息化系統(tǒng)的核心[1-2],自2020年12月業(yè)務(wù)試運(yùn)行以來,“天擎”所展現(xiàn)出的“云+端”集約化、標(biāo)準(zhǔn)化、開放性的業(yè)務(wù)模態(tài)得到了氣象預(yù)報(bào)服務(wù)人員的特別關(guān)注;如何將現(xiàn)有氣象業(yè)務(wù)系統(tǒng)升級(jí)改造以便有效利用“天擎”平臺(tái)優(yōu)勢,進(jìn)而融入新一代氣象大數(shù)據(jù)云平臺(tái),充分發(fā)揮“數(shù)算一體、統(tǒng)一高效”的應(yīng)用服務(wù)能力,已成為各級(jí)氣象業(yè)務(wù)應(yīng)用研發(fā)單位努力的重點(diǎn)方向。
預(yù)報(bào)服務(wù)系統(tǒng)應(yīng)用“天擎”服務(wù)的關(guān)鍵在于使用“接口”與大數(shù)據(jù)云平臺(tái)交互[3-7]。按照融入標(biāo)準(zhǔn),應(yīng)用系統(tǒng)中所有涉及與用戶交互的功能都由“端”來實(shí)現(xiàn)[1-2]:前端應(yīng)用(如產(chǎn)品交互制作、業(yè)務(wù)交互操作等)接收用戶交互指令,向“云”發(fā)出請(qǐng)求、并由后者完成相應(yīng)動(dòng)作(如任務(wù)調(diào)度、產(chǎn)品生成、數(shù)據(jù)存儲(chǔ)等);獲取“云”返回的處理結(jié)果后,“端”將進(jìn)一步對(duì)輸出數(shù)據(jù)進(jìn)行加工處理,以提供或呈現(xiàn)用戶所需的服務(wù)產(chǎn)品(文件、表格或圖形圖像等)。因此,對(duì)于大多數(shù)預(yù)報(bào)服務(wù)應(yīng)用研發(fā)人員而言,“天擎”服務(wù)接口的掌握程度和應(yīng)用能力就決定了系統(tǒng)模塊改造融入云平臺(tái)的效率水平。
本文以氣象行業(yè)數(shù)據(jù)分析和應(yīng)用研發(fā)中廣泛使用的Python(3.x版本)語言[8-10]環(huán)境為例,探討“天擎”大數(shù)據(jù)云平臺(tái)服務(wù)環(huán)境下適用于預(yù)報(bào)服務(wù)客戶端系統(tǒng)開發(fā)的服務(wù)接口應(yīng)用技巧,作為官方推薦方法和客戶端開發(fā)工具(SDK)的有益補(bǔ)充,供云平臺(tái)遷移融入研發(fā)人員參考。
服務(wù)接口(Service Interface)是系統(tǒng)間數(shù)據(jù)交換的邊界。采用接口機(jī)制能夠?qū)崿F(xiàn)系統(tǒng)核心服務(wù)端與應(yīng)用端的業(yè)務(wù)邏輯隔離、降低模塊間相互依賴、減少構(gòu)件耦合度、提高單元內(nèi)聚性,從而有效提高系統(tǒng)整體靈活性、可維護(hù)性和可擴(kuò)展性。服務(wù)接口是一種中間件,可封裝各種網(wǎng)絡(luò)通信協(xié)議、確保功能可跨平臺(tái)使用。服務(wù)接口同時(shí)也是安全屏障,通過容納驗(yàn)證、授權(quán)模塊可充當(dāng)系統(tǒng)的信任邊界、滿足特定使用者的不同安全需求。服務(wù)接口還可實(shí)現(xiàn)緩存、有效縮短響應(yīng)時(shí)間并減少I/O帶寬消耗;在一組負(fù)載均衡處理節(jié)點(diǎn)上部署多個(gè)服務(wù)接口實(shí)例,可滿足系統(tǒng)高可用性和故障容錯(cuò)要求??梢哉f,基于接口中間件的數(shù)據(jù)存取訪問功能“接口化”,是現(xiàn)代信息支撐平臺(tái)提供多用戶、高并發(fā)、高安全可靠性應(yīng)用服務(wù)的最主要方式[11-16]。
“天擎”服務(wù)接口在沿用(兼容)氣象數(shù)據(jù)統(tǒng)一服務(wù)接口(MUSIC)的CIMISS標(biāo)準(zhǔn)基礎(chǔ)上進(jìn)行了功能擴(kuò)展和安全性擴(kuò)充,減輕了應(yīng)用服務(wù)升級(jí)改造和遷移融入的程序代碼修改調(diào)整幅度。相比較CIMISS接口,“天擎”服務(wù)具有以下幾個(gè)方面突出特點(diǎn):①增加了安全認(rèn)證模塊,“天擎”接口采用了基于查詢參數(shù)+時(shí)間戳的數(shù)字簽名加密(AK/SK)認(rèn)證方式,顯著提高了數(shù)據(jù)服務(wù)的安全性,可有效防止非法用戶偽造查詢請(qǐng)求、篡改檢索參數(shù)甚至嘗試網(wǎng)絡(luò)滲透攻擊等問題。與CIMISS查詢相比,其直觀差別體現(xiàn)在接口檢索URL中出現(xiàn)了時(shí)間戳(time-stamp)、本機(jī)隨機(jī)數(shù)(nonce)和數(shù)字簽名(MD5 sign)這3個(gè)參數(shù)。②采用負(fù)載均衡集群和分布式緩存技術(shù),服務(wù)性能顯著提升。作為直接支撐“云+端”數(shù)算一體化應(yīng)用的新一代平臺(tái),“天擎”每一個(gè)重要功能模塊都依托高性能+高可用性的Linux集群系統(tǒng)來實(shí)現(xiàn),采用了分布式內(nèi)存緩存數(shù)據(jù)庫(Redis)、高性能流式處理并行框架(Storm/Spark)、高吞吐量消息系統(tǒng)(Kafka/RabbitMQ)等能夠有效降低數(shù)據(jù)傳輸處理時(shí)延、顯著提升數(shù)據(jù)服務(wù)性能的成熟集群服務(wù)技術(shù)。測試表明,在高并發(fā)場景下“天擎”訪問時(shí)效明顯高于CIMISS,部分服務(wù)性能優(yōu)于CIMISS平臺(tái)10倍以上[1-2]。③提供更豐富的數(shù)據(jù)序列化輸出格式,“天擎”接口提供多種可選數(shù)據(jù)返回格式。其中,“內(nèi)存對(duì)象”和“數(shù)據(jù)文件”這兩種返回格式只在客戶端開發(fā)包中提供,適用于大數(shù)據(jù)量獲取計(jì)算;而“序列化字符串”適用于數(shù)據(jù)快速解析和前端顯示應(yīng)用,是預(yù)報(bào)服務(wù)應(yīng)用最常用到的接口數(shù)據(jù)格式。與早期CIMISS接口相比,“天擎”可返回序列化字符串除XML/HTML/TEXT類型外還新增了JSON/JSONP這兩種新的數(shù)據(jù)格式。④強(qiáng)化系統(tǒng)接口服務(wù)資源占用管控,為保障實(shí)時(shí)業(yè)務(wù)優(yōu)先執(zhí)行,“天擎”平臺(tái)強(qiáng)化了對(duì)系統(tǒng)資源的占用管控,除優(yōu)化任務(wù)調(diào)度和均衡負(fù)載外,還會(huì)監(jiān)視分析算法模塊和客戶端對(duì)系統(tǒng)資源的占用情況,對(duì)超用、濫用資源現(xiàn)象進(jìn)行限制。針對(duì)用戶的接口調(diào)用請(qǐng)求,管理模塊設(shè)置了MUSIC接口訪問頻次限制:個(gè)人/科研用戶的限額大約是400~500次/min、2000~2500次/h左右。一旦超出調(diào)用上限,系統(tǒng)將拒絕執(zhí)行查詢操作并返回超限額錯(cuò)誤信息,以確保系統(tǒng)資源合理分配。⑤服務(wù)接口數(shù)量種類進(jìn)一步豐富,目前已配置可用的系統(tǒng)內(nèi)置訪問接口有300余個(gè)、供接口選擇的檢索條件參數(shù)近120個(gè),接口使用場景已涵蓋絕大多數(shù)預(yù)報(bào)服務(wù)應(yīng)用需求。
在系統(tǒng)服務(wù)得到全面強(qiáng)化升級(jí)的同時(shí),“天擎”接口在本地應(yīng)用過程中也存在一些潛在問題:①服務(wù)接口安全認(rèn)證機(jī)制使得用戶應(yīng)用技術(shù)門檻有相當(dāng)程度的提升、非計(jì)算機(jī)專業(yè)出身的預(yù)報(bào)服務(wù)人員在開發(fā)接口調(diào)用程序時(shí)普遍遇到困難;其次,服務(wù)調(diào)用會(huì)出現(xiàn)一些原CIMISS環(huán)境下不常出現(xiàn)的查詢失敗等問題;②新的接口調(diào)用限額機(jī)制對(duì)需要對(duì)代碼進(jìn)行頻繁修改調(diào)試的開發(fā)過程不利,容易觸碰上限、從而影響到“天擎”平臺(tái)的研發(fā)應(yīng)用體驗(yàn);③豐富的數(shù)據(jù)接口和查詢輸出參數(shù)在某種程度上也造成了選擇困難,難以把握哪種接口方式才是特定應(yīng)用最便捷高效的選擇。
豐富的服務(wù)接口為“天擎”數(shù)據(jù)服務(wù)應(yīng)用開發(fā)提供了多樣化的可能。以下結(jié)合廣西省級(jí)平臺(tái)系統(tǒng)業(yè)務(wù)試運(yùn)行近一年來的測試運(yùn)維和應(yīng)用遷移研發(fā)經(jīng)驗(yàn),從氣象預(yù)報(bào)服務(wù)人員的技術(shù)視角給出幾個(gè)客戶端應(yīng)用開發(fā)暨服務(wù)接口調(diào)用技巧。
官方提供的簽名認(rèn)證調(diào)用基于一系列SDK開發(fā)包,在編寫調(diào)用代碼時(shí)須首先引入(import)cma.music.DataQueryClient類、生成client客戶端對(duì)象并根據(jù)需要初始化各種客戶端參數(shù),然后再使用該對(duì)象的特定方法、指明方法需調(diào)用的接口名稱(interfaceId),最后執(zhí)行方法獲取返回結(jié)果數(shù)據(jù)。習(xí)慣過程式開發(fā)的非計(jì)算機(jī)軟件專業(yè)氣象預(yù)報(bào)服務(wù)人員對(duì)上述“面向?qū)ο蟆钡某绦蛟O(shè)計(jì)理念和代碼執(zhí)行過程難免有些困惑,無形中拔高了“天擎”服務(wù)接口使用難度。為解決上述難題,可采用基于Python 3函數(shù)的接口調(diào)用方案。
(1)構(gòu)造兩個(gè)函數(shù)。分別用于生成加密數(shù)字簽名(getSign)和組裝加密檢索URL(createApiUrl)。其中,前者是將官方開發(fā)包DataQueryClient模塊類方法getSign(self,signParams)簡化成普通函數(shù)(去除self參數(shù),用in操作符替代has_key()函數(shù)、并對(duì)signParams.keys()函數(shù)返回值做強(qiáng)制類型轉(zhuǎn)換,以適應(yīng)Python 3編碼環(huán)境);后者則是對(duì)官方包中的getConcateUrl類方法進(jìn)行函數(shù)式改造,用來根據(jù)“天擎”接口查詢參數(shù)生成客戶端(瀏覽器)完整查詢url鏈接,完整代碼如下:
def createApiUrl(params,baseUrl,pwd):
paramsUrl = baseUrl
for key in params:
paramsUrl += "%s=%s&" %(key,params[key])
timestamp = str(int(round(time.time()* 1000))) #生成查詢時(shí)刻的時(shí)間戳
nonce = str(uuid.uuid1()) #生成本次查詢對(duì)應(yīng)的本機(jī)隨機(jī)數(shù)
params['timestamp']= timestamp
params['nonce']= nonce
params['pwd']= pwd #用戶密碼只出現(xiàn)在加密計(jì)算中,不能出現(xiàn)在查詢url中
sign = getSign(params) #調(diào)用數(shù)字簽名函數(shù),生成查詢對(duì)應(yīng)的AK/SK加密認(rèn)證數(shù)字
paramsUrl += "timestamp=%s&nonce=%s&sign=%s" %(timestamp,nonce,sign)
#---將接口基本查詢信息(baseUrl)拼接上時(shí)間戳timestamp、隨機(jī)數(shù)nonce、加密認(rèn)證簽名sign后即成為完整查詢鏈接---
return paramsUrl
上述函數(shù)需提前引入uuid和hashlib這兩個(gè)Python 3標(biāo)準(zhǔn)內(nèi)置模塊。
(2)將服務(wù)節(jié)點(diǎn)名serviceNodeId、調(diào)用接口名interfaceId、用戶名userId以及接口返回的序列化字符串格式名dataFormat等參數(shù),與其他接口服務(wù)查詢參數(shù)一起在程序中賦值,并存儲(chǔ)在一個(gè)字典型(dict)變量params中,而官方調(diào)用方案中上述參數(shù)的獲取相對(duì)分散,部分設(shè)置需從配置文件client.config中讀取、另有個(gè)別參數(shù)則隱含反映在對(duì)客戶端對(duì)象的不同方法調(diào)用過程中。
確定查詢參數(shù)名稱及其具體取值的方法是,在氣象大數(shù)據(jù)云平臺(tái)集成界面(PORTAL網(wǎng)站)的“接口測試工具”頁面手選接口賬戶、數(shù)據(jù)類別、數(shù)據(jù)名稱和要測試的服務(wù)接口,并根據(jù)頁面提示信息補(bǔ)充所需接口參數(shù)、選擇返回值類型,最后點(diǎn)選“生成并執(zhí)行URL”以解析服務(wù)端構(gòu)建出的完整的查詢URL信息(圖1)。該查詢URL串中前面包含“天擎”平臺(tái)服務(wù)節(jié)點(diǎn)接口查詢標(biāo)識(shí)的“http://10.*.*.*/music-ws/api?”部分為baseUrl段,其后每個(gè)查詢參數(shù)都體現(xiàn)為一個(gè)以“=”相連接、以“&”為間隔的“鍵-值”參數(shù)對(duì)。以按時(shí)間段和經(jīng)緯度區(qū)域查詢站點(diǎn)地面氣象要素的接口URL為例,Portal網(wǎng)站構(gòu)建出的完整查詢信息是:
圖1 使用“天擎”PORTAL網(wǎng)站構(gòu)建接口服務(wù)完整查詢URL信息
http://10.159.90.120/music-ws/api?
serviceNodeId=NMIC_MUSIC_CMADAAS&userId=USR_GCC_LYZ&interfaceId=getSurfEleInRectByTimeRange&dataCode=SURF_CHN_MUL_HOR&elements=Station_Name,Year,Mon,Day,Hour,PRE,TEM,PRS,RHU&timeRange=[20210830000000,20210830010000]&minLon=104&maxLon=115&minLat=20&maxLat=27&dataFormat=text×tamp=1630399491741
&nonce=fb27ce93-fc82-472e-8b4a-8e85e3882855
&sign=F58C7B2D70523102ADFA5F7960DD53FC
除第一行“基礎(chǔ)信息”段和最后兩行“時(shí)間戳、隨機(jī)數(shù)和數(shù)字簽名”段,中間以下劃線標(biāo)識(shí)部分中的每一組以“=”相連、“&”為間隔的“鍵-值”參數(shù)對(duì)都須顯式賦值到params變量中,示例如下:
params = {'serviceNodeId':'NMIC_MUSIC_CMADAAS',
'userId': 'USR_GCC_LYZ',
'interfaceId': 'getSurfEleInRectByTimeRange',
'dataCode': 'SURF_CHN_MUL_HOR',
'elements': 'Station_Name,Year,Mon,Day,Hour,PRE,TEM,PRS,RHU',
'timeRange': '[20210830000000,20210830010000]',
'minLat':'20',
'minLon':'104',
'maxLat':'27',
'maxLon':'115',
'dataFormat':'text',
}
為避免服務(wù)端接口調(diào)用URL解碼程序誤解查詢參數(shù)信息,建議所有賦值的“key:value”參數(shù)嚴(yán)格復(fù)現(xiàn)Portal接口測試工具給出的字符大小寫特征。
(3)以查詢參數(shù)params來調(diào)用createApiUrl函數(shù)生成接口檢索URL,然后推薦采用Python第三方requests庫(或異步框架httpx庫)對(duì)該URL執(zhí)行HTTP請(qǐng)求操作,即可正常獲取“云”服務(wù)端返回的查詢結(jié)果信息,用以開展客戶端應(yīng)用后續(xù)加工處理和產(chǎn)品輸出工作。程序流程如下:
……(程序初始化)
baseUrl ='http://' + serviceIp + '/music-ws/api?' #初始化服務(wù)接口基礎(chǔ)URL
params = {…… } #設(shè)定接口查詢參數(shù)
queryUrl = createApiUrl(params,baseUrl,pwd)#生成完整的服務(wù)接口加密檢索URL
res = httpx.get(queryUrl) #用通用查詢框架執(zhí)行標(biāo)準(zhǔn)HTTP請(qǐng)求,獲取返回信息
……
CMADaaS_Data_Proc() #數(shù)據(jù)后處理及產(chǎn)品輸出
……
上述函數(shù)式“天擎”服務(wù)接口調(diào)用方式可將官方SDK限定的一系列客戶端操作處理過程縮減到一個(gè)只有數(shù)十行代碼的腳本文件中集約化實(shí)現(xiàn),顯著降低云平臺(tái)數(shù)據(jù)接口服務(wù)應(yīng)用門檻。
廣西省級(jí)“天擎”平臺(tái)業(yè)務(wù)試運(yùn)行初期,接口應(yīng)用測試時(shí)不時(shí)會(huì)出現(xiàn)訪問失敗情況(返回“CLUSTERDOWN The cluster is down”錯(cuò)誤提示、或查詢超時(shí)無任何信息返回);而短時(shí)內(nèi)再重復(fù)同樣查詢,故障往往又消失不見、重新可以獲取正常結(jié)果數(shù)據(jù)。為解決上述偶發(fā)性接口查詢?cè)L問遲滯問題、保證服務(wù)調(diào)用成功率,可在代碼中引入“超時(shí)重試”機(jī)制,requests包本身就支持重試功能,使用前只需對(duì)requests.adapters.HTTPAdapter 進(jìn)行相應(yīng)設(shè)置即可(代碼略);另一種更好的方法是使用Python包裝器、借助功能更為強(qiáng)大的第三方“重試”模塊 tenacity(retry)來包裝正常的接口處理函數(shù),無需更改原函數(shù)內(nèi)部代碼就可增添超時(shí)重試功能:
from tenacity import retry ……
#---包裝3個(gè)重試條件:①出現(xiàn)“連接超時(shí)”異常時(shí)才進(jìn)行重試;②等待3 s后才重試;③重試過3次、或時(shí)長超過10 s后就不再重試---
@retry(retry = retry_if_exception_type(requests.exceptions.Timeout), wait = wait_fixed(3), stop=(stop_after_delay(10)|stop_after_attempt(3)))
def CMADaaS_DayProc_Retry(datestr): # 帶有“重試機(jī)制”的包裝器函數(shù)
CMADaaS_DayProc(datestr) # 原處理函數(shù)
“天擎”平臺(tái)服務(wù)提供了多種可選數(shù)據(jù)返回格式,其中新增的JSON格式常被當(dāng)作“瘦身版XML”、在很多應(yīng)用場景下都成功取代了XML數(shù)據(jù)。更深層次的原因是,JSON 數(shù)據(jù)格式完美對(duì)應(yīng)了Python列表(list)和字典(dict)類型表達(dá)[17],尤其是“字典”這種基于散列表存儲(chǔ)的高效數(shù)據(jù)結(jié)構(gòu),它的“鍵-值”映射檢索時(shí)間效率近似于O(1),無論字典或集合元素?cái)?shù)量增長到多巨大,所耗費(fèi)的查詢時(shí)間幾乎可忽略不計(jì),可完美適配伸縮度極大的數(shù)據(jù)交換場合。
Python處理JSON類型數(shù)據(jù)非常簡單,只需將返回結(jié)果提交給JSON內(nèi)置對(duì)象的loads方法加載、解析,就可得到一個(gè)容納全部記錄信息的多重嵌套dict型對(duì)象;而在這個(gè)對(duì)象中,每一組記錄數(shù)據(jù)段都能直接通過相應(yīng)的“鍵名”來迅速獲取。樣例如下:
import json #引入Python標(biāo)準(zhǔn)內(nèi)置JSON格式數(shù)據(jù)解析處理模塊
……
res = webapi.get(newUrl) #向“天擎”服務(wù)接口查詢站點(diǎn)觀測數(shù)據(jù)
result = json.loads(res.text) #使用JSON模塊loads方法再次加載返回?cái)?shù)據(jù)
#---循環(huán)提取查詢結(jié)果數(shù)據(jù)中的每一個(gè)觀測站的要素信息---
for StaRecoder in result['DS']: #'DS'鍵值對(duì)應(yīng)所有測站的觀測記錄列表
strStationNum = StaRecoder["Station_Id_C"] #臺(tái)站站號(hào)
fStationPress = float(StaRecoder["PRS"]) #氣壓
…
……
若“天擎”接口返回?cái)?shù)據(jù)是TEXT類型的序列化字符串,上述解碼提取觀測站要素信息的過程就會(huì)變成繁復(fù)多次的行、列、序號(hào)“拆分-解析”操作,不僅效率低下,而且由于缺乏明確的要素名與要素值對(duì)應(yīng)關(guān)系,代碼可讀性差、程序易出錯(cuò),軟件質(zhì)量無法保證。經(jīng)簡單對(duì)比,處理基于JSON格式的7~8萬個(gè)測站記錄比其它格式處理代碼快0.3%~1%左右,看似微不足道,但若一并考慮系統(tǒng)長期運(yùn)行以及代碼的可讀性、可維護(hù)性,效果相當(dāng)可觀。
針對(duì)接口調(diào)用頻次限制,雖可通過向系統(tǒng)管理員申請(qǐng)、適當(dāng)提高特定用戶訪問限額來解決,但在應(yīng)用端程序調(diào)試中避免突破用戶限額還是應(yīng)作為普遍性“規(guī)則”盡量遵守。通過合理選擇服務(wù)接口、提高代碼處理技巧可以有效緩解訪問限額需求:①應(yīng)盡可能合并查詢檢索條件,按“時(shí)段”而非按“時(shí)間/時(shí)次”、按“區(qū)域/站號(hào)段”而非按“臺(tái)站號(hào)”來選擇合適的服務(wù)接口,以便用盡可能少的接口調(diào)用次數(shù)來獲取所需全部記錄數(shù)據(jù);②細(xì)粒度的時(shí)次、臺(tái)站級(jí)記錄篩選工作可對(duì)本機(jī)內(nèi)存中的返回?cái)?shù)據(jù)集執(zhí)行二次操作來完成;③對(duì)調(diào)試期間尚未完善的接口服務(wù)調(diào)用部分,可適當(dāng)添加類似“sleep(3)”休眠語句來避免頻繁訪問造成限額耗盡。
例如:某應(yīng)用端服務(wù)需要統(tǒng)計(jì)近6 h廣西境內(nèi)自動(dòng)氣象站的累計(jì)雨量值,如果選用“按時(shí)間”或“按站號(hào)段”服務(wù)接口執(zhí)行檢索,至少需要12次接口調(diào)用(共6個(gè)時(shí)次、每個(gè)時(shí)次至少2個(gè)站號(hào)段);而改用“按時(shí)間段、經(jīng)緯度范圍”服務(wù)接口執(zhí)行檢索,設(shè)置好最近6 h的時(shí)段參數(shù)和廣西區(qū)域的起止經(jīng)緯度參數(shù),只需要1次檢索即可取回全部觀測記錄。再綜合采用JSON型數(shù)據(jù)快速解碼、定位功能,后續(xù)篩選和統(tǒng)計(jì)工作也能在本地高效完成。
作為當(dāng)前全國氣象信息化平臺(tái)的核心,“天擎”將成為今后支撐氣象部門業(yè)務(wù)運(yùn)行、科學(xué)研究、新技術(shù)開發(fā)的共享資源中心和安全空間,助力氣象事業(yè)高質(zhì)量協(xié)同創(chuàng)新發(fā)展。顯然,促進(jìn)平臺(tái)高效安全使用、推動(dòng)業(yè)務(wù)系統(tǒng)深度融入應(yīng)用,僅靠信息網(wǎng)絡(luò)專業(yè)人員在“云”端努力是遠(yuǎn)遠(yuǎn)不夠的,氣象預(yù)報(bào)服務(wù)及科研人員也需要在應(yīng)用“端”充分發(fā)揮自身優(yōu)勢;從這個(gè)技術(shù)視角出發(fā),可采用以下接口應(yīng)用開發(fā)技巧:①用函數(shù)式編程簡化“天擎”接口服務(wù)調(diào)用過程;②在大數(shù)據(jù)云平臺(tái)服務(wù)“接口化”背景下,引入“超時(shí)重試”機(jī)制可進(jìn)一步提高服務(wù)接口調(diào)用成功率;③以JSON格式作為預(yù)報(bào)服務(wù)應(yīng)用接口的首選返回?cái)?shù)據(jù)格式,信息解析效率更高、代碼可維護(hù)性更強(qiáng);④合理選擇服務(wù)接口可顯著緩解訪問限額矛盾。
目前,“天擎”平臺(tái)及其服務(wù)接口仍在持續(xù)升級(jí)改進(jìn),后續(xù)優(yōu)化完善可從以下方面綜合考慮:①對(duì)服務(wù)接口進(jìn)行歸類整理、對(duì)接口的不同適用場景及其性能差異予以描述,可指導(dǎo)基層正確選用合適的服務(wù)方式、提升應(yīng)用體驗(yàn);②隨著系統(tǒng)軟硬件性能的升級(jí)擴(kuò)充,適當(dāng)放寬系統(tǒng)資源(服務(wù)接口調(diào)用)管控限額能夠更好地支撐采用多協(xié)程/線程/進(jìn)程并行執(zhí)行的高性能客戶端應(yīng)用程序在氣象大數(shù)據(jù)云平臺(tái)環(huán)境下運(yùn)行;③對(duì)云服務(wù)端算法進(jìn)一步開源共享,有利于技術(shù)人員更加深入理解“天擎”運(yùn)行機(jī)制和服務(wù)理念,促進(jìn)平臺(tái)數(shù)據(jù)高效安全使用、推動(dòng)業(yè)務(wù)系統(tǒng)深度融入融合。