王 琪,盧 軍
(武漢郵電科學研究院湖北武漢430074)
隨著我國經(jīng)濟的快速增長,各項建設(shè)都取得了巨大的成就,但與此同時,也付出了巨大的資源與環(huán)境破壞的代價,兩者之間的矛盾日益尖銳,這種狀況與資源的不合理利用和能源的嚴重浪費直接相關(guān)[1]。國家“十三五”規(guī)劃強調(diào)所有的工廠與企業(yè)要綠色發(fā)展,促進人與自然的和諧共生。因此打造一個能效管理系統(tǒng)對工廠、企業(yè)的能源利用進行實時監(jiān)控,實現(xiàn)最大限度的能源利用,避免資源浪費是至關(guān)重要的。同時又考慮到企業(yè)和工廠的不斷發(fā)展,為了系統(tǒng)的持續(xù)可用性[4],實現(xiàn)一個基于分布式架構(gòu)的能效管理系統(tǒng)是非常有必要的。
系統(tǒng)采用Java語言,基于Dubbo框架設(shè)計了一套集權(quán)限管理、設(shè)備管理、數(shù)據(jù)采集、數(shù)據(jù)分析、設(shè)備報警、報表產(chǎn)出以及日志記錄與一體的分布式架構(gòu)能效管理系統(tǒng),滿足企業(yè)的需求。
Dubbo是一個擴展性和靈活性都很好的服務(wù)管理框架[7]。其主要核心部件是服務(wù)運行容器、服務(wù)注冊中心、服務(wù)提供者、服務(wù)消費者、服務(wù)監(jiān)控中心。
ZooKeeper是為分布式應(yīng)用程序提供高性能協(xié)調(diào)服務(wù)的工具集合,它包含一個簡單的原語集,分布式應(yīng)用程序可以基于它實現(xiàn)配置維護、命名服務(wù)、分布式同步、組服務(wù)等,在本系統(tǒng)中被用作Dubbo的服務(wù)注冊中心,用以協(xié)調(diào)分布式應(yīng)用[10]。
MySQL是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),因為其體積小、速度快、再加上開放源碼這一特點,很多網(wǎng)站在開發(fā)時都使用MySQL作為網(wǎng)站數(shù)據(jù)庫。
整個系統(tǒng)主要分為5層,分別為Webserver入口、控制層、中間件服務(wù)層、微服務(wù)層和數(shù)據(jù)存儲層??刂茖釉谡麄€系統(tǒng)中就是最大的服務(wù)消費者,調(diào)用所有提供者的服務(wù),返回前端Web頁面,中間件服務(wù)層就是對整個能效管理系統(tǒng)所用到的中間件管理,微服務(wù)層主是業(yè)務(wù)邏輯和系統(tǒng)功能需求的實現(xiàn),數(shù)據(jù)存儲層用來存儲、讀寫數(shù)據(jù)。系統(tǒng)整體設(shè)計架構(gòu)如圖1所示。
圖1 能效管理系統(tǒng)整體設(shè)計架構(gòu)圖
微服務(wù)層由基礎(chǔ)微服務(wù)、權(quán)限微服務(wù)、日志微服務(wù)、數(shù)據(jù)微服務(wù)、設(shè)備微服務(wù)、采集微服務(wù)、分析微服務(wù)、報警微服務(wù)、報表微服務(wù)組成。對于控制層Webserver來說,所有的微服務(wù)都是其服務(wù)提供者,自己是服務(wù)消費者。但在微服務(wù)層內(nèi)部,我們根據(jù)系統(tǒng)業(yè)務(wù)的實際需求,微服務(wù)之間也有服務(wù)提供者和服務(wù)消費者之分。每一個微服務(wù)既可以作為服務(wù)提供者也可以作為服務(wù)消費者。
根據(jù)實際的需求分析,整個系統(tǒng)模塊設(shè)計如圖2所示。
圖2 能效管理系統(tǒng)模塊結(jié)構(gòu)圖
設(shè)計系統(tǒng)采用MySQL作為數(shù)據(jù)庫存儲業(yè)務(wù)數(shù)據(jù),Mongodb作為文件數(shù)據(jù)庫存儲文件,Redis作為輔助用來緩存數(shù)據(jù),減少數(shù)據(jù)庫的調(diào)用次數(shù),提高數(shù)據(jù)讀寫速度。系統(tǒng)將采用分庫設(shè)計,每個微服務(wù)使用自己獨立的數(shù)據(jù)庫,如圖3所示。
圖3 能效管理系統(tǒng)數(shù)據(jù)庫設(shè)計圖
每一個微服務(wù)對應(yīng)一個屬于自己的獨立數(shù)據(jù)庫,將自己的業(yè)務(wù)數(shù)據(jù)存到數(shù)據(jù)庫表中。同時為了提高系統(tǒng)讀取效率,將復(fù)雜、常用的數(shù)據(jù)存入Redis緩存中,若是需要直接從Redis中讀取,不再操作數(shù)據(jù)庫,提高系統(tǒng)讀寫速度。對于系統(tǒng)中的圖片、文檔等文件類型數(shù)據(jù),用Mongodb統(tǒng)一存取。
根據(jù)對整個系統(tǒng)的設(shè)計,系統(tǒng)主要可以從以下4個方面來實現(xiàn),中間件服務(wù)的搭建,Webserver、微服務(wù)以及數(shù)據(jù)庫的實現(xiàn)。
系統(tǒng)中用到的中間件主要是ZooKeeper與Dubbo,并且所有中間件服務(wù)都在Linux服務(wù)器上部署。
在系統(tǒng)中ZooKeeper用作Dubbo的注冊中心,實現(xiàn)Dubbo服務(wù)提供者的注冊和服務(wù)消費者的訂閱,主要配置如圖4所示。
圖4 ZooKeeper主要配置圖
配置好之后,在ZooKeeper服務(wù)bin目錄下打開命令窗口輸入命令“./zkServer.sh start”后,ZooKeeper即可啟動。
Dubbo是整個系統(tǒng)的基礎(chǔ),所有的微服務(wù)都是通過Dubbo來注冊和運行。Dubbo配置如圖5所示。
圖5 Dubbo主要配置圖
注冊中心地址就是之前搭建的ZooKeeper服務(wù)的地址,root和guest用戶是登錄到Dubbo調(diào)控中心的用戶名和密碼。將Dubbo服務(wù)放到tomact webapp目錄下,在bin目錄中打開命令窗口輸入命令“./startup.sh”即可啟動。
Webserver是整個系統(tǒng)的服務(wù)消費者,它依賴所有的微服務(wù),以報警微服務(wù)為例,配置如圖6所示。
圖6 Webserver配置圖
每個微服務(wù)只實現(xiàn)自己的功能,權(quán)限微服務(wù)用來控制登錄權(quán)限、展示界面和用戶管理;數(shù)據(jù)微服務(wù)用于管理KPI系數(shù)等系統(tǒng)預(yù)先導(dǎo)入的數(shù)據(jù);日志微服務(wù),詳細記錄系統(tǒng)登錄用戶的每一步操作;設(shè)備微服務(wù)管理系統(tǒng)中所有的水表、電表等儀器設(shè)備;采集微服務(wù)采集設(shè)備上報的數(shù)據(jù)給其他微服務(wù)使用并存進數(shù)據(jù)庫;分析微服務(wù)可以以圖標或點線圖形式展示給用戶設(shè)備數(shù)據(jù)對比等信息;報警微服務(wù)收到采集微服務(wù)上報的數(shù)據(jù)之后,與事先設(shè)置好的報警閾值進行對比,保障設(shè)備安全;報表微服務(wù),以excel或word方式導(dǎo)出整個廠區(qū)的能耗情況報表信息。
每個微服務(wù)由Model、API、Server 3個工程組成,Model主要存放實體類,API存放該微服務(wù)所要用到的所有接口,Server存放接口實現(xiàn)類和各種配置文件,處理業(yè)務(wù)邏輯。這三個工程層層依賴,API需要依賴Model,Server需要依賴Model和API。每個微服務(wù)都需要通過Dubbo進行注冊。下面以報警微服務(wù)配置為例進行說明,如圖7所示。
圖7 微服務(wù)配置圖
系統(tǒng)采用分庫設(shè)計,不再是一庫多表,而是每個微服務(wù)對應(yīng)自己的數(shù)據(jù)庫,互不干擾,如圖8所示。
圖8 系統(tǒng)數(shù)據(jù)庫實現(xiàn)圖
根據(jù)上述幾個方面,將系統(tǒng)實現(xiàn)后,進行系統(tǒng)功能展示。
根據(jù)設(shè)定的角色和用戶名密碼判斷用戶是否能夠登錄,登錄界面如圖9所示。
圖9 系統(tǒng)登錄界面圖
此功能在分析微服務(wù)中實現(xiàn),采集微服務(wù)采集到設(shè)備數(shù)據(jù)之后將數(shù)據(jù)推送給分析微服務(wù)。選中某一臺設(shè)備之后,將根據(jù)用戶選擇的月份以點線圖和圖表的方式將該設(shè)備數(shù)據(jù)展示出來,通過數(shù)據(jù)對比可以很清楚地了解每個月每臺設(shè)備的能耗情況,方便后期的能源調(diào)控,如圖10所示。
圖10 系統(tǒng)能耗月度對比圖
此功能在權(quán)限微服務(wù)里實現(xiàn),對于不同的角色,可以任意配置菜單,在該角色的用戶登錄之后,可以看到不同的界面和具有不同的操作權(quán)限,如圖11所示。
系統(tǒng)測試是保證系統(tǒng)質(zhì)量和可靠性的關(guān)鍵步驟,是對系統(tǒng)開發(fā)過程中的系統(tǒng)分析、系統(tǒng)設(shè)計和實施的最后復(fù)查。
圖11 系統(tǒng)角色權(quán)限管理圖
根據(jù)分布式系統(tǒng)的特點,分別在兩臺機器A和B上啟動微服務(wù),A啟動基礎(chǔ)、權(quán)限、分析3個微服務(wù),Webserver和剩下的微服務(wù)都由B啟動,系統(tǒng)啟動成功。之后在B上也啟動權(quán)限微服務(wù),通過監(jiān)控中心和調(diào)控中心可以看到,當系統(tǒng)調(diào)用到權(quán)限微服務(wù)時,會根據(jù)負載均衡策略去調(diào)用A或B,系統(tǒng)運行正常。Dubbo監(jiān)控中心和調(diào)控中心如圖12、圖13所示。
圖12 Dubbo監(jiān)控中心
圖13 Dubbo調(diào)控中心
文中通過對能效系統(tǒng)需求的分析以及對未來發(fā)展趨勢的預(yù)測,設(shè)計和實現(xiàn)了一種基于Dubbo的分布式能效管理系統(tǒng)。系統(tǒng)采用了以Dubbo為基礎(chǔ)框架的分布式架構(gòu),采用微服務(wù)模式,降低了系統(tǒng)耦合,提高了系統(tǒng)性能,再加上監(jiān)控中心和治理中心的使用,方便了系統(tǒng)的后期維護或二次開發(fā),通過具體的應(yīng)用測試,展示了系統(tǒng)的可用性和使用價值。今后將主要關(guān)注系統(tǒng)性能優(yōu)化方面的問題,如數(shù)據(jù)庫的優(yōu)化、負載均衡的使用策略等,進一步提高系統(tǒng)的穩(wěn)定性、安全性,加深用戶體驗。
參考文獻: