李浩涌
(昆明理工大學 信息工程與自動化學院,云南 昆明 650500)
關鍵字:太陽活動指數;預報系統;Spring Boot;微服務
太陽活動是指發生在太陽大氣層中的各種太陽活動現象,其具體表現形式包括太陽黑子浮現和太陽耀斑爆發等現象。太陽活動發生時,會影響地球的通信設備以及基礎設施,同時還會增強空間環境中的太陽輻射,從而影響人類的航海和天氣等國防和國民經濟的眾多領域[1]。太陽活動指數是對太陽活動的一種量化描述,常用的太陽活動指數包括太陽黑子數和F10.7射電流量等。太陽活動指數的預報是一種重要的預報類型,同時也是一種復雜的綜合系統。建立一個性能穩定、可擴展的預報系統,對于太陽活動的預報尤為重要。
目前對于太陽活動的預報系統大多采用傳統的單體服務[2-3]。傳統的單體架構可以在小型系統中運行良好,但是系統的復雜度會隨著業務功能的增多而急劇上升。業務代碼之間的耦合度會增多,從而對系統的穩定性造成影響。另外,系統無法靈活地對業務功能進行擴展。針對這一問題,提出使用微服務架構的思想來構建太陽活動指數預報系統。從預報系統的實際業務功能出發,將預報系統中不同的功能劃分為不同的服務,服務之間互不影響,且各個微服務可以同步開發[4],提高了系統的可用性與可擴展性。
微服務是一種基于面向服務架構(Service-Oriented Architecture,SOA)的軟件開發思想與技術。傳統的單體軟件架構習慣將所有的功能集合在一個系統中,之后將其打包為jar包或者war包部署在服務器中。系統中各功能的耦合度較高,而且不方便測試與部署。在系統出現故障時,單體架構的系統需要將整個項目進行調試分析后重新部署。微服務架構將不同的業務功能分解為不同的服務,每個服務獨立運行,服務之間使用遠程過程調用(Remote Procedure Call,RPC)進行相互調用。相對于傳統的單體架構,微服務架構具有以下優點[5]。
(1)降低了系統耦合性與復雜性。微服務通過對單體架構系統的細粒度拆分,降低了服務之間的耦合性;每個服務只關注特定業務的功能,降低了系統的復雜性。
(2)靈活性更高。不同的服務可以使用不同的開發語言來實現,可以結合具體的業務功能來選擇最優的技術路線。
(3)獨立部署。在微服務架構中,每個服務都是一個獨立的系統,可以獨立部署在服務器中。當某個服務需要迭代更新時,只需對當前服務進行重新部署即可。
(4)容錯性更強。每個服務可以部署多個備用服務,當一個服務出現故障時,可以利用注冊中心的健康監控機制將其下線,將服務請求發送到備用服務中。
微服務架構包含Spring Boot、Nacos及Spring Cloud Gateway這3個主要組件。
(1)Spring Boot。Spring Boot是Spring Cloud微服務架構體系的基石。Spring Boot繼承了Spring框架的控制反轉(Inversion of Control,IoC)與面向切面編程(Aspect Oriented Programming,AOP)的思想,同時提出“約定優于配置”的思想,優化了Spring應用復雜的配置。
(2)Nacos。在微服務系統中,一個服務會被拆分為多個微服務。服務可以分為服務消費者和服務提供者,當服務消費者請求服務提供者的功能時,為了防止服務消費者將請求發送到出現故障的消費提供者節點,需要服務注冊中心來判斷節點是否正常。Alibaba Nacos可以解決此類問題。Nacos可以統一管理系統的服務消費者與提供者,對服務進行統一配置管理,同時實時檢查服務的健康情況,阻止服務消費者向出現故障的節點發送請求。
(3)Spring Cloud Gateway。在服務進行請求操作時,存在權限以及請求協議的區別。不同的請求擁有不同的權限,在每次的請求調用中,服務提供者都需要對該請求進行判斷,增加了通信的成本。為了解決這一問題,采用Spring Cloud Gateway對請求進行統一的認證鑒權。
太陽活動指數預報系統功能需求包括用戶管理模塊、可視化模塊、太陽活動預報模塊、數據預處理模塊以及模型管理模塊。每個功能模塊在系統中作為一個單獨的微服務應用進行開發設計。系統功能模塊如圖1所示。

