巴劍波,連凌,欒潔,徐雄利,盧姍姍
全球傳染病疫情的監(jiān)測(cè)預(yù)警是公共衛(wèi)生領(lǐng)域的研究熱點(diǎn)[1]。及時(shí)監(jiān)測(cè)全球當(dāng)下正在發(fā)生的傳染病疫情、早期發(fā)現(xiàn)和識(shí)別傳染病流行,有利于我國科學(xué)采取公共衛(wèi)生措施阻止傳染病傳入我國、降低其對(duì)我國全球戰(zhàn)略利益的影響[2]。目前,我國尚缺乏海外生物安全哨點(diǎn)監(jiān)測(cè)預(yù)警體系,基于互聯(lián)網(wǎng)信息技術(shù)的全球傳染病疫情監(jiān)測(cè)預(yù)警技術(shù)就成為首選的監(jiān)測(cè)預(yù)警手段。“全球傳染病疫情網(wǎng)絡(luò)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)”是我們自主建設(shè)、自動(dòng)運(yùn)維、實(shí)時(shí)更新的監(jiān)測(cè)預(yù)警系統(tǒng),具有自動(dòng)數(shù)據(jù)收集、分析和多平臺(tái)展現(xiàn)的特點(diǎn),以世界各國正在流行的傳染病數(shù)據(jù)為重點(diǎn),提供當(dāng)下傳染病發(fā)生的地域分布、流行強(qiáng)度和流行態(tài)勢(shì),為我國入境人員傳染病篩查、出境人員免疫接種、國際旅行人群(尤其是軍事力量走向世界執(zhí)行聯(lián)合國維和、亞丁灣護(hù)航、環(huán)球航行、海上聯(lián)合訓(xùn)練與演習(xí)等)衛(wèi)生防護(hù)提供參考。
本文主要介紹“全球傳染病疫情網(wǎng)絡(luò)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)”的設(shè)計(jì)和實(shí)施方案,以供類似系統(tǒng)開發(fā)參考。
“全球傳染病疫情網(wǎng)絡(luò)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)”從系統(tǒng)架構(gòu)上分為數(shù)據(jù)庫、數(shù)據(jù)采集和數(shù)據(jù)展現(xiàn)3個(gè)部分。其中數(shù)據(jù)展現(xiàn)又分為一個(gè)后臺(tái)服務(wù)模塊和兩個(gè)客戶端模塊,見圖1。考慮到本系統(tǒng)中數(shù)據(jù)采集的頻度較低,數(shù)據(jù)展現(xiàn)的訪問量短期內(nèi)也不會(huì)有爆炸性增長(zhǎng),所以數(shù)據(jù)庫模塊采用通用的關(guān)系型數(shù)據(jù)庫進(jìn)行實(shí)現(xiàn)。將來如果數(shù)據(jù)展現(xiàn)的需求提升,數(shù)據(jù)庫成為瓶頸,可以考慮對(duì)數(shù)據(jù)庫模塊進(jìn)行升級(jí),比如采用讀寫分離或者緩存數(shù)據(jù)庫等。這些技術(shù)已經(jīng)有成熟的實(shí)現(xiàn)方案。
圖1 全球傳染病疫情網(wǎng)絡(luò)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)構(gòu)成與模塊
1.1 數(shù)據(jù)采集模塊 主要負(fù)責(zé)收集疫情數(shù)據(jù)和疫情新聞,并對(duì)數(shù)據(jù)進(jìn)行查重、賦權(quán)、概數(shù)計(jì)算、歸類比對(duì)等初步處理和整理,分別按照疾病名稱、國家和地區(qū)、數(shù)據(jù)獲取時(shí)間等維度保存到系統(tǒng)本地?cái)?shù)據(jù)庫中,為系統(tǒng)數(shù)據(jù)調(diào)取、圖表呈現(xiàn)、地圖顯示等提供服務(wù)。
1.2 后臺(tái)服務(wù)模塊 主要負(fù)責(zé)按照客戶端請(qǐng)求從系統(tǒng)本地?cái)?shù)據(jù)庫中抽取數(shù)據(jù),并將數(shù)據(jù)分類匯總后提供給客戶端。后臺(tái)服務(wù)模塊采用Web API架構(gòu),支持RESTFUL設(shè)計(jì)風(fēng)格和開發(fā)方式,這種服務(wù)的簡(jiǎn)便性讓用戶能夠與之直接交互,使用它們的Web瀏覽器向后臺(tái)服務(wù)模塊提供的URL發(fā)送Get、Post等請(qǐng)求,獲取返回的內(nèi)容。
瀏覽器客戶端和手機(jī)客戶端UU兩個(gè)模塊分別適用于不同的工作環(huán)境,但它們的功能基本一致,就是從后臺(tái)服務(wù)模塊獲取數(shù)據(jù),將數(shù)據(jù)進(jìn)行可視化的展現(xiàn)。瀏覽器客戶端采用JavaScript和CSS3,手機(jī)客戶端則采用Android原生模式。
這樣的模塊劃分,有利于使模塊間接口清晰。模塊間的耦合度越低,邏輯結(jié)構(gòu)越容易理解,功能修改越容易實(shí)現(xiàn)。
2.1 數(shù)據(jù)采集來源 “全球傳染病疫情網(wǎng)絡(luò)數(shù)據(jù)監(jiān)測(cè)系統(tǒng)”首要目的是提供全球傳染病流行地域分布、流行強(qiáng)度和流行態(tài)勢(shì)特征,解決當(dāng)下有沒有傳染病爆發(fā)流行、爆發(fā)流行威脅程度和流行趨勢(shì)預(yù)判的問題,其疫情數(shù)據(jù)的時(shí)效性、連續(xù)性、敏感性要求較高,而對(duì)傳染病發(fā)病準(zhǔn)確例數(shù)、轉(zhuǎn)歸預(yù)后、病死率等則要求較低。因此,系統(tǒng)數(shù)據(jù)來源就極為重要。數(shù)據(jù)來源渠道主要有二:其一是來源于專業(yè)從事網(wǎng)絡(luò)傳染病數(shù)據(jù)傳報(bào)的非官方網(wǎng)絡(luò)平臺(tái)(包括各類非政府組織和機(jī)構(gòu)的自媒體、公告板、論壇等),其數(shù)據(jù)更新頻繁、及時(shí),時(shí)效性強(qiáng),較少受到來自政府和權(quán)威機(jī)構(gòu)的制約。該來源渠道為本系統(tǒng)的主要渠道;其二是來源于官方渠道的網(wǎng)絡(luò)平臺(tái),包括世界衛(wèi)生組織(WHO)、美國疾控中心(CDC)、歐盟疾控中心(ECDC)、美國醫(yī)療健康中心(NHC)及各個(gè)國家和地區(qū)政府網(wǎng)站,其數(shù)據(jù)權(quán)威性高,但通常疫情數(shù)據(jù)更新滯后,會(huì)受到政府和權(quán)威機(jī)構(gòu)的掣肘,也存在數(shù)據(jù)不全情況。該來源渠道只限定在WHO宣布疫情為全球突發(fā)公共衛(wèi)生事件時(shí),各官方網(wǎng)站才每日或?qū)崟r(shí)更新疫情數(shù)據(jù),如埃博拉疫情、新型冠狀病毒肺炎疫情等。
2.2 數(shù)據(jù)采集抓取 數(shù)據(jù)采集模塊以后臺(tái)服務(wù)模式運(yùn)行在服務(wù)器上,定時(shí)從互聯(lián)網(wǎng)預(yù)設(shè)網(wǎng)站抓取數(shù)據(jù),數(shù)據(jù)抓取頻度可以在控制臺(tái)人工調(diào)整并立即生效?;趥魅静∫咔榱餍袛?shù)據(jù)的實(shí)時(shí)性要求,系統(tǒng)預(yù)設(shè)的采集頻度通常以小時(shí)為單位。在系統(tǒng)初次部署時(shí),采取以分鐘為單位的數(shù)據(jù)抓取,以完成系統(tǒng)基礎(chǔ)歷史數(shù)據(jù)采集。當(dāng)系統(tǒng)進(jìn)入日常運(yùn)行狀態(tài)時(shí),應(yīng)當(dāng)將采集頻度降低。數(shù)據(jù)采集抓取的方式和頻度需要合理設(shè)置,過高的數(shù)據(jù)采集頻度可能影響源數(shù)據(jù)網(wǎng)站的正常運(yùn)行。
為了提高數(shù)據(jù)抓取的準(zhǔn)確性,筆者對(duì)數(shù)據(jù)源的網(wǎng)站結(jié)構(gòu)和頁面結(jié)構(gòu)進(jìn)行了逐一分析,為每一個(gè)網(wǎng)站分別設(shè)置用于數(shù)據(jù)過濾的正確表達(dá)式和其他相關(guān)的過濾規(guī)則。
正因如此,眾多的英語老師始終在跨文化教學(xué)中培養(yǎng)學(xué)生的交際能力、思維能力,通過外語的學(xué)習(xí)來掌握外國文化,了解外國文化,對(duì)其有更深層次的認(rèn)識(shí)。然而,相當(dāng)一部分學(xué)生的閱讀與寫作能力較強(qiáng),但是聽力與口語能力堪憂,使得其對(duì)于英語的整體掌握程度不能達(dá)到要求,也不能很好的掌握外國文化。正是在此基礎(chǔ)上,本文結(jié)合外語教學(xué)的現(xiàn)實(shí)情況,著重探討提出一些現(xiàn)實(shí)中發(fā)生的問題,并且在研究中尋找切實(shí)可行的對(duì)策。
另外,疫情數(shù)據(jù)是動(dòng)態(tài)變化的,經(jīng)常會(huì)發(fā)生數(shù)據(jù)的修訂。因此,數(shù)據(jù)采集模塊被設(shè)計(jì)為能夠自動(dòng)判斷數(shù)據(jù)是否已經(jīng)發(fā)生修訂,如果發(fā)現(xiàn)數(shù)據(jù)變化,及時(shí)更新本地?cái)?shù)據(jù)庫中的數(shù)據(jù)。
2.3 數(shù)據(jù)分析整理和漢化 系統(tǒng)數(shù)據(jù)采集模塊對(duì)抓取到的數(shù)據(jù)進(jìn)行查重、比對(duì)、計(jì)算和分析,并按照疾病名稱、國家和地區(qū)、采集時(shí)間等維度進(jìn)行整理。
模塊中內(nèi)含翻譯子模塊,對(duì)于收集到的英文信息自動(dòng)進(jìn)行翻譯漢化。對(duì)于疾病名稱、國家/地區(qū)名稱,筆者設(shè)計(jì)了中英對(duì)照字典庫。初始時(shí),字典庫為空,對(duì)采集到的英文信息通過調(diào)用百度翻譯API接口進(jìn)行機(jī)器翻譯。同時(shí)將翻譯保存到本地的字典庫,下次翻譯時(shí)就不再需要調(diào)用百度翻譯API接口。管理員可以對(duì)字典庫中的條目進(jìn)行修改,以避免機(jī)器漢化翻譯中的錯(cuò)誤和差錯(cuò)。一旦條目被修改,會(huì)立即觸發(fā)對(duì)已經(jīng)完成翻譯的疾病名稱、國家/地區(qū)名稱的修改。這樣就保證了系統(tǒng)中數(shù)據(jù)的正確性。
系統(tǒng)中設(shè)置的傳染病疫情新聞版塊也通過百度翻譯API進(jìn)行漢化,方便用戶閱讀,作為監(jiān)測(cè)預(yù)警信息的有效補(bǔ)充。由于新聞內(nèi)容為整段文字的翻譯,而非如疾病名稱那樣的單詞或詞組,因此新聞版塊的翻譯結(jié)果不保存到字典庫,管理員無須對(duì)新聞內(nèi)容進(jìn)行修正。
實(shí)際流程中,翻譯子模塊采用獨(dú)立的線程進(jìn)行工作,對(duì)數(shù)據(jù)中未翻譯的信息進(jìn)行翻譯,并將新獲得的單詞或詞組類型的翻譯結(jié)果保存到字典中。見圖2。
圖2 翻譯模塊相關(guān)的UML序列圖
數(shù)據(jù)展現(xiàn)是直接面向使用者的模塊,決定了用戶對(duì)系統(tǒng)的直觀感受。因此需要考慮可用性、安全性和美觀性[3]。
3.1 可用性 數(shù)據(jù)展現(xiàn)是系統(tǒng)數(shù)據(jù)采集、數(shù)據(jù)分析的最終目的,直接決定了系統(tǒng)的可用性。為了方便用戶使用,系統(tǒng)設(shè)計(jì)時(shí)采用了前后端分離的模式,后端使用Web API提供數(shù)據(jù)服務(wù),前端通過瀏覽器的JavaScript語言以AJAX方式從Web API接口讀取數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)列表、可視化繪圖、電子地圖應(yīng)用等展現(xiàn)效果;而手機(jī)上開發(fā)的原生模式的APP也通過調(diào)用Web API獲取數(shù)據(jù)進(jìn)行數(shù)據(jù)列表顯示。前后端分離的好處是一個(gè)后端服務(wù)可以同時(shí)提供PC機(jī)和手機(jī)兩種不同的客戶端,便于系統(tǒng)功能的拓展和日常的維護(hù)。AJAX網(wǎng)頁開發(fā)技術(shù)的應(yīng)用通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換實(shí)現(xiàn)異步更新,而不用重新加載整個(gè)網(wǎng)頁,具備頁面操作流暢的特點(diǎn),有利于提高系統(tǒng)的可用性。
3.2 安全性 B/S架構(gòu)首先要面對(duì)的就是如何對(duì)用戶進(jìn)行驗(yàn)證,防止非法的訪問。系統(tǒng)前端用戶登錄時(shí),將用戶名和密碼傳給后端與數(shù)據(jù)庫中保留的賬戶信息進(jìn)行匹配。如果匹配成功,就產(chǎn)生一個(gè)令牌。后端服務(wù)在返回令牌給前端的同時(shí),將令牌與用戶賬戶、權(quán)限等信息的映射關(guān)系保存在內(nèi)存中的令牌哈希表里。前端程序(包括PC端和手機(jī)端)的數(shù)據(jù)訪問均包含這個(gè)令牌,系統(tǒng)后端在收到數(shù)據(jù)請(qǐng)求時(shí)進(jìn)行令牌驗(yàn)證和權(quán)限驗(yàn)證,否則將通知前端程序強(qiáng)制退出到登錄界面;后端令牌哈希表的信息中包含一個(gè)時(shí)間戳,系統(tǒng)后端每次收到用戶訪問,都會(huì)更新此時(shí)間戳,如果用戶長(zhǎng)時(shí)間沒有訪問動(dòng)作,時(shí)間戳將過期,則系統(tǒng)后端服務(wù)就會(huì)刪除此令牌,這個(gè)機(jī)制有效保證了用戶使用本系統(tǒng)的權(quán)限不被誤用或?yàn)E用。
3.3 美觀性 在系統(tǒng)前端開發(fā)中,客戶端采用了CSS3渲染,使界面具有較好的視覺效果。在數(shù)據(jù)展現(xiàn)方面,充分利用各種成熟的組件,如DataTables、HighCharts、百度地圖、高德地圖等,提升系統(tǒng)可視化水平。
系統(tǒng)采用DataTables工具用于實(shí)現(xiàn)自帶分頁、排序等功能的數(shù)據(jù)表格,選擇DataTables是因?yàn)樗哂忻烙^易用的特性,更重要的是它提供了更強(qiáng)大的擴(kuò)展能力。例如,本課題組編寫了漢字拼音轉(zhuǎn)換代碼掛接在其fn.dataTableExt.oSort接口中實(shí)現(xiàn)漢字拼音的排序,見圖3。
圖3 漢字拼音排序?qū)崿F(xiàn)的代碼
系統(tǒng)通過修改ColumnDefs的render屬性實(shí)現(xiàn)了點(diǎn)擊疾病名稱自動(dòng)跳轉(zhuǎn)到相關(guān)的百度百科詞條的功能。見圖4。
圖4 字段中超鏈接實(shí)現(xiàn)的代碼
系統(tǒng)利用HighCharts工具豐富的功能接口實(shí)現(xiàn)圖表繪制,可以將疫情數(shù)據(jù)以直方圖、折線圖、餅圖、雷達(dá)圖等多種圖表繪制出來,以實(shí)現(xiàn)可視化應(yīng)用,并大大減輕了整個(gè)開發(fā)過程的工作強(qiáng)度,見圖5~6。
圖5 HighCharts工具實(shí)現(xiàn)的病例分布柱狀圖
圖6 HighCharts工具實(shí)現(xiàn)的病例趨勢(shì)曲線
系統(tǒng)充分利用百度地圖、高德地圖、amCharts等國內(nèi)外最知名的電子地圖,通過將數(shù)據(jù)在地圖上展現(xiàn)的方式,可以實(shí)現(xiàn)各種形式的基于地圖的數(shù)據(jù)分析,給用戶以一目了然的直觀感受。在系統(tǒng)建立的新冠疫情專題板塊,利用高德地圖在客戶端加載完成的特點(diǎn),建立了疫情流行與分布散點(diǎn)圖,直觀展現(xiàn)疫情數(shù)據(jù)的同時(shí)降低了服務(wù)器負(fù)載,收到較好的應(yīng)用效果,見圖7。
圖7 用高德地圖實(shí)現(xiàn)的新型冠狀病毒肺炎疫情分布地圖
以上是筆者在本次全球傳染病監(jiān)測(cè)預(yù)警系統(tǒng)的開發(fā)中的主要設(shè)計(jì)思想,以及采用的實(shí)現(xiàn)方案。從設(shè)計(jì)思想來說,核心目標(biāo)是通過切分明晰的模塊邊界,減少模塊的耦合度;通過合理安排線程間的調(diào)度,提高整個(gè)系統(tǒng)的效率。從實(shí)現(xiàn)方案的角度,盡可能采用了功能強(qiáng)大、使用廣泛并且有很好技術(shù)支持的插件,從而縮短開發(fā)周期?;镜脑瓌t是在用戶的使用體驗(yàn)和開發(fā)的便利性兩個(gè)方面尋求平衡點(diǎn),即兼顧使用效果和生產(chǎn)成本。