周躍勇 周施文 李水龍 于偉恒



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