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