文/朱鋒
火電SIS系統是集生產數據采集、生產過程監控、性能指標計算、優化控制及過程管理為一體的自動化信息系統,對提高電廠運營效益具有重要意義。傳統的火電SIS系統都是采用單體應用架構進行開發,隨著系統數據量和訪問量的增加,單體應用架構已無法滿足業務需求。
微服務作為一種新興的軟件架構模式,它基于模塊化、 組件化等架構思想,具有易擴展、強解耦、去中心化等特點。它將單體應用拆分為多個高內聚低耦合的小型服務,服務間采用輕量級通信機制,可由不同的開發團隊對各服務進行開發維護,使大型復雜的應用可持續交付和持續部署。
Spring Cloud 框架擁有功能完善的、輕量級的微服務實現組件,主要組件如下:
(1)服務治理組件Eureka:實現各個微服務實例的自動化注冊和發現。
(2)負載均衡組件Ribbon: 實現客戶端負載均衡。
(3)網關組件Zuul:實現對服務路由轉發。
(4)熔斷降級組件Hystrix: 實現服務的限流、 熔斷和降級等功能。
(5)配置中心組件Conig Server:實現服務配置文件統一管理。
Docker是一種高級容器引擎,可以將應用程序和基礎設施層隔離,做到應用組件級別的“一次封裝,隨處運行”。
Docker 容器有鏡像、容器和倉庫等三個核心概念:
(1)鏡像,是一個特殊的文件系統,提供容器運行時所需的程序、庫、資源和配置等文件。
(2) 容器,是鏡像的實例,擁有獨立的文件系統、網絡配置和進程空間。
(3) 倉庫,是集中的存儲和分發鏡像的服務中心,通常一個倉庫包含同一軟件不同版本的鏡像。
基于微服務架構的火電SIS系統架構如圖1所示。 由圖1可知,火電SIS系統可拆分為以下服務:
(1)鑒權中心服務:將認證授權作為獨立的服務,提供訪問令牌和刷新令牌等接口服務。
(2)實時數據服務:將對實時數據庫的訪問作為獨立的服務,提供讀寫實時值和歷史值等接口服務。
(3)統計計算服務:將對指標的計算統計封裝為獨立的服務,提供按各種方式對指標統計查詢接口服務。
(4)數據緩存服務:將對緩存的讀寫操作封裝為獨立的服務,提供對各種數據格式的緩存讀寫接口服務。
(5)業務數據服務:將業務數據的訪問封裝為獨立的服務,提供各種業務數據接口服務。
本文系統基于JDK 1.8,使用IDEA 2018進行開發,采用Docker容器對各服務進行部署。系統主要模塊主要實現過程如下:
(1)鑒權中心:采用Spring Security框架,基于OAuth2進行開發。網關Zuul接收到客戶端請求后,Zuul通過向鑒權中心發出請求對API客戶端進行認證鑒權。
(2)注冊中心:采用Spring Cloud Eureka進行實現,各服務向服務作為Eureka Client注冊中心Eureka Server注冊自己。
(3)配置中心:采用Spring Cloud Config進行實現,使用Git存儲配置信息,對配置信息進行版本管理。并通過Spring Cloud Bus廣播配置文件的更改,實現配置的動態刷新。
(4)日志中心:采用主流的ELK套件進行實現,即Elasticserach、Logstash和Kibana。Elasticsearch是用作日志記錄服務器;Logstash聚合服務日志并寫入Elasticsearch的日志流水線;Kibana是Elasticsearch的可視化工具。

圖1:火電SIS系統微服務架構
(5) Docker 部署:通過編寫Docker 容器編排docker-compose.yml文件,為各服務容器設置相應的網絡環境和參數配置,將各服務容器作為整體進行部署。
本文將微服務架構應用于火電SIS系統建設中,將系統拆分為獨立的服務后,基于Spring Cloud框架進行系統的開發實現,使得火電SIS系統具有高度的擴展性和容錯性。并使用Docker容器進行自動、快速獨立的部署所有微服務,提升了系統開發、測試和部署運維一體化的能力。