考書健,虞麗娟
(1.上海體育學(xué)院 運動科學(xué)學(xué)院,上海 200438;2.同濟大學(xué) 物理科學(xué)與工程學(xué)院,上海 200092)
亞健康作為一種介于健康與疾病之間的生理功能低下的狀態(tài),包括生理及心理上不能確診的不適感[1-2]。作為一種中間狀態(tài),亞健康狀態(tài)可能演變?yōu)榧膊?,也可能成功康?fù)。在對全國不同城市不同地區(qū)的上百萬人口的調(diào)查中發(fā)現(xiàn),城市亞健康狀態(tài)人數(shù)超過了總?cè)丝诘?0%,部分地區(qū)甚至達到了70%以上,如上海、北京及廣東省。北京亞健康人群所占比例最高,達到了75.31%。亞健康高發(fā)年齡段為31~50歲[3]。上述調(diào)查結(jié)果表明,大約每十個人中約有6個處于亞健康狀態(tài)。因此,對亞健康狀態(tài)的有效檢測、綜合管理和科學(xué)干預(yù)已成為社會的焦點問題之一。
目前國內(nèi)外對于亞健康監(jiān)測的數(shù)據(jù)采集、存儲和處理等尚缺乏全面、科學(xué)的解決方案,主要體現(xiàn)在以下兩個方面:新興亞健康管理行業(yè)尚無統(tǒng)一的技術(shù)標準,集成系統(tǒng)也由于各主體自身利益與技術(shù)保護而無法開放協(xié)作。因此,亞健康數(shù)據(jù)的采集、存儲、處理與管理等手段亟待提升[4]。
為了有效管理亞健康群體的信息數(shù)據(jù),提高信息管理效率和管理的透明度,文中提出了一種基于物聯(lián)網(wǎng)技術(shù)的云和霧計算協(xié)同作用的亞健康信息管理方案。該方案將不同企業(yè)與機構(gòu)的不同終端通過物聯(lián)網(wǎng)集成為一體來采集和存儲相關(guān)信息。通過云計算和霧計算對這些數(shù)據(jù)進行處理和分析以實現(xiàn)對亞健康信息數(shù)據(jù)的綜合管理。通過測試證明該系統(tǒng)具有足夠的伸縮靈活性和可靠性,可為亞健康群體的健康恢復(fù)提供技術(shù)支撐和可靠管理。
經(jīng)專家會議法篩選,亞健康信息管理系統(tǒng)的核心數(shù)據(jù)包括:個人信息數(shù)據(jù)(姓名、性別、身份證號等)、生理機能信息(身高、體重、心跳、血糖等);運動機能信息(日運動步數(shù)、爆發(fā)力、最大耐力等);營養(yǎng)膳食信息(日均果蔬量、日均肉蛋奶量等);生活方式信息(日均有效睡眠時長、日均飲酒量等);心理健康信息(心理壓力指數(shù))等。
采集到的核心數(shù)據(jù)具有以下幾個特點:
(1)數(shù)據(jù)關(guān)聯(lián)性弱。亞健康數(shù)據(jù)對完整性、同步性、實時性要求均不高,沒有事務(wù)性的原子操作。例如采集運動信息時,運動步數(shù)與運動時間點不要求嚴格對應(yīng),其數(shù)據(jù)可延后傳輸;采集年齡時,可以只采集年齡區(qū)間。數(shù)據(jù)的采集可以獨立分散進行,很少需要協(xié)同作業(yè),非常適合運用霧計算進行處理;
(2)數(shù)據(jù)量大、種類多、多源異構(gòu),且需長期追蹤。亞健康數(shù)據(jù)既有實時性和趨勢性,也具有冗余性和互補性[5],同時數(shù)據(jù)量大、格式結(jié)構(gòu)各異,存在結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)特性[6],而且部分數(shù)據(jù)在時間維上存在動態(tài)沖突,例如運動機能信息會隨著鍛煉而逐漸變化。因此,亞健康數(shù)據(jù)難以按范式約束到關(guān)系型數(shù)據(jù)庫中,只能以可變的數(shù)據(jù)結(jié)構(gòu)存入NoSQL數(shù)據(jù)庫;
(3)數(shù)據(jù)采集的手段多樣。不同來源、結(jié)構(gòu)的數(shù)據(jù),其采集手段也不相同。生理生化與運動狀況數(shù)據(jù)需通過穿戴式智能傳感設(shè)備24小時監(jiān)測采集;全面的體質(zhì)檢測數(shù)據(jù)需要在專業(yè)檢測機構(gòu)進行采集;膳食、生活方式、其它運動數(shù)據(jù)則需通過移動終端、人工手動記錄進行采集;
(4)數(shù)據(jù)存儲處理方式多樣。亞健康數(shù)據(jù)管理需要對大量歷史數(shù)據(jù)進行規(guī)范化并按主題建倉庫;對于大批量的數(shù)據(jù)需要先進行預(yù)處理再進行存儲;對于實時的、分散的數(shù)據(jù),例如手機APP獲取的運動數(shù)據(jù),需要實時過濾、處理、傳輸和保存。
數(shù)據(jù)的上述特點決定了無法采用常規(guī)的數(shù)據(jù)采集、存儲方式而需要根據(jù)各自的特點進行匹配。本文綜合采用云計算、大數(shù)據(jù)、霧計算及Docker引擎等技術(shù)構(gòu)建亞健康信息管理平臺,以此解決數(shù)據(jù)高分散性、高實時性等問題。
本文采用基于無線傳感網(wǎng)的物聯(lián)網(wǎng)技術(shù),通過各種無線終端對原始數(shù)據(jù)進行采集,所使用的獲取路徑包括以下幾種:
(1)PC端獲?。壕W(wǎng)頁訪問、電郵智能表格等;
(2)移動端獲取:微信智能表格(心理測試表等)[7]、穿戴式無線傳感器(體質(zhì)健康手環(huán)等);
(3)物聯(lián)網(wǎng)獲取:系統(tǒng)內(nèi)聯(lián)網(wǎng)設(shè)備如家庭跑步機、體質(zhì)中心骨密度儀等[8];
(4)人工錄入獲?。簜€人基礎(chǔ)信息、網(wǎng)絡(luò)外信息補錄(如醫(yī)學(xué)體檢信息等)。
利用Docker容器來存儲獲取的原始數(shù)據(jù)[9]。作為一種使用沙箱機制的虛擬化技術(shù),不同的Docker容器相互獨立,能把系統(tǒng)應(yīng)用和所依賴的環(huán)境打包到一個可移植的軟件運行容器中,然后將之發(fā)布或遷移到任一支持Docker容器的Linux服務(wù)器中。此外,Docker容器發(fā)布、啟動和遷移的性能開銷低,可方便地在霧節(jié)點和云中心之間共享。Docker容器為整個亞健康管理鏈中的各類智能設(shè)備和無線健康傳感器供應(yīng)商保護自身技術(shù)提供了支持,例如經(jīng)與某健康手環(huán)公司協(xié)議,將手環(huán)數(shù)據(jù)發(fā)送至公司數(shù)據(jù)庫后,由該數(shù)據(jù)庫將指定個體的數(shù)據(jù)、參數(shù)、處理邏輯等封裝在亞健康管理Docker中自動運行,整個Docker提交給云平臺來處理自定義數(shù)據(jù)部分并按標準格式提供結(jié)果[10]。
本文采用云計算和霧計算相結(jié)合的綜合處理技術(shù)來實現(xiàn)核心數(shù)據(jù)的處理。
云計算作為主要的計算方式能夠提供可用、便捷、按需、基于網(wǎng)絡(luò)的計算資源以應(yīng)對亞健康持續(xù)增長的海量數(shù)據(jù)分配技術(shù)[11]。大數(shù)據(jù)處理技術(shù)[12]主要解決大量結(jié)構(gòu)化與非結(jié)構(gòu)化的數(shù)據(jù)處理(如日均攝入的食物分類匯總并折算熱量),為促進個體健康提供技術(shù)支撐,也為群體健康研究提供基礎(chǔ)平臺[13]。而作為輔助計算方式的霧計算[14-15]也具有獨特的優(yōu)勢,它對于密集型、高性能計算資源要求低,適合配置在類似跑步健身器等設(shè)備中以方便數(shù)據(jù)保存并提高整個系統(tǒng)的健壯性。更重要的是,霧計算為廣大智能設(shè)備和傳感器生產(chǎn)商參與到亞健康信息平臺提供了契機,他們的產(chǎn)品可構(gòu)建為霧節(jié)點,集成到亞健康信息平臺上[16]。
如圖1所示,亞健康信息管理系統(tǒng)從功能上可被劃分為3個層次:中心云服務(wù)平臺、周邊霧服務(wù)節(jié)點、周邊霧終端,它們由統(tǒng)一通訊協(xié)議和數(shù)據(jù)結(jié)構(gòu)集成在一起。各層次內(nèi)子系統(tǒng)和模塊的結(jié)構(gòu)及技術(shù)均統(tǒng)一,減少了系統(tǒng)的種類,增加了通用性,降低了系統(tǒng)復(fù)雜度。
圖1 系統(tǒng)總體架構(gòu)
中心云服務(wù)平臺包括應(yīng)用服務(wù)與數(shù)據(jù)服務(wù)兩大系統(tǒng),均用Docker集群來封裝。應(yīng)用服務(wù)系統(tǒng)可以保存并管理所有匯集的數(shù)據(jù),并及時分析處理當前數(shù)據(jù),輸出分析結(jié)果、判斷和建議。數(shù)據(jù)庫采用MongoDB,后臺數(shù)據(jù)接收傳輸及服務(wù)于亞健康用戶的Web應(yīng)用采用了NodeJS技術(shù)。
數(shù)據(jù)服務(wù)系統(tǒng)按照分析規(guī)則清洗匯集的大數(shù)據(jù),從亞健康風(fēng)險等級評估和體質(zhì)指標體系間的相關(guān)性分析兩個方面進行全面的、長期的分析和有效信息挖掘。盡管從數(shù)據(jù)分析角度看,數(shù)據(jù)庫采用MongoDB + MySQL組合也許不是最合適的搭配,但這是綜合存儲、處理與日常分析需求的權(quán)衡選擇。必要時,也可引入其它更專業(yè)的數(shù)據(jù)分析技術(shù),如數(shù)據(jù)清洗、數(shù)據(jù)分析及數(shù)據(jù)挖掘的Web應(yīng)用等。
周邊霧服務(wù)節(jié)點獲取穿戴式、便攜式體質(zhì)健康監(jiān)測傳感器和周邊健身、醫(yī)學(xué)設(shè)備的霧終端的數(shù)據(jù),進行預(yù)處理和存儲,并適時轉(zhuǎn)發(fā)給健康管理中心云服務(wù)平臺[17]。
霧節(jié)點盡量統(tǒng)一采用Docker封裝,例如在協(xié)作的醫(yī)療機構(gòu)檢測設(shè)備旁,附加工控機可用Docker或其集群封裝霧節(jié)點,發(fā)回檢測數(shù)據(jù)。由于目前Docker只能運行在主流的Linux環(huán)境中,可在windows里借用Node-Webkit里的Nodejs服務(wù)+IndexedDB數(shù)據(jù)庫來實現(xiàn);而移動應(yīng)用中則可借用Android的后臺服務(wù)+IndexedDB數(shù)據(jù)庫來實現(xiàn)。
周邊霧終端主要有兩種類型:基于Android Webview+IndexedDB的移動應(yīng)用、設(shè)備界面和基于Node-Webkit+IndexedDB的桌面應(yīng)用。
移動應(yīng)用的任務(wù)是服務(wù)于亞健康用戶,獲取需要人工錄入的數(shù)據(jù)和通過移動服務(wù)轉(zhuǎn)發(fā)的數(shù)據(jù),分析并輸出體質(zhì)健康評價結(jié)果和分級警示,并可訪問健康管理中心云的應(yīng)用服務(wù),獲取自己的健康風(fēng)險報告和健康促進處方等。設(shè)備界面主要布置在專業(yè)體質(zhì)檢測機構(gòu)、社區(qū)衛(wèi)生室等場所,用戶可自己操作設(shè)備,實時獲取分析結(jié)果。桌面應(yīng)用主要提供給亞健康服務(wù)工作人員使用,使其可以在醫(yī)療機構(gòu)、亞健康服務(wù)點等場所管理和操作設(shè)備,分析數(shù)據(jù)、輸出實時的健康報告和健康促進處方。
健康管理中心云服務(wù)平臺、周邊霧服務(wù)節(jié)點及周邊霧終端之間采用HTTP通訊協(xié)議,應(yīng)用JSON數(shù)據(jù)格式,并構(gòu)建了WebService的服務(wù)與訪問。敏感數(shù)據(jù)在JSON格式內(nèi)部做加密處理,形成了協(xié)同運行網(wǎng)絡(luò)。
數(shù)據(jù)結(jié)構(gòu)包括通訊接口的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu)。頂層采用統(tǒng)一的標準結(jié)構(gòu),細部可自定義結(jié)構(gòu),便于不同的數(shù)據(jù)源進行存儲和傳輸,并用版本號標識出數(shù)據(jù)結(jié)構(gòu)的演變,例如圖2所示的通訊接口發(fā)出請求的通信數(shù)據(jù)結(jié)構(gòu)。
圖2 請求服務(wù)的數(shù)據(jù)結(jié)構(gòu)
圖2中,主數(shù)據(jù)結(jié)構(gòu)及子數(shù)據(jù)結(jié)構(gòu)的頭部是必須設(shè)置的標準結(jié)構(gòu),所有數(shù)據(jù)都是統(tǒng)一的、標準的。其它省略號部分的數(shù)據(jù)可自行定義,用數(shù)據(jù)結(jié)構(gòu)類型(type)、數(shù)據(jù)結(jié)構(gòu)版本(version)注冊,并記錄結(jié)構(gòu)說明和常用的處理函數(shù)。使用者或Agent代理根據(jù)注冊結(jié)構(gòu)的說明及常用函數(shù)來使用對應(yīng)結(jié)構(gòu)的數(shù)據(jù)。
從技術(shù)上分析,亞健康信息平臺同化和對稱化相當明顯:界面開發(fā)主要是HTML;功能邏輯主要是JavaScript (node.js的語法與JavaScript一致),某些特定功能可用其它主流技術(shù)如C++、.NET、Java等,并打包為nodejs的功能模塊,由nodejs統(tǒng)一調(diào)度使用;數(shù)據(jù)庫主要是MongoDB和IndexedDB,其內(nèi)部的操作也是JavaScript、MySQL及SQL語言。
圖3 任務(wù)分解架構(gòu)
從任務(wù)分解上看,整個亞健康信息平臺架構(gòu)可簡化為圖3的形式。不同的區(qū)塊相互聯(lián)系比較弱,通過已定義的標準接口進行分離。從總體上看,各區(qū)塊都是圍繞數(shù)據(jù)庫按標準數(shù)據(jù)結(jié)構(gòu)執(zhí)行功能邏輯,包括自動數(shù)據(jù)輸入、自動數(shù)據(jù)輸出及人機交互的數(shù)據(jù)訪問運用。這樣的系統(tǒng)架構(gòu)既便于團隊任務(wù)管理,也便于技術(shù)知識管理、服務(wù)人員選配調(diào)劑等。
由于研究條件有限,盡量選擇最小的系統(tǒng)規(guī)模,用最少的資源去驗證整個平臺的可行性和效果。
中心云服務(wù)器部署在一臺Think Server RD340服務(wù)器上。該服務(wù)器主要硬件配置是:雙CPU(24個邏輯內(nèi)核)、16 GB內(nèi)存、4塊3 TB的SATA硬盤做RAID5;操作系統(tǒng)采用64位Ubuntu16.04,并安裝了Docker,版本18.02.0,如圖4所示。
圖4 中心云服務(wù)器
其中,兩個MongoDB集群各由8個ubuntu16.04的Docker組成。每個MongoDB集群各有2個Docker運行一個Config Server,有2個Docker各運行一個Shard Server,并為每個Shard Server配一個副本用Docker、一個仲裁用Docker,mongos放在了對應(yīng)的應(yīng)用集群和分析集群的每個Docker里。而MySQL集群由4個ubuntu16.04的Docker組成,首先用keepalived實現(xiàn)兩兩互備,再把兩個keepalived用作兩個分區(qū),用Spider引擎做分布式集成,但這4個ubuntu16.04的Docker僅安裝有MySQL。兩個Web應(yīng)用集群各有2個ubuntu16.04的Docker組成。每個Web應(yīng)用集群里的Docker都是一樣的配置,由負載均衡來選擇哪個Docker提供服務(wù)。
后臺分析集群由3個ubuntu16.04的Docker組成,通過MapReduce機制分解任務(wù),輪流分配給各Docker處理。任務(wù)進程定時匯報進展程度,完成后匯總結(jié)果數(shù)據(jù);后臺傳輸集群由兩個ubuntu16.04的Docker組成,各自獨立輪詢周邊霧服務(wù)節(jié)點收集數(shù)據(jù),當該霧節(jié)點被另一Docker詢訪時,則自動跳過。同時也被動接收數(shù)據(jù),由負載均衡配置給相對空閑的Docker。詢訪連接有超時機制,后臺傳輸Docker或霧節(jié)點僵死,另一方到時可自動脫離,Docker僵死時其它Docker下次會來詢訪取走數(shù)據(jù),霧節(jié)點僵死則由Docker記錄并報告情況;后臺清洗集群由兩個ubuntu16.04的Docker組成,各自獨立輪詢并鎖定某一范圍數(shù)據(jù),執(zhí)行清洗工作,其它Docker會跳開該部分數(shù)據(jù)。
圖1中移動服務(wù)采用Android的Service程序?qū)崿F(xiàn),安裝入某廠家的智能手表,采集的數(shù)據(jù)先存儲在手表內(nèi),定時匯總后發(fā)送到中心云服務(wù)器同時檢查數(shù)據(jù)總量,超過限制的話就按時間順序刪除最舊的數(shù)據(jù)。智能設(shè)備采用華為的X1平板來測試,用隨機時間,把一定量的之前采集數(shù)據(jù)發(fā)送到中心云服務(wù)器,查看協(xié)作的效果。本原型用于體育院校體質(zhì)檢查。一臺性能好的PC打開桌面程序,在界面錄入人工采集獲得的數(shù)據(jù)的同時,開放后臺服務(wù)以接入其他霧終端采集數(shù)據(jù),包括PC設(shè)備和移動設(shè)備,使數(shù)據(jù)匯總到一起便于集中發(fā)送給中心云服務(wù)。如圖5所示,啟動http服務(wù),打開9002端口監(jiān)聽訪問。
圖5 周邊霧服務(wù)
在移動應(yīng)用中,Android的Activity僅用作為框架而不涉及業(yè)務(wù)邏輯,在其中嵌入WebView控件,包括WebView自帶的IndexedDB數(shù)據(jù)庫。用HTML+Javascript來實現(xiàn)數(shù)據(jù)采集和緩存,并實現(xiàn)手動或自動數(shù)據(jù)同步給移動服務(wù)(周邊霧服務(wù))。使用NW桌面程序作為框架,利用HTML+JavaScript來實現(xiàn)數(shù)據(jù)采集和緩存,并實現(xiàn)手動或自動數(shù)據(jù)同步給NW服務(wù)(周邊霧服務(wù)),如圖6所示。
圖6 NW桌面應(yīng)用
系統(tǒng)搭建完成后,通過自動發(fā)送或界面人工輸入的方式將上海體育學(xué)院體質(zhì)健康中心6 000條個體數(shù)據(jù)和新增的120名個體30天動態(tài)監(jiān)測數(shù)據(jù)、補充醫(yī)學(xué)體檢數(shù)據(jù)等注入到平臺中測試,排除網(wǎng)絡(luò)信號干擾后及系統(tǒng)bug之后的測試情況如下:
(1)測試中故意關(guān)閉MongoDB和MySQL的Docker,服務(wù)切換的瞬間響應(yīng)有1~5 s的延遲,但對后臺自動進程的工作毫無影響。故意關(guān)閉Web應(yīng)用的Docker,對當前的訪問有影響,有時候會出現(xiàn)訪問中止畫面,刷新后即恢復(fù)正常。關(guān)閉傳輸、清洗、分析的Docker會明顯增加處理的時間,但系統(tǒng)仍會完成處理任務(wù);
(2)測試中故意關(guān)閉周邊霧服務(wù)或周邊霧終端,則被關(guān)閉設(shè)備采集的數(shù)據(jù)會停止同步到中心云服務(wù),但之前通過該服務(wù)提交數(shù)據(jù)的終端會自動尋找列表中還能連上的其它周邊霧服務(wù)并提交數(shù)據(jù)。若配置有中心云服務(wù),最后也會嘗試連接中心云服務(wù);
(3)測試中模擬了不同廠家提供的數(shù)據(jù)解析程序。在一個Docker中配置MongoDB保存多個數(shù)據(jù)解析程序,并配置nodejs的HTTP服務(wù),通過帳號授權(quán)發(fā)布這些程序。實現(xiàn)了程序在網(wǎng)絡(luò)中的傳遞并保存到中心云服務(wù)和周邊霧服務(wù)的數(shù)據(jù)庫中,最后成功調(diào)用并解析數(shù)據(jù);
(4)經(jīng)過多組測試,目前系統(tǒng)運行穩(wěn)定。在從傳感器抓取數(shù)據(jù)、提交數(shù)據(jù)到中心云服務(wù)的正常情況下,耗時<3 s,數(shù)據(jù)倉庫歸類準確率可達到98.3%。即使數(shù)據(jù)鏈路發(fā)生擁堵導(dǎo)致數(shù)據(jù)堆積在霧服務(wù)節(jié)點中,在發(fā)現(xiàn)情況及時干預(yù)后數(shù)據(jù)可很快同步到中心云服務(wù);
(5)通過協(xié)議轉(zhuǎn)換,在不同品牌與類型的智能傳感器設(shè)備之間實現(xiàn)了搭橋通訊協(xié)議標準化,智能傳感器、PC端、移動端與中心云服務(wù)之間互訪穩(wěn)定,傳輸順暢;
(6)數(shù)據(jù)處理達到設(shè)計要求,可對個體與群體亞健康數(shù)據(jù)進行有效聚類、分層分析,輸出單一指標歷史曲線、多指標相關(guān)性分析,回歸基于有限可動態(tài)監(jiān)測指標的亞健康風(fēng)險評價模型函數(shù)(風(fēng)險度建模函數(shù)為FXD=CR*-0.6963+ATL*-0.0809+ UA*0.2915+BUN*-0.2931+TC*-0.1231+TG*0.08744+HDL*0.6363+LDL*0.08825+GLU*-0.1845+1.374)。
實驗結(jié)果表明,本文方法對數(shù)據(jù)歸類精確度高度達到了98.3%,滿足實時收發(fā)數(shù)據(jù)的要求。
基于物聯(lián)網(wǎng)和大數(shù)據(jù)處理技術(shù)的亞健康信息管理系統(tǒng)集合了多個系統(tǒng)的功能,獲取的原始數(shù)據(jù)類型復(fù)雜多樣,數(shù)據(jù)處理過程涉及到不同領(lǐng)域的關(guān)鍵技術(shù),如無線傳感技術(shù)、云計算以及Docker存儲技術(shù)等。通過本文的研究與實踐成功地用盡可能少的技術(shù)將上述技術(shù)集成到了一起,最終實現(xiàn)了對亞健康群體信息數(shù)據(jù)的有效分析與管理,助力亞健康個體早日回到健康狀態(tài)。由于平臺架構(gòu)還不夠成熟,在數(shù)據(jù)處理層次的劃分原則、標準和方法以及智能節(jié)點間協(xié)同與調(diào)度等方面,還需要進一步的深入研究。