劉晨光,王新安,雍珊珊,徐伯星,張 丹,周康生
(1.北京大學深圳研究生院 集成微系統科學工程與應用重點實驗室,廣東 深圳 518055;2.武漢大學 計算機學院,湖北 武漢 430072)
地震是一種會給人類社會造成巨大經濟損失的自然災害。僅因地震導致的人員死亡數,就占全球各類自然災害造成的死亡人數總數的54%[1],堪稱群災之首。中國是世界上地震活動多發且受地震災害最為嚴重的國家之一[2]。為解決地震監測預測的難題,北京大學深圳研究生院集成微系統實驗室研制了AETA多分量地震監測系統,希望通過低成本、大區域、高密度的設備布設,建立完善的監測網絡,捕捉比較一致的前兆異常信號,服務于地震預測。
AETA系統由地聲傳感探頭[3-4]、電磁傳感探頭、數據處理終端[5]以及云端的應用服務器、數據存儲中心及數據分析系統組成。目前該系統已在國內地震多發的川滇藏和京冀粵臺等地區建立監測站點約200個 (見圖1黑點標記),云服務器將實時接收、處理海量監測數據并將其存儲至數據庫。由此帶來的海量監測數據傳輸、存儲和訪問問題,將會給后臺數據中心帶來巨大壓力。任何節點上的軟硬件異常或人為失誤,都可能導致實時數據入庫失敗或歷史數據丟失,給整個AETA監測系統帶來巨大的數據損失;在保證數據安全性的同時,數據中心還需要提供方便高效的數據訪問接口,服務于后期的數據分析。因此,如何保證海量監測數據的完整性和安全性,是AETA多分量地震監測系統連續可靠運行的關鍵;一套高可用、高安全的監測數據存儲方案,對AETA系統來說有著重大意義。

圖1 多分量地震監測系統AETA站點分布
基于以上背景,文中介紹了當前AETA系統數據安全存儲方案的設計和實現。該方案對系統中的原始數據和特征數據分別采用不同的存儲和備份方式,涉及本地RAID存儲、主從同步和分庫分表等技術;同時數據訪問中間件提供了統一的數據接口,向用戶屏蔽了數據源內部結構和操作,提升了系統安全性。
在AETA多分量地震監測系統中,監測數據首先由傳感探頭采集,依次經數據處理終端和應用服務器處理,最終存入數據存儲層。其數據流圖如圖2所示。
傳感探頭利用內部傳感器和放大調理電路獲取地震前兆信號,并通過TCP/IP協議將探頭原始數據發送至數據采集終端。
探頭原始數據在數據處理終端內首先進行窗口取樣,每3 min數據取1 min數據存入Buffer;Buffer內數據又分為兩路,一路經軟件低通濾波后成為低頻原始數據;另一路不進行濾波操作,直接成為全頻原始數據。低頻原始數據和全頻數據都將通過HTTP協議發送至云端應用服務器。

圖2 多分量地震監測系統AETA的數據流圖
低頻原始數據和全頻原始數據,被應用服務器端校驗接收后將再次分為兩路,一路直接作為原始數據存入數據存儲層,另一路經特定算法處理,提取出均值、振鈴計數和峰值頻率等特征值,并作為特征數據存入數據存儲層。經上述分層處理后,傳感器采集到的連續傳感信號,將最終被劃分為原始數據和特征數據,并計劃存入數據存儲層。原始數據和特征數據相關屬性如表1所示。
特征數據均是經處理的十進制數值型特征值,數據量較小;原始數據是未經特征值提取處理的二進制采樣數據,數據量較大,主要考慮原始數據的空間占用情況。原始數據單條記錄占用60 K字節(除全頻地聲原始數據單條數據占用300 K字節)。所有信號分量均按照1條/3 min的頻率采集入庫。那么可以計算得到單臺終端一天的原始數據將占用約230兆字節的空間。若考慮整個AETA地震監測網絡,原始數據的空間占用將更加龐大。

表1 AETA系統中的信號類型
AETA系統的數據存儲層,承擔著數據存儲和安全訪問的作用,是整個AETA系統中最重要的基礎支撐。為保證該系統設計和實現的科學性和可靠性,需結合業務特點對數據存儲層進行全方面的需求分析。
AETA系統數據存儲與安全的需求點主要有:
(1)數據存儲的可用性:按滿足AETA系統中期1 000臺設備、長期10 000臺設備同時運行的目標,數據存儲層需支持每日約230 GB,全年約84 TB規模數據的可控入庫。所以數據存儲服務的可用性成為關鍵。應首先保證服務高可用,不輕易宕機;其次大量終端的海量實時數據涌來時,數據存儲層需保證對這些數據的可靠接收。
(2)數據存儲的可靠性:數據存儲進該層后,應保證存量數據可靠地保存在物理介質中,不易因人為操作或外來災害而丟失數據。即使發生數據損失,也可以從備份中迅速恢復數據。該需求其實對數據備份和恢復機制的完善性提出了較高要求。
(3)數據訪問的高效性:除了存數據,數據存儲層的另一項重要職責是取數據。該層需保證向外取數據的接口便捷性和讀取高效性。
(4)數據訪問的安全性:向外提供數據訪問時,數據存儲層存在被不合法使用,造成數據泄露、更改或破壞的情況。目前對數據安全有較大威脅的攻擊手段主要有SQL注入[6]、比特幣勒索攻擊等。
數據存儲層設計時應考慮這些因素,設計適當機制以提升數據安全性。
設計的數據存儲方案如圖3所示。應用服務器送來的特征數據和原始數據,首先在該數據存儲層分開入庫保存,然后通過備份和同步等機制,最后經數據接口向外提供數據訪問服務。

圖3 數據存儲層架構
經應用服務器處理后的原始數據和特征數據,因其數據特點和應用場景不同,在數據存儲層中將被分別存儲到硬盤的文件系統和關系型數據庫MySQL。
原始數據是未經特征值提取處理的二進制采樣數據,單臺設備單天原始數據即達到230 M字節,空間占用較大;此外原始數據一般適用于細粒度的信號時域和頻域分析,系統中使用頻率較低。因此原始數據并不適合存儲于傳統的關系型數據庫中,否則隨數據量增大數據庫將出現較大的讀寫瓶頸。
為解決海量原始數據的存儲問題,參考了國家地震臺網和美國地震學聯合研究協會IRIS的處理辦法[7],不采用數據庫,而采用了文件系統存儲原始數據的方法。本設計將原始數據存儲在Linux系統的文件系統(目錄樹)中,存儲路徑類似于/Date/StationID/DataChannel/TimeStamp.data,最底層DataChannel目錄下將存儲該終端某一分量一天內的全部480條數據記錄(3分鐘一條記錄),每個文件的文件名含該記錄的準確時間戳。
特征數據是原始數據經算法處理后得到的數值型數據,分為均值、振鈴計數和峰值頻率等細分項目,可以有效體現前兆信號的時域或頻域特征。特征數據的數據量很小,頻繁用于波形繪制和數據分析,適合存儲在MySQL數據庫中。在MySQL建立四張特征數據表,分別用來存儲低頻電磁、全頻電磁、低頻地聲、全頻地聲四大類特征數據,每張特征數據表中建立時間戳(Time)和站點號(StationID)的聯合主鍵。
這種分離存儲的好處是,既可以支撐特征數據的快速頻繁訪問,也可以保證原始數據的可控存取;同時也避免了大量原始數據存入數據庫,給MySQL帶來存儲和訪問上的隱患。
任何一種物理存儲介質都無法保證數據的絕對可靠,現實生活中種種因素如自然災害、系統異常、人工操作失誤或黑客入侵,都可能導致數據損失的發生。因此數據備份是保證數據可靠性的關鍵性機制。針對云端文件系統中存儲的原始數據,設計了本地RAID配合熱備盤的數據備份方案。
RAID的全稱是redundant arrays of inexpensive disks,即容錯廉價磁盤陣列,簡稱磁盤陣列,是由UCLA研究人員[8]于1988年提出的。其原理是將多塊獨立的物理硬盤通過陣列控制器,整合成虛擬的單臺大容量硬盤,以提高硬盤的傳輸速率和容錯能力。按照數據分布和冗余方式,可以將RAID大致劃分為RAID0、RAID1、RAID3、RAID5、RAID10等不同等級,不同等級的RAID存儲具有不同的存儲特性和應用場景[9]。這里采用了兼具經濟實用性和數據安全性的RAID5備份原始數據。
將N塊(N≥3)容量為X的磁盤放入磁盤陣列柜,即可組建總容量為(N-1)*X的RAID5磁盤陣列;將磁盤陣列掛載至本地CentOS 6.5系統中,即可在操作系統中訪問該RAID文件系統。本地備份環境搭建完成,如何自動獲取云端原始數據并備份至磁盤陣列,是一個亟待解決的問題。設計了一套基于HTTP協議的C/S架構的原始數據備份工具。
原始數據備份工具是使用Java語言在MyEclipse平臺開發的,由Server端和Client端組成。Client端在Linux系統中每日定時啟動,通過HTTP協議向Server端發送近期原始數據的備份請求,Server端監聽到備份請求后,將相應的數據通過HTTP協議返回Client端。Client端獲得返回數據后,將文件存儲至本地磁盤陣列,并將文件路徑存入本地數據庫作為文件索引。至此,該系統便完成了原始數據定期下載至RAID5的工作。
MySQL中存儲的特征數據,是前兆信號分析中頻繁使用的數據,需要對這一部分結構化數據設計合理的備份方案。
首先MySQL中提供了內建的復制機制,可以實現從數據庫Slave與主數據庫Master的近實時數據同步。MySQL復制的基本原理是:Master將數據更改記錄到二進制日志中,Slave不斷追蹤該二進制日志的DDL和DML事件,并將這些事件重做至Slave中,這樣就實現了主庫和從庫數據的持續同步[10]。
該系統采用了一主一備的拓撲結構來實現MySQL復制,主庫僅提供地震數據的實時入庫功能,從庫通過同步機制獲取主庫數據,并對外提供準實時的特征數據訪問服務。該設計的好處在于,主庫宕機后可快速切換至從庫恢復服務,降低單點風險;還可將讀操作全部指向從庫,主庫僅負責數據插入,即讀寫分離,可大大降低Master的訪問壓力;此外復制也可以作為一種數據庫備份方式,一定程度上提升數據安全性。但是MYSQL復制不能代替備份,它對數據庫誤操作也無能為力,誤操作也會同步至從庫無法挽回。所以額外的數據庫備份機制也是必需的。
MySQL數據庫備份,按備份原理可分為邏輯備份和物理備份;按照備份策略可以分為全量備份、差異備份和增量備份[11]。該系統采用了長周期全量備份與短周期增量備份結合的策略,基于開源備份工具Percona XtraBackup每周進行兩次全量的物理熱備,并使用二進制日志binlog功能來進行增量備份。這種策略既保證了數據的安全性和高可恢復性,也避免了海量數據的備份對數據層正常業務的影響。
除上述機制外,AETA地震監測系統的以下設計也對數據安全有重要意義。
(1)數據存儲層的分區域水平分割:研究地震前兆信號時的一個重要因素是站點地理位置。按照地理位置的遠近,將系統內臺站劃分成西南區域、華南區域或華北區域等不同片區,同一片區的臺站數據統一存儲至同一數據服務器,即將數據存儲層分區域進行水平分割。這樣設計的好處是,采用了一種類似分布式的架構存儲地震監測數據,避免了單臺數據庫主機的讀寫壓力,也提升了數據的災備能力。
(2)應用層主機與存儲層主機的分離:應用層主機提供數據接收處理服務,存儲層主機提供關系型數據庫等存儲服務。將兩層服務分別部署在不同主機上,保證了數據接收處理模塊和數據存儲模塊的解耦,提升了系統架構的靈活性和安全性。
(3)基于云計算的基礎設施:AETA多分量地震監測系統的線上服務均基于阿里云服務搭建,主要包括彈性計算服務ECS和關系型數據庫服務RDS,具備彈性,高可靠,高可用的特點。此外,阿里云服務在態勢感知、緊急預警、訪問控制、防DDos攻擊等安全運維領域有獨特優勢,提升了系統的數據安全性。
AETA數據安全訪問中間件主要涉及3個模塊,數據訪問平臺、數據接口層和數據安全存儲層,如圖4所示。其中數據安全存儲層即上一節所述的數據安全存儲方案,所以這里將重點介紹數據訪問平臺和數據接口層。
數據訪問平臺是向用戶提供的地震數據查看工具,包括WEB端網頁和桌面客戶端軟件。WEB端網頁可向外提供簡單的特征和原始數據波形查看功能,也支持AETA系統的在線運維監控和管理功能;桌面客戶端軟件可提供更豐富的數據訪問和展示功能,如數據波形查看、數據下載、異常標注、地震事件查看和地圖服務等。
無論是WEB平臺還是桌面客戶端,都可劃分為展示層和后臺服務層兩層。展示層向用戶提供最直觀的頁面顯示和操作界面,可按月周日等不同時間跨度繪制某一臺站的數據波形,滿足最基本的數據分析需求;后臺服務層是數據訪問平臺的后端服務模塊,負責從數據接口層獲取配置信息和地震數據,并響應展示層的數據請求。后臺服務層主要包括地址解析和配置信息緩存等模塊。

圖4 數據訪問中間件的邏輯框圖
數據接口層是數據訪問平臺和數據安全存儲層的中間代理,避免了客戶端與數據源的直接異地相連,向用戶屏蔽了數據源的結構和操作。數據接口層由配置信息服務和地震數據服務兩部分組成。
配置信息服務提供用戶驗證、權限查詢和地震事件查詢等接口,保證了數據訪問平臺的基礎功能;更重要的是,配置信息服務還對外提供了地址解析接口,可以向數據訪問平臺提供待查詢站點的數據服務接口,數據訪問平臺再訪問該接口即可獲取指定臺站的地震數據,完成波形繪制工作。配置信息服務的底層是數據安全存儲層的一系列配置表,主要存儲了用戶權限、地震事件、站點信息和站點對應數據接口等信息。
地震監測數據服務是數據安全存儲層的對外數據接口,向用戶提供統一的數據訪問接口。該服務負責響應數據訪問平臺的數據請求,向后臺數據安全存儲層查取特征數據或原始數據,并將其返回給接口調用者。按區域不同該服務劃分為不同接口,如華北數據接口、西南數據接口和華南數據接口等,分別對應于后臺的數據安全存儲層的分區域存儲方案。
在上一節模塊設計的基礎上,本節將討論中間件處理數據查詢請求的詳細流程和原理。一個數據請求的全周期處理流程大致包括5個步驟,如圖4所示。
(0)用戶登錄:用戶使用本人賬號和密碼登錄系統。登錄認證通過后,數據訪問平臺將收到配置信息服務的地址解析信息,該信息將被緩存在用戶端應用中(客戶端或WEB端應用中)。
(1)本地地址解析:用戶選定某一臺站請求地震數據,用戶端應用將在緩存中檢索該臺站數據服務接口,若命中則直接跳至第4步進行數據請求。若未命中(如緩存過期,未與臺站數據進行及時同步),則跳至第2步。
(2)發送地址解析請求:緩存未命中時,數據訪問平臺將向配置信息服務的地址解析接口請求準確的數據服務接口信息。
(3)獲取數據接口信息:地址解析接口從數據安全存儲層拉取最新數據,將數據服務接口信息在POST響應中以HTTP的訪問URL字符串形式返回給用戶端應用。
(4)發送地震數據查詢請求:數據訪問平臺已獲取到準確的數據接口信息,將向該接口發送POST請求查詢某一臺站某一時間范圍內的地震數據。
(5)地震數據的返回和展示:地震數據接口從數據安全存儲層獲取指定數據后,向數據訪問平臺返回該數據。地震數據經前端渲染繪制成波形圖,在用戶展示層向用戶顯示出來。
以上步驟中,數據訪問平臺與配置信息服務和地震信息服務之間的交互,均基于事先定義好的交互協議。該交互協議定義,數據接口層作為WEB服務器監聽HTTP請求,而用戶端應用以POST請求形式,攜帶特定字段對該WEB服務器進行訪問,以實現用戶登錄、地址解析或數據查詢等任務。數據接口層處理好用戶端請求后,也會以POST方式向用戶端返回響應數據。
經前述框架設計后,中間件可進入方案實現階段。這里將分數據展示端和服務端對其具體實現進行簡要介紹。
數據展示端分為WEB端網頁和桌面客戶端。其中WEB端網頁是基于B/S架構,使用Java語言在MyEclipse平臺開發完成的,應用運行在Tomcat容器中,可對外提供簡單的數據波形查看功能。桌面客戶端軟件是基于C/S架構,使用C++語言在QT平臺開發完成的。該軟件基于QT的信號與槽機制[12]提供了直觀的桌面GUI,擁有更豐富的數據訪問和展示功能。
服務端產品包括配置信息服務aeta_middleware_AR和地震數據服務aeta_middleware_DS。這兩大服務均基于Spring框架的依賴注入機制,服務內所有對象均以bean的形式自動掃描并裝配給相關應用。無論是前端的HTTP請求對象還是后端的數據庫返回數據,均在Spring容器的管理下有機協調和運行,各層對象的調用完全面向接口,這樣就實現了系統的松耦合和非侵入特性[13]。
客戶端和服務端應用開發完成后,在AETA系統內進行上線部署。服務端aeta_middleware_AR和WEB網頁可部署在同一Linux主機內,便于WEB應用在同一主機內獲取快速的配置信息服務響應。用戶端在瀏覽器中驗證賬號密碼后,進入該應用的波形展示頁面,在左側導航欄中點選臺站即可查看該臺站的各數據分量波形。
數據服務aeta_middleware_DS在每一個分區域數據服務器中均有部署,每個aeta_middleware_DS均服務于后臺某一分區域數據源,為該數據源提供統一的對外數據訪問接口。在本地Windows系統內安裝客戶端,經驗證通過用戶同樣可進入數據波形查看界面。用戶點選某一臺站時請求波形時,客戶端和WEB端均完全按照圖4流程,通過中間件獲取波形數據并在前臺展示。
文中設計并實現了一套應用于AETA系統的數據存儲與安全訪問解決方案,已經應用于當前AETA系統約200個站點,總計約5 TB規模數據量的業務系統內,穩定運行6個月,數據備份有序進行,未出現數據存儲與安全事故。另外該系統在設計上考慮了更大規模數據量的情況,應對日后系統規模擴大具備良好的擴展性。數據按區域分布存儲在不同數據服務器,完善的備份和恢復機制保證了數據安全性。同時中間件的存在,使得數據的分布式高效訪問成為可能,數據的訪問安全性也得到有效提升。