周躍勇 周施文 李水龍 于偉恒
摘? 要:地震預(yù)警是減輕地震災(zāi)害的有效途徑之一。地震預(yù)警系統(tǒng)的部署不僅包含地震預(yù)警處理程序的安裝,應(yīng)用運行所依賴支持項的部署,還包含監(jiān)測臺網(wǎng)配置信息、預(yù)警處理參數(shù)信息、預(yù)警發(fā)布規(guī)則等大量參數(shù)的設(shè)置。系統(tǒng)部署過程繁瑣,運維壓力較大。文章探討了利用容器虛擬化Docker技術(shù),實現(xiàn)地震預(yù)警系統(tǒng)的一次打包隨處運行,以此提升部署實施的運維效率,減輕運維人員的工作壓力。
關(guān)鍵詞:地震預(yù)警;容器虛擬化;Docker鏡像
中圖分類號:TP311? 文獻標識碼:A 文章編號:2096-4706(2023)01-0087-03
Containerized Deployment of Earthquake Early Warning System
ZHOU Yueyong, ZHOU Shiwen, LI Shuilong, YU Weiheng
(Fujian Earthquake Agency, Fuzhou? 350003, China)
Abstract: Earthquake early warning is one of the effective ways to reduce earthquake disasters. The deployment of the earthquake early warning system not only includes the installation of the earthquake early warning processing program, the deployment of the support items on which the application operation depends, but also includes the setting of a large number of parameters such as monitoring network configuration information, early warning processing parameter information, early warning release rules, etc. The system deployment process is cumbersome and the operation and maintenance pressure is high. This paper discusses how to use the container virtualization Docker technology to realize the “one-time packaging and operation everywhere” of the earthquake early warning system, so as to improve the operation and maintenance efficiency of deployment implementation and reduce the work pressure of the operation and maintenance personnel.
Keywords: earthquake early warning; container virtualization; Docker image
0? 引? 言
在地震波中,破壞性弱的P波傳播速度要比破壞性強的S波傳播速度快,而電磁波的傳播速度遠快于地震波。地震預(yù)警技術(shù)利用這三者的時間差,做到在S波到達某目標區(qū)前向該目標區(qū)發(fā)出地震預(yù)警信息,使不同的目標區(qū)能有幾秒至幾十秒的地震應(yīng)急處置時間,從而減輕人員傷亡和財產(chǎn)損失。地震預(yù)警系統(tǒng)就是實現(xiàn)地震預(yù)警的一個技術(shù)系統(tǒng),該系統(tǒng)可實時獲取并處理監(jiān)測區(qū)域范圍內(nèi)地震監(jiān)測臺站的波形數(shù)據(jù)。若監(jiān)測區(qū)域內(nèi)有地震發(fā)生,該系統(tǒng)可通過震中附近少量監(jiān)測臺站獲取到的P波數(shù)據(jù),初步估算出地震三要素(即發(fā)震時刻、震中、震級)以及S波到達不同目標區(qū)的時間和可能造成的影響(即烈度),然后根據(jù)烈度等級對目標區(qū)發(fā)布地震預(yù)警信息(包括地震三要素、本地預(yù)估烈度和預(yù)警時間等)。
目前在線生產(chǎn)的地震預(yù)警系統(tǒng)不僅包含地震預(yù)警的核心處理程序,還包含監(jiān)測臺網(wǎng)的配置信息、預(yù)警處理的參數(shù)信息、預(yù)警產(chǎn)出的配置信息、預(yù)警目標的配置信息以及預(yù)警發(fā)布的規(guī)則閾值等數(shù)據(jù)。對這些配置信息進行處理時的一個疏忽或錯誤,都可能導(dǎo)致地震預(yù)警的失?。ū热缯`報或漏報),造成非常不利的社會影響。地震預(yù)警處理程序的平穩(wěn)運行有賴于底層操作系統(tǒng)和基礎(chǔ)軟件的支撐。部署地震預(yù)警系統(tǒng)時,運維人員首先需要在物理機器上安裝合適的操作系統(tǒng)以及相應(yīng)的支持軟件,根據(jù)技術(shù)指南把地震預(yù)警處理程序和相關(guān)的配置文檔安裝到指定的目錄位置,并根據(jù)監(jiān)測區(qū)域的實際情況和預(yù)警要求,修改相應(yīng)的配置信息。隨著地震監(jiān)測臺站數(shù)量的不斷增加,地震預(yù)警系統(tǒng)性能的不斷提升,系統(tǒng)的復(fù)雜度也日益增大,對于系統(tǒng)運維人員來說,保障地震預(yù)警系統(tǒng)7×24小時穩(wěn)定運行和有效產(chǎn)出,并不是一件輕松的事情。因此,為了支持地震預(yù)警系統(tǒng)的大范圍部署和長期運行,有必要尋找一種簡單易行的系統(tǒng)部署實施方案。
1? 容器虛擬化技術(shù)
如圖1所示為虛擬化技術(shù)與容器技術(shù)的部署示意圖,從圖中可以看出,容器技術(shù)與傳統(tǒng)虛擬化技術(shù)有很大不同。傳統(tǒng)的虛擬化技術(shù)通過管理程序,將一臺物理主機虛擬化為多臺邏輯計算機,并分別配置虛擬資源(如CPU、內(nèi)存等),每一個邏輯計算機擁有獨立的操作系統(tǒng),應(yīng)用在虛擬機上運行,相互隔離。而容器虛擬化技術(shù)將應(yīng)用程序或服務(wù)、依賴項及配置(抽象化為部署清單文件)一起打包為容器鏡像,容器的運行不會獨占操作系統(tǒng),運行在相同宿主機上的容器共享一個操作系統(tǒng)。
容器與底層共享操作系統(tǒng),省去了管理程序的額外開銷,降低了系統(tǒng)負載,在同等條件下可以支持更多的應(yīng)用運行,從而可以充分利用系統(tǒng)資源。容器可以根據(jù)應(yīng)用的不同精確地分配CPU、內(nèi)存等系統(tǒng)資源,應(yīng)用之間不會相互影響,有效地優(yōu)化資源的使用。我們還可以利用容器編排技術(shù)實現(xiàn)應(yīng)用在集群上隨業(yè)務(wù)負荷變化而自動擴縮容?;谌萜骷夹g(shù)的交付流程,可以加快微服務(wù)的落地,更好地以應(yīng)用為中心。
在容器虛擬化技術(shù)的應(yīng)用中,開發(fā)、測試和生產(chǎn)都是基于同一個鏡像。具體來說,就是開發(fā)人員使用鏡像實現(xiàn)標準開發(fā)環(huán)境的構(gòu)建并在該環(huán)境下進行開發(fā),開發(fā)完成后將應(yīng)用和完整環(huán)境打包封裝成鏡像進行遷移,測試人員直接部署鏡像進行測試,測試通過后的鏡像再交由運維人員部署到線上投產(chǎn)。這種基于鏡像的部署模式,實現(xiàn)了應(yīng)用的一次打包隨處運行,基本消除了線上線下的運行環(huán)境差異,保證了應(yīng)用程序整個生命周期環(huán)境的一致性,解決了傳統(tǒng)運維模式下應(yīng)用運行在不同部署節(jié)點上由于運行環(huán)境組成缺失或版本不一致導(dǎo)致的問題,大大簡化了持續(xù)集成、測試和發(fā)布的過程,為標準化管理提供了便利。
2? Docker技術(shù)
Docker是一個專為開發(fā)者和系統(tǒng)管理員設(shè)計、以Docker容器作為資源分割和調(diào)度的基本單位,同時封裝應(yīng)用及其運行時環(huán)境,可用于構(gòu)建、發(fā)布和運行分布式應(yīng)用的平臺。Docker平臺包含兩個部分:一是負責創(chuàng)建與運行容器的Docker引擎;二是用于發(fā)布容器的云服務(wù)Docker Hub。Docker為用戶提供高度應(yīng)用程序訪問權(quán)限、版本控制、快速部署和分發(fā)的服務(wù)。Docker技術(shù)的核心概念有三個:一是鏡像(即創(chuàng)建Docker容器的基礎(chǔ)),類似虛擬機鏡像;二是容器,類似一個輕量級的沙箱,用來運行和隔離應(yīng)用;三是倉庫,類似代碼倉庫,是Docker集中存放鏡像文件的場所。
使用Docker容器有如下好處。
2.1? 模塊化
Docker容器化方法非常注重在不停止整個應(yīng)用的情況下單獨截取部分應(yīng)用進行更新或修復(fù)的能力。除了這種基于微服務(wù)的方法,還可以采用與面向服務(wù)的架構(gòu)(SOA)類似的方法,在多個應(yīng)用間共享進程。
2.2? 層和鏡像版本控制
每個Docker鏡像文件都包含多個層,這些層組合在一起,構(gòu)成單個鏡像。每當鏡像發(fā)生改變時,就會創(chuàng)建一個新的鏡像層。用戶每次發(fā)出命令(例如run或copy)時,都會創(chuàng)建一個新的鏡像層。Docker重復(fù)使用這些層來構(gòu)建新容器,借此幫助加快流程構(gòu)建。鏡像之間會共享中間變化,從而進一步提升速度、規(guī)模及效率。版本控制是鏡像層本身自帶的能力,每次發(fā)生新的更改時,會獲得一個內(nèi)置的更改日志,實現(xiàn)對容器鏡像的全盤管控。
2.3? 回滾
回滾可以說是層中最值得一提的功能。每個鏡像都擁有多個層,可以通過回滾,返回之前的版本。這一功能還支持敏捷開發(fā)方法,幫助持續(xù)實施集成和部署(CI/CD),使其在工具層面成為一種現(xiàn)實。
2.4? 快速部署
啟動和運行新硬件,實施部署并投入使用,這在過去一般需要數(shù)天時間,而基于Docker容器的部署方式能夠在幾秒鐘之內(nèi)完成部署。添加或移動容器不需要關(guān)閉/啟動操作系統(tǒng),大幅縮短了部署時間;而為每個進程構(gòu)建容器,則可以快速將這些進程應(yīng)用到新的應(yīng)用程序中。除此之外,得益于這種部署速度,相關(guān)人員可以輕松無虞、經(jīng)濟高效地創(chuàng)建和銷毀容器創(chuàng)建的數(shù)據(jù)。
概括來說,Docker技術(shù)的優(yōu)點是可以實現(xiàn)更快速的交付和部署、更輕松的遷移和擴展、更高效的資源利用、更簡單的更新管理。Docker技術(shù)是一種基于微服務(wù),更加精細、可控的技術(shù),可為企業(yè)提供更高的效率價值。
3? 應(yīng)用的容器化
容器能夠簡化應(yīng)用的構(gòu)建、部署和運行過程。應(yīng)用的容器化過程主要是指創(chuàng)建包括應(yīng)用描述、依賴以及如何運行應(yīng)用等信息的Dockerfile文件,執(zhí)行命令“docker image build”將應(yīng)用程序構(gòu)建到Docker鏡像中。通過命令“docker container run”從鏡像啟動容器。鏡像可以理解為一種構(gòu)建時(build-time)結(jié)構(gòu),而容器可以理解為一種運行時(run-time)結(jié)構(gòu),即可以通過同一個鏡像創(chuàng)建運行多個容器,如圖2所示。
地震預(yù)警系統(tǒng)目前主要有實時波形數(shù)據(jù)接收、波形數(shù)據(jù)質(zhì)量監(jiān)測、震相自動撿拾、地震事件判定、地震定位、地震預(yù)警信息發(fā)布等14個模塊,系統(tǒng)容器化示意圖如圖3所示。
3.1? 構(gòu)建應(yīng)用系統(tǒng)鏡像
鏡像由多個層組成,每層疊加之后,從外部看來就如一個獨立的對象。鏡像內(nèi)部是一個精簡的操作系統(tǒng)(OS),同時還包含應(yīng)用運行所需的文件和依賴包。因為容器的設(shè)計初衷就是快速和小巧,所以鏡像通常都比較小。
地震預(yù)警系統(tǒng)用于構(gòu)建鏡像的上下文目錄內(nèi)容,如圖4所示。
其中,bin子目錄用于存放地震預(yù)警應(yīng)用的jar包文件,conf子目錄用于存放地震預(yù)警系統(tǒng)的配置文檔,lib子目錄用于存放應(yīng)用依賴項的jar包文件,log子目錄用于存放應(yīng)用的日志信息。eew_progress_start.sh是用于啟動地震預(yù)警應(yīng)用的命令文件,Dockerfile文件是用于指導(dǎo)構(gòu)建地震預(yù)警系統(tǒng)鏡像的描述文件,其內(nèi)容如圖5所示。
在鏡像構(gòu)建上下文目錄下,運行命令“docker image build -t eew_progress:latest”構(gòu)建地震預(yù)警系統(tǒng)鏡像。構(gòu)建完成后,可以通過命令“docker image inspect eew_progress:latest”來確認剛剛構(gòu)建的鏡像配置是否正確。
3.2? 配置信息獲取
容器從地震預(yù)警鏡像啟動后,地震預(yù)警應(yīng)用所需的配置信息存放在/conf子目錄里。
如果有些配置信息需要根據(jù)運行當時的情況來確定,則可以在容器啟動后,對/conf子目錄里對應(yīng)的配置文檔進行修改,從而在應(yīng)用運行時使用最新的配置信息。這些修改在容器刪除后也隨之丟失。
如果有些配置信息發(fā)生了持久的改變(如臺網(wǎng)增加了新的臺站,或有的參數(shù)有了更好的閾值設(shè)置等),可以根據(jù)構(gòu)建地震預(yù)警鏡像所述,更新構(gòu)建的上下文目錄內(nèi)容,重新生成地震預(yù)警鏡像并分發(fā)。
3.3? 波形數(shù)據(jù)接收
地震預(yù)警應(yīng)用要從外部波形流服務(wù)器上實時接收臺站波形數(shù)據(jù),供后續(xù)的仿真環(huán)節(jié)使用。容器從地震預(yù)警鏡像啟動后,通過主機的iptables規(guī)則實現(xiàn)NAT轉(zhuǎn)換,可以從容器內(nèi)部訪問外部的網(wǎng)絡(luò)。
3.4? 產(chǎn)出結(jié)果共享存儲
地震預(yù)警應(yīng)用的產(chǎn)出,一方面持久化在存儲設(shè)備上,另一方面通過網(wǎng)絡(luò)端口對外提供共享服務(wù)。
每個容器都被自動分配了本地存儲。默認情況下,這是容器全部文件和文件系統(tǒng)保存的地方。非持久化存儲屬于容器的一部分,并且與容器的生命周期一致——容器創(chuàng)建時會創(chuàng)建非持久化存儲,同時該存儲也會隨容器的刪除而刪除。
容器從地震預(yù)警鏡像啟動后,目錄結(jié)構(gòu)包含了/log子目錄,用于存儲地震預(yù)警應(yīng)用產(chǎn)生的日志信息,供調(diào)試分析之用。這部分信息不能隨容器的刪除而刪除,必須以持久化存儲的方式來處理。在容器啟動時指定“--mount source=eew_process_log, target=/log”參數(shù),可以為地震預(yù)警日志信息指定持久化的卷eew_process_log,允許在容器被刪除后依然可以對日志信息進行分析處理。
在配置文檔和Dockerfile里,指定了地震預(yù)警應(yīng)用對外提供共享服務(wù)的端口,在啟動容器時可通過“--publish 容器端口:主機端口”參數(shù),把容器里設(shè)置的共享服務(wù)端口映射到主機的網(wǎng)絡(luò)端口,從而允許外部用戶通過訪問主機端口來獲取容器端口的服務(wù)內(nèi)容,實現(xiàn)地震預(yù)警信息的網(wǎng)絡(luò)發(fā)布。
4? 結(jié)? 論
Docker技術(shù)在金融、互聯(lián)網(wǎng)等行業(yè)的應(yīng)用已經(jīng)很成熟,但在地震行業(yè)的應(yīng)用尚不成熟。本文簡要介紹了容器化與Docker技術(shù),并利用Docker技術(shù)初步實現(xiàn)了地震預(yù)警系統(tǒng)的應(yīng)用容器化,歸納了地震預(yù)警應(yīng)用容器化的關(guān)鍵命令。利用容器虛擬化技術(shù),實現(xiàn)地震預(yù)警系統(tǒng)的一次打包隨處運行,減輕運維人員的工作壓力,提升部署實施的運維效率。后續(xù)將對地震預(yù)警系統(tǒng)容器化進行完善和優(yōu)化,并研究利用Kubernetes+Docker實現(xiàn)大規(guī)模場景下的多服務(wù)部署和管理。
參考文獻:
[1] 楊保華,戴王劍,曹亞侖.Docker技術(shù)入門與實戰(zhàn) [M].北京:機械工業(yè)出版社,2015.
[2] 奈吉爾·波爾頓.深入淺出Docker [M].劉瑞豐,劉康,譯.北京:人民郵電出版社,2021.
[3] 阿德里安·莫阿特.Docker開發(fā)指南 [M].黃彥邦,譯.北京:人民郵電出版社,2019.
[4] 蔣彪.Docker微服務(wù)架構(gòu)實戰(zhàn) [M].北京:電子工業(yè)出版社,2018.
[5] 郭甲戌,胡曉勤.基于Docker的虛擬化技術(shù)研究 [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017(10):28-29.
[6] 高禮,高昕.Docker技術(shù)在軟件開發(fā)過程中的應(yīng)用研究 [J].軟件,2016,37(3):110-113.
作者簡介:周躍勇(1975.02—),男,漢族,福建連城人,工程師,碩士,研究方向:地震監(jiān)測預(yù)警技術(shù)研發(fā);通訊作者:周施文(1986.10—),女,漢族,江蘇東臺人,工程師,碩士,研究方向:地震監(jiān)測預(yù)警技術(shù)研發(fā)。
收稿日期:2022-05-15
基金項目:福建省地震局科技基金專項地震預(yù)警與烈度速報系統(tǒng)的容器化部署(SF202206)