圖1 系統功能模塊圖
用戶管理模塊包括用戶管理、角色管理以及菜單管理等功能,可以為不同的用戶分配不同的角色,不同角色擁有不同的菜單權限。可視化模塊支持對歷史數據進行查詢,包括對太陽黑子、耀斑指數以及F10.7射電流量等太陽活動指數的歷史數據查詢,同時支持根據不同的時間查詢不同的太陽活動指數,并基于Echarts框架將其可視化。預報模塊是系統的核心功能,用戶在界面選擇要顯示的太陽活動指數預報值后,系統通過調用數據庫保存好的預測模型,在界面中顯示對太陽黑子和耀斑指數等太陽活動指數的預報值。數據預處理模塊可以對太陽黑子等序列數據進行平滑和去噪等預處理操作。模型管理模塊的主要功能是負責管理系統的預報模型。預報模型是指經過神經網絡訓練得到的后綴為h5的模型文件。當預報模型是傳統的差分整合移動平均自回歸模型(Autoregressive Integrated Moving Average model,ARIMA)等模型時,則使用Java中的Runtime類來調用python接口,得到預測值后將其保存到MySQL數據庫。系統管理員可以在模型管理模塊更換不同的預測模型。
本文提出的太陽活動預報系統設計架構如圖2所示。系統依次分為訪問層、展示層、網關層、微服務層以及持久層。預報系統主體框架采用Java語言開發;預報模型的構建則使用python語言編寫,通過前臺界面顯示;選擇MySQL作為系統數據庫,IDEA作為開發編輯器;選用Nacos作為系統的注冊中心,Spring Cloud Gateway作為系統的網關服務。

圖2 系統架構圖
訪問層代表系統所支持的訪問設備,包括個人電腦、移動設備以及其他終端設備。展示層負責系統與用戶之間的交互。本系統使用網頁界面進行系統展示,使用Bootstrap框架對頁面進行優化,利用Echarts開源庫對系統中的圖表進行前端渲染展現,展示層與后臺交互使用JQuery和Ajax技術。網關層選用Spring Cloud Gateway框架,負責對系統的請求進行統一的權限校驗。微服務層是系統的業務功能層,根據系統的業務功能將其拆分為不同的微服務,服務之間通過RESTful風格的請求來進行相互調用。使用Nacos注冊中心對系統中所有的微服務進行統一配置,統一管理服務之間的相互訪問請求。持久層代表對數據的持久化,具體包括使用MySQL數據庫對系統用戶的相關信息、太陽活動指數數據以及系統預報模型等進行存儲。采用redis數據庫作為系統的緩存數據庫,提高系統的訪問速度。同時,系統支持將太陽活動指數數據保存為csv格式,方便用戶下載使用。
本系統的整體框架選用Spring Cloud微服務架構體系,其中,注冊中心選用Nacos,網關選用Spring Cloud Gateway。預測模型使用python 3.0進行訓練,前臺顯示界面選用Bootstrap框架優化,使用Echarts框架對數據進行可視化展示。數據庫存儲使用MySQL數據庫,緩存使用redis數據庫。系統整體軟硬件如表1所示。

表1 系統環境清單
選用Nacos注冊中心作為預報系統的注冊中心,將不同的預測服務注冊到同一個服務中心。具體實現如圖3所示。其中,forecast-history代表數據可視化服務,forecast-user代表用戶管理服務,forecast-prediction代表太陽活動預報服務,forecsatpretreatment代表數據預處理服務,forecast-model代表預報模型管理服務。通過Nacos服務臺中的實例數與健康實例數,可以實時監測服務是否健康。

圖3 Nacos注冊中心
網關選用Spring Cloud Gateway框架實現。具體實現需要在服務項目的pom.xml文件中添加對Spring Cloud Gateway的依賴項,依賴代碼如下所示:
將Spring Cloud Gateway依賴加入到項目中后,需要在項目的配置文件中對Gateway的網關路由規則進行配置。配置文件規范遵循yml語法規范,具體配置規則如圖4所示。

圖4 Gateway配置文件
系統界面左側為預報系統的菜單欄,右側區域為系統頁面區域。注冊用戶登錄系統后,系統根據用戶角色所擁有的權限來展示不同的菜單。歷史數據可視化界面如圖5所示,用戶選擇展示時間和太陽活動指數類型后,系統基于Echarts框架將數據庫中的太陽活動指數以折線圖的形式動態顯示到頁面中。圖6為預報系統的模型管理界面,在這個界面可以增加和刪除預測模型、選擇啟用的預測模型。圖7為系統預報界面,用戶需要首先選擇查看的預報類型,選擇完預報的太陽活動指數后,系統可以根據訓練好的模型,對未來一段時間的太陽活動指數進行預報并顯示在頁面中,同時標記出預報的最大值和最小值。

圖5 歷史數據可視化界面

圖6 模型管理界面

圖7 系統預報界面
太陽活動的預測是一種復雜的業務功能。本文針對傳統單體架構的太陽活動預報系統的不足,提出了一種基于微服務的太陽活動指數預報系統。利用微服務的思想,將系統的各個功能分成不同的服務。各服務之間耦合度低,從而降低了預報系統的復雜性,提高了系統的穩定性與靈活性,方便后續對系統功能進行擴展和升級改進。后續考慮支持對太陽活動圖像的處理、預報以及使用爬蟲技術來獲取最新的太陽活動指數數據并加入到數據庫中,提高系統的自動化程度。