周躍勇 李水龍 周施文 于偉恒
摘 ?要:地震預警系統(tǒng)作為復雜的大型應用系統(tǒng),需要支持多源異構(gòu)觀測數(shù)據(jù)的多種處理操作,客觀上要求系統(tǒng)具備因需而變的擴展性。在頂層規(guī)劃中引入基于軟件架構(gòu)層面的設計,通過對處理流程的宏觀歸納抽象,在較高級別上勾勒出系統(tǒng)的運行主線,給出系統(tǒng)運行狀況的全景圖,從而構(gòu)建一套易定制、易擴展,具有較強適應能力的分布式地震預警應用系統(tǒng)。
關鍵詞:地震預警;軟件架構(gòu);擴展演化
中圖分類號:TP311;P315 ? ? ? ?文獻標識碼:A文章編號:2096-4706(2021)14-0042-04
Abstract: As a complex large-scale application system, the earthquake early warning system needs to support multiple processing operations of multi-source heterogeneous observation data, which objectively requires the system to be scalable according to needs. In the top-level planning, the design based on the software architecture level is introduced. Through the macro induction and abstraction of the processing flow, the main line of the system operation is outlined at a higher level, and the panoramic picture of the system operation is given, so as to build a set of distributed earthquake early warning application system which is easy to customize, easy to expand and has strong adaptability.
Keywords: earthquake early warning; software architecture; extended evolution
0 ?引 ?言
地震預警系統(tǒng)作為復雜的大型應用系統(tǒng),通過對海量實時波形數(shù)據(jù)進行仿真變換、撿拾震相、量測幅值、烈度預測等多種處理操作,為重大工程提供緊急處置時間,有效減少大震中的人員傷亡,是防震減災事業(yè)實現(xiàn)跨越發(fā)展的客觀要求。
由于地震災害發(fā)生機理的復雜性,要求地震預警系統(tǒng)能夠融合多源異構(gòu)的觀測數(shù)據(jù),以及支持對觀測數(shù)據(jù)的多種處理操作;同時隨著地震科學研究的不斷進步,新的觀測數(shù)據(jù)格式以及新的處理算法會不斷地涌現(xiàn)。這些需求客觀上要求地震預警系統(tǒng)具備較好的擴展性,從而能以較小的代價支持系統(tǒng)的演化完善,隨需應變。
1 ?軟件架構(gòu)簡介
IEEE/ISO/IEC 24765-2017系統(tǒng)和軟件工程詞匯中將架構(gòu)定義為:架構(gòu)是以組件、組件之間的關系、組件與環(huán)境之間的關系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導上述內(nèi)容設計與演化的原理。Rational統(tǒng)一過程(Rational Unified Process, RUP)中的軟件架構(gòu)則定義為:軟件架構(gòu)包含了關于以下問題的重要決策,軟件系統(tǒng)的組織,選擇組成系統(tǒng)的結(jié)構(gòu)元素和它們之間的接口,以及當這些元素相互協(xié)作時所體現(xiàn)的行為;如何組合這些元素,使它們逐漸合成更大的子系統(tǒng),用于指導這個系統(tǒng)組織的架構(gòu)風格;這些元素以及它們的接口、協(xié)作和組合。
軟件架構(gòu)并不僅僅注重軟件本身的結(jié)構(gòu)和行為,還注重其他特性:功能、性能、彈性、重用、可理解性、經(jīng)濟和技術(shù)的限制及權(quán)衡,以及美學等。
總體來說,軟件架構(gòu)是對軟件系統(tǒng)的宏觀抽象概括。軟件架構(gòu)的設計主要受到功能需求、質(zhì)量屬性、約束條件等三方面的影響。
軟件架構(gòu)關注的是系統(tǒng)的處理流程,通過對處理流程的宏觀歸納抽象,在較高級別上勾勒出系統(tǒng)的運行主線,給出系統(tǒng)運行狀況的全景圖。
2 ?方案設計
地震預警系統(tǒng)的軟件架構(gòu)可為系統(tǒng)建設提供基礎,是系統(tǒng)的核心支撐。在架構(gòu)的設計中,除了描述出地震預警處理過程之外,重點則要考慮采取何種技術(shù)手段使地震預警系統(tǒng)具有類似“熱插拔”的組合能力,支持良好的定制化進而達到隨需應變的要求。
地震預警系統(tǒng)包含了數(shù)據(jù)實時處理、地震定位、震級確定、地震動影響場估計等應用。這些應用從功能目標產(chǎn)出等方面雖然存在較大差異,但是都屬于數(shù)字地震臺網(wǎng)綜合處理的一部分,在業(yè)務處理上還是存在著不少共性的。通過對這些處理過程的歸納抽象,可以發(fā)現(xiàn)這些應用基本都包含了數(shù)據(jù)接收、數(shù)據(jù)派發(fā)、通道處理、綜合處理、外圍應用等部分。因此通過對這些環(huán)節(jié)的分析研究,可以得到地震預警系統(tǒng)的軟件架構(gòu)。系統(tǒng)架構(gòu)設計示意圖如圖1所示。
2.1 ?數(shù)據(jù)接收
部分主要負責從實時流服務器和歸檔波形服務器接收獲取臺站的實時波形或是歸檔波形。這部分需要支持同時從多個流服務器中接收波形數(shù)據(jù),在設計中可以采用適配器(Adapter)模式來屏蔽不同波形服務器之間的差異性,如網(wǎng)絡流、歸檔文件、數(shù)據(jù)庫等,通過給每種波形服務器編寫對應的數(shù)據(jù)獲取適配器,可以為后續(xù)的地震應用處理提供統(tǒng)一格式的波形數(shù)據(jù),從而簡化地震業(yè)務處理的復雜程度。具體來說,數(shù)據(jù)接收部分設計需要考慮以下要求:
(1)支持多種來源、多種格式的數(shù)據(jù)。
(2)易于擴充,支持新的數(shù)據(jù)來源和數(shù)據(jù)格式。
(3)為后續(xù)的數(shù)據(jù)處理提供統(tǒng)一格式的波形數(shù)據(jù)。
實時地震數(shù)據(jù)接收的設計支持HTTP協(xié)議,能夠?qū)崟r接收Jopens6.0及以上版本流服務分發(fā)的MiniSeed格式的地震數(shù)據(jù),波形數(shù)據(jù)的接收采用多連接管理設計,如圖2所示。
部分設計代碼為:
miniSeedReceive = new MiniSeedReceive(); miniSeedReceive.initialize([configurationManager]);
miniSeedReceive.register([miniSeedDispatcher]);
……
miniSeedReceive.startReceive();
……
miniSeedReceive.stopReceive();
2.2 ?數(shù)據(jù)派發(fā)
部分從數(shù)據(jù)接收部分得到統(tǒng)一格式的波形數(shù)據(jù),傳遞給后續(xù)的通道處理部分,作為數(shù)據(jù)與處理之間的通道。數(shù)據(jù)派發(fā)部分從波形數(shù)據(jù)中解析出臺網(wǎng)、臺站、通道等信息,根據(jù)這些參數(shù)信息把數(shù)據(jù)發(fā)送給相應的波形數(shù)據(jù)處理對象。具體來說,數(shù)據(jù)派發(fā)部分設計需要考慮以下要求:
(1)根據(jù)需要創(chuàng)建波形數(shù)據(jù)的處理對象。
(2)按照波形數(shù)據(jù)通道信息,匹配波形數(shù)據(jù)的處理對象。
數(shù)據(jù)派發(fā)為系統(tǒng)后續(xù)的計算處理提供數(shù)據(jù)及臺網(wǎng)臺站參數(shù)信息,考慮到地震預警的時效性要求,數(shù)據(jù)派發(fā)的設計應充分考慮系統(tǒng)的處理性能,具體設計如圖3所示。
2.3 ?通道處理
部分負責對數(shù)據(jù)派發(fā)部分傳遞過來的連續(xù)波形數(shù)據(jù)進行仿真變換等預處理,并為后續(xù)的綜合處理提供預處理后的提煉信息。在這個部分數(shù)據(jù)從時間上連續(xù)不斷的波形數(shù)據(jù)轉(zhuǎn)變?yōu)樘幚砗蟮碾x散波形特征信息,如P波到時、S波到時等。因此這個部分是系統(tǒng)計算負荷比較大的地方,往往會成為系統(tǒng)的性能瓶頸所在,在設計中要注意采用合適的技術(shù)手段來保障系統(tǒng)處理的性能效率。
在實際的應用中,數(shù)字地震臺網(wǎng)存在著多種地震計類型,如速度型地震計、加速度型地震計以及位移型地震計等。不同區(qū)域的臺網(wǎng)情況并不完全一樣,為了使地震預警系統(tǒng)具有較好的適應性,需要能在配置信息中指定臺網(wǎng)中各個臺站通道的數(shù)據(jù)處理策略,從而達到較高的靈活性和較強的可用性。
為了能在運行時激活創(chuàng)建通道對應的波形數(shù)據(jù)處理對象,需要這些波形數(shù)據(jù)處理對象遵循統(tǒng)一規(guī)范的規(guī)約,對波形數(shù)據(jù)處理算法進行調(diào)用接口、輸入數(shù)據(jù)、輸出數(shù)據(jù)等方面的歸一化。在實際設計中,可以采用命令(Command)模式+數(shù)據(jù)容器的方式來解決此類問題,從而以較小的代價輕松地增加對波形數(shù)據(jù)的預處理,避免大而復雜的代碼塊,通過技術(shù)處理,達到形式上的統(tǒng)一,從軟件的角度以一致的方式處理波形數(shù)據(jù)的前期處理,從功能的依賴轉(zhuǎn)化為消息的依賴,從直接的依賴轉(zhuǎn)化為間接的依賴。具體來說,通道處理部分設計需要考慮以下要求:
(1)實現(xiàn)對波形數(shù)據(jù)的仿真、處理的邏輯簡化。
(2)實現(xiàn)對波形數(shù)據(jù)處理的標準規(guī)范。
(3)實現(xiàn)對波形數(shù)據(jù)不同處理的關聯(lián)解耦。
通道處理的設計應支持事件源的管理和通知功能,能夠接收MiniSeed格式的波形數(shù)據(jù),支持對波形數(shù)據(jù)的并發(fā)處理。通道處理是整個地震預警系統(tǒng)計算量最大的環(huán)節(jié),隨著地震臺站的不斷增加,通道處理的計算壓力也越來越大,我們以不同的通道處理器來處理不同類型的地震波形數(shù)據(jù),設計了統(tǒng)一的通道處理器接口IChannelProcesser。
部分設計代碼為:
public interface IChannelProcesser {
public String getVirtualType();
public synchronized String execute(
MiniSeedminiseed);
public void setEarthquakeCenter(
EarthquakeCentereqInfo);
public void doSomething(
IDataContainer container);
public void register(IDoSomething observer);
public void unregister(IDoSomething
observer);
……
}
同時還設計了通道包裝器,對通道處理器對象進行集合管理且與外圍環(huán)境進行交互,根據(jù)配置文檔和到來波形數(shù)據(jù)自動創(chuàng)建對應的通道處理器對象(對每個通道集只創(chuàng)建一次),并把波形數(shù)據(jù)分發(fā)給通道處理器對象,作為門面對象,負責與波形派發(fā)器及綜合處理器打交道。
通道包裝器的設計代碼為:
public class ChannelsWrapper {
public synchronized String execute(
MiniSeedminiseed);
public void setEarthquakeCenter(
EarthquakeCentereqInfo);
public void doSomething(
IDataContainer container);
public void setGeneralProcesser(
GeneralProcessergeneralProcesser);
}
2.4 ?綜合處理
部分接收從通道處理部分傳遞過來的預處理后的離散波形特征信息,根據(jù)業(yè)務功能和規(guī)則的要求,對這些信息進行集成綜合判定,從而給出對地震事件的處理結(jié)果。
在綜合處理部分,地震預警要完成地震事件判定、地震定位、震級估算、預警目標的烈度預測、可靠性判定等多種不同的處理工作。因此必須通過抽象封裝來提取不同業(yè)務應用綜合處理部分的共性信息,借助于命令模式+數(shù)據(jù)容器+工作流等技術(shù)手段來實現(xiàn)綜合處理的歸一化,從而允許根據(jù)業(yè)務功能的需要通過配置信息在運行時實現(xiàn)動態(tài)綜合處理。具體來說,綜合處理部分設計需要考慮以下要求:
(1)實現(xiàn)綜合處理步驟的標準規(guī)范。
(2)實現(xiàn)綜合處理步驟的關聯(lián)解耦。
(3)實現(xiàn)綜合處理步驟的動態(tài)組合。
綜合處理的設計可根據(jù)配置信息構(gòu)建實際的綜合處理器,管理與通道包裝器的外部關聯(lián),管理對綜合處理事件感興趣的觀察者,接收通道處理器觸發(fā)的事件,并調(diào)用實際綜合處理器對應的處理方法,總體設計如圖4所示。
綜合處理的主要功能類為GeneralProcesser,部分設計代碼為:
public RealGeneralor_OneSecond(StationLocation[]
vstationLocations, double[] vxylimit,
CityInformation[] cityInfors,StringeewResultPath,
String[] vgeneralCommands){
……
this.generalCommands=generalLayers(vgeneralCommands);
}
private IGeneralCommand[] generalLayers(
String[] generalCommands){
if(generalCommands==null || generalCommands.length==0)
return null;
IGeneralCommand[] results=
new IGeneralCommand[generalCommands.length];
for(inti=0;i<generalCommands.length;i++){
results[i]=(IGeneralCommand)ClassFactory.getInstance(
generalCommands[i]);
}
return results;
}
2.5 ?控制網(wǎng)關
部分實現(xiàn)數(shù)據(jù)在后臺處理計算與前臺應用展現(xiàn)之間的網(wǎng)絡傳遞。它從綜合處理部分接收地震事件的處理結(jié)果,經(jīng)由網(wǎng)絡通過TCP/IP協(xié)議發(fā)送給前端的信息發(fā)布、實時監(jiān)控等應用。借助于控制網(wǎng)關,可以簡化地震預警應用在信息網(wǎng)絡傳送方面的工作,使得這些應用的數(shù)據(jù)發(fā)送都建立在一個共同的基礎上,一方面減少了這些應用的代碼編寫工作量,另一方面通過功能復用也使得代碼的質(zhì)量更有保障。
控制網(wǎng)關主要包括服務端、客戶端兩個模塊。前者負責對需要傳送的數(shù)據(jù)進行打包封裝處理,將地震應用所產(chǎn)出的數(shù)據(jù)對象轉(zhuǎn)換為網(wǎng)絡上傳輸?shù)亩M制字節(jié)流,并發(fā)送給對應的客戶端;而后者則是完成相反的動作,將服務端通過網(wǎng)絡發(fā)送過來的二進制字節(jié)流轉(zhuǎn)換為地震應用所能理解的數(shù)據(jù)對象,供后續(xù)的發(fā)布展現(xiàn)等操作,實現(xiàn)地震預警由服務端向客戶端的信息發(fā)布。具體來說,控制網(wǎng)關的設計需要考慮以下要求:
(1)實現(xiàn)地震預警處理結(jié)果的網(wǎng)絡傳遞。
(2)為其他應用獲取處理結(jié)果提供規(guī)范標準的接口。
(3)為地震預警的分布式處理提供支持。
控制網(wǎng)關的設計以ISocketEvent為接口,服務端與客戶端分別以ConnectionServer和ConnectionClient實現(xiàn),總體設計如圖5所示。
2.6 ?外圍應用
包括實時監(jiān)控、人機交互、地震事件結(jié)果二次加工等工作。借助于控制網(wǎng)關實現(xiàn)了外圍應用與后臺計算處理的物理剝離,使得地震預警系統(tǒng)具有較好的演化能力和擴展性。在前文所述的各項措施的支持下,外圍應用具有以下特性:
(1)實現(xiàn)業(yè)務處理與界面邏輯的分離。
(2)為處理結(jié)果的后續(xù)應用提供統(tǒng)一的調(diào)度機制。
(3)支持任務實現(xiàn)的語言多樣性。
地震預警的外圍應用與核心處理系統(tǒng)剝離,例如,預警客戶端界面可通過控制網(wǎng)關實現(xiàn)與核心系統(tǒng)的連接,客戶端界面如圖6所示。
3 ?結(jié) ?論
借助于軟件架構(gòu)的支持,地震預警系統(tǒng)可以針對不同的應用,通過配置信息來控制組合對應的通道處理器序列及綜合處理器序列來實現(xiàn)所需的功能,借此構(gòu)建一套容易定制、易擴展,具有較強適應能力的分布式地震預警應用系統(tǒng)。
參考文獻:
[1] 馬強.地震預警技術(shù)研究及應用 [D].中國地震局工程力學研究所,2008.
[2] 馬強.強震觀測數(shù)據(jù)實時處理方法的研究 [D].中國地震局工程力學研究所,2002.
[3] 張紅才.地震預警系統(tǒng)關鍵技術(shù)研究 [D].中國地震局工程力學研究所,2013.
[4] 周施文,李水龍,于偉恒,等.“智能+”地震監(jiān)測預警技術(shù)平臺設計 [J].華南地震,2021,41(2):76-82.
[5] 張盼盼.高性能地震預警信息分發(fā)系統(tǒng)研究與開發(fā) [J].現(xiàn)代信息科技,2020,4(19):116-120+125.
作者簡介:周躍勇(1975—),男,漢族,福建連城人,工程師,碩士研究生,研究方向:地震預警與烈度速報軟件架構(gòu)設計與研發(fā)。