王衛(wèi)國,潘 雨
(北京智芯微電子科技有限公司,北京 102202)
目前電力系統(tǒng)中以智能電表、智能插座、充電樁等為代表的智能終端種類越來越多,應(yīng)用也越來越廣,相應(yīng)的運營管理系統(tǒng)輔之以手機App即可實現(xiàn)定位、遠(yuǎn)程查詢、控制、支付等功能,極大地提高了用戶便利度和交互時的友好性。
不過隨著業(yè)務(wù)場景的快速發(fā)展變化,采用傳統(tǒng)單體應(yīng)用架構(gòu)實現(xiàn)的現(xiàn)有智能終端運營管理系統(tǒng)逐漸顯現(xiàn)出資源浪費嚴(yán)重、部署效率低下、技術(shù)選型單一、擴(kuò)展能力有限、需求響應(yīng)速度慢、產(chǎn)品交付周期長等諸多問題。FOWLER M于2014年提出了“微服務(wù)”這一全新概念。微服務(wù)架構(gòu)易于開發(fā)、維護(hù)和擴(kuò)展,服務(wù)可獨立部署,服務(wù)間松散耦合,開發(fā)技術(shù)棧選型靈活,系統(tǒng)資源可按需伸縮。隨著該架構(gòu)思想的逐步成熟與落地實踐,前述問題逐漸得到有效改善和解決。微服務(wù)架構(gòu)帶來了上述諸多好處,與此同時也提出了不少挑戰(zhàn)。具體來說,微服務(wù)架構(gòu)須具備服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用網(wǎng)關(guān)、客戶端負(fù)載均衡、統(tǒng)一配置中心、服務(wù)治理與監(jiān)控等基礎(chǔ)設(shè)施。
實現(xiàn)將微服務(wù)架構(gòu)在智能終端運營管理系統(tǒng)中切實落地,對于提升運營系統(tǒng)性能、可靠性及穩(wěn)定性都具有十分重要的積極意義。本文詳細(xì)描述了各個基礎(chǔ)設(shè)施所使用的具體技術(shù),開發(fā)人員可集中精力專注于具體業(yè)務(wù)而無需過多關(guān)注整體架構(gòu)。同時本文還使用了Git、Jenkins以及Docker來實現(xiàn)分布式代碼管理、代碼持續(xù)集成以及服務(wù)封裝與快速部署。隨著系統(tǒng)架構(gòu)和功能的逐步完善,僅需通過有針對性地增加相關(guān)的服務(wù)節(jié)點數(shù)量以及少量的代碼修改和配置,即可輕松應(yīng)對海量智能終端接入系統(tǒng)所帶來的巨大挑戰(zhàn),而不再需要通過橫向部署更多的單體應(yīng)用來實現(xiàn),節(jié)省了大量服務(wù)器資源。
本文所采用的微服務(wù)技術(shù)棧綜合考慮團(tuán)隊成員技術(shù)構(gòu)成、新技術(shù)學(xué)習(xí)曲線、項目周期等因素,并結(jié)合當(dāng)前國內(nèi)微服務(wù)實踐經(jīng)驗與現(xiàn)狀最終確定。
改造后智能終端運營管理系統(tǒng)由主站平臺、手機App(iOS、Android)、智能終端三部分組成[1]。
(1)主站平臺是整個系統(tǒng)的中樞部分,用于協(xié)調(diào)內(nèi)部各個服務(wù)與手機App、智能終端之間的數(shù)據(jù)交互。主站利用心跳機制與接入系統(tǒng)中的每個終端保持長連接,處理響應(yīng)來自手機App和終端的上、下行指令和數(shù)據(jù),為相關(guān)人員提供歷史數(shù)據(jù)查詢、統(tǒng)計和分析研究,實時監(jiān)測運行終端運行工況等。
(2)手機App是用戶參與數(shù)據(jù)交互過程、監(jiān)控終端運行狀態(tài)、控制終端通斷、定時開關(guān)、查詢歷史數(shù)據(jù)的唯一途徑。
(3)智能終端內(nèi)置WiFi通信模塊,經(jīng)簡單設(shè)置與家庭內(nèi)部路由器相連,用戶可通過手機App與特定智能終端完成綁定,隨后在聯(lián)網(wǎng)條件下可對綁定的終端進(jìn)行遠(yuǎn)程即時、定時控制及其他操作。
通過一系列微服務(wù)基礎(chǔ)設(shè)施以及集成封裝部署工具集,同時利用Spring Boot簡化應(yīng)用開發(fā),可快速搭建起簡單易懂、易部署維護(hù)的分布式系統(tǒng)開發(fā)工具集,如圖1所示。
圖1 本文微服務(wù)技術(shù)??傮w示意圖
本系統(tǒng)采用Spring Boot[2]開發(fā)微服務(wù)主體框架程序。Spring Boot是一個輕量級實現(xiàn)Java微服務(wù)的開發(fā)框架,其設(shè)計初衷旨在簡化Spring應(yīng)用的開發(fā)與配置。通過自動配置、起步依賴、命令行界面和Actuator這4大主題,可實現(xiàn)代碼快速開發(fā),經(jīng)過簡單配置,即可利用其內(nèi)置Web服務(wù)器實現(xiàn)一鍵啟動部署。
本文所采用的微服務(wù)基礎(chǔ)設(shè)施主要包括以下組件:
(1)Apollo(阿波羅)是由攜程網(wǎng)發(fā)布的一款開源配置管理中心組件,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。該組件可通過Git、SVN和本地文件存儲,實現(xiàn)公共信息配置。其功能和性能明顯優(yōu)于Spring Cloud Config,且該組件已通過生產(chǎn)環(huán)境的嚴(yán)苛檢驗。
(2)Zookeeper是服務(wù)注冊與發(fā)現(xiàn)組件,負(fù)責(zé)服務(wù)的注冊、發(fā)現(xiàn)以及狀態(tài)同步,是順利完成微服務(wù)框架中各個服務(wù)間調(diào)用的信息中樞。該組件是目前用于解決分布式一致性的普遍性解決方案。
(3)Kong是由Mashape公司開源的一款A(yù)PI網(wǎng)關(guān)與API服務(wù)管理組件。該組件作為訪問系統(tǒng)服務(wù)的唯一入口,對外屏蔽了其內(nèi)部所有復(fù)雜性,同時明顯簡化客戶端實現(xiàn)與微服務(wù)應(yīng)用程序之間的溝通方式。該組件底層運行在NGINX之上,同時使用Lua擴(kuò)展了NGINX,因此可輕松處理超高并發(fā),支持水平擴(kuò)展,能夠?qū)ν馓峁┥矸蒡炞C、安全、流量控制、日志、協(xié)議轉(zhuǎn)換、訪問路由、負(fù)載均衡等功能,同時還可根據(jù)項目實際需要自行開發(fā)插件進(jìn)行功能擴(kuò)展。
(4) Netflix Hystrix是服務(wù)治理與監(jiān)控組件。Hystrix是一個實現(xiàn)了超時機制和斷路器模式的工具類庫[3]。服務(wù)斷路器通過配置熔斷和降級規(guī)則,可實現(xiàn)服務(wù)調(diào)用過程中故障的快速處理,保證服務(wù)調(diào)用能夠快速響應(yīng),避免雪崩效應(yīng)的產(chǎn)生。同時利用可視化監(jiān)控組件Dashboard及Turbine,集中展現(xiàn)微服務(wù)集群中多個服務(wù)的實時監(jiān)控數(shù)據(jù)和結(jié)果。
圖2 平臺技術(shù)架構(gòu)示意圖
在微服務(wù)架構(gòu)中,每個服務(wù)均有可能由不同的編程語言來實現(xiàn)。服務(wù)的運行環(huán)境往往也是千差萬別。尤其在服務(wù)數(shù)量較多的場景下,運行服務(wù)前,安裝各個服務(wù)的運行環(huán)境通常十分繁瑣、費時。Docker容器技術(shù)可以實現(xiàn)將服務(wù)及其運行環(huán)境加以封裝,并以封裝后的產(chǎn)物作為交付物。
開發(fā)人員不定時將代碼提交到Git遠(yuǎn)程倉庫,持續(xù)集成工具Jenkins按預(yù)先設(shè)定周期定期從Git倉庫拉取指定項目代碼并自動完成構(gòu)建,生成基于Docker容器的測試環(huán)境。測試人員在該測試環(huán)境中開展測試工作。上述過程經(jīng)過多次反復(fù)迭代,測試完畢后得到穩(wěn)定的項目源碼。最后再次經(jīng)由Jenkins、Docker得到項目的Docker容器。利用Docker相關(guān)命令,可快速完成服務(wù)的部署運行[4]。這里每個服務(wù)對應(yīng)一個單獨的項目。
利用微服務(wù)技術(shù)棧對智能終端運營管理系統(tǒng)進(jìn)行改造,旨在通過優(yōu)化系統(tǒng)整體架構(gòu)實現(xiàn)系統(tǒng)的高性能、高可用。通過將單體應(yīng)用拆分為多個可獨立運行的微服務(wù)模塊,最大限度降低系統(tǒng)模塊間的耦合,實現(xiàn)代碼快速開發(fā)和服務(wù)節(jié)點快速部署,大大降低運維的時間成本,顯著提升系統(tǒng)的整體擴(kuò)展能力。
本平臺架構(gòu)目前只實現(xiàn)了部分業(yè)務(wù)的微服務(wù)化。展現(xiàn)組件部分由于時間和技術(shù)方面的限制,目前尚未實現(xiàn)。同時根據(jù)當(dāng)前的業(yè)務(wù)需求,對歷史數(shù)據(jù)服務(wù)組件進(jìn)行微服務(wù)改造的意義不大,因此只是將其作為一個單獨的工程。經(jīng)微服務(wù)化后的模塊根據(jù)業(yè)務(wù)分為接口服務(wù)組和實時數(shù)據(jù)服務(wù)組。具體技術(shù)架構(gòu)如圖2所示。
(1)實時數(shù)據(jù)服務(wù)組:由數(shù)據(jù)采集服務(wù)、數(shù)據(jù)包解析服務(wù)、指令下發(fā)服務(wù)、數(shù)據(jù)存儲服務(wù)以及定時指令服務(wù)組成,采用Netty開源框架,利用NIO、多線程技術(shù),負(fù)責(zé)與每一個智能終端進(jìn)行通信,包括數(shù)據(jù)采集、指令下發(fā)、協(xié)議解析、數(shù)據(jù)校驗、數(shù)據(jù)加密/解密、協(xié)議適配、分布式部署、對外提供標(biāo)準(zhǔn)REST服務(wù)接口等功能。
(2)接口服務(wù)組:由App接口服務(wù)、Web接口服務(wù)、第三方接口服務(wù)組成,所有外部服務(wù)均通過REST方式調(diào)用相應(yīng)接口服務(wù),接口服務(wù)均返回JSON格式數(shù)據(jù)完成交互。接口服務(wù)組與實時數(shù)據(jù)服務(wù)組通過基于AMQP協(xié)議的RabbitMQ消息隊列實現(xiàn)異步調(diào)用、服務(wù)間解耦。
(3)展現(xiàn)組件:該組件支持手機端App和PC端瀏覽器兩種訪問方式。手機端App分為iOS與Android兩種操作系統(tǒng)版本,智能終端用戶利用App與智能終端進(jìn)行互動操作;PC端瀏覽器作為系統(tǒng)平臺運營方的管理工具,主要用于查看業(yè)務(wù)統(tǒng)計信息、配置平臺運行參數(shù)、回顧歷史數(shù)據(jù)、輔助決策等。
(4)歷史數(shù)據(jù)服務(wù)組件:為展現(xiàn)組件提供數(shù)據(jù)支持。
按照上述系統(tǒng)架構(gòu)設(shè)計,將接口以及對實時性要求較高的數(shù)據(jù)服務(wù)拆分成多個職責(zé)單一的微服務(wù):接口服務(wù)組、實時數(shù)據(jù)服務(wù)組。這兩個微服務(wù)組與微服務(wù)基礎(chǔ)設(shè)施再結(jié)合展現(xiàn)組件、歷史數(shù)據(jù)服務(wù)組件,可基本實現(xiàn)整個運營管理系統(tǒng)的高可用。
接口服務(wù)組除了提供Web應(yīng)用和App應(yīng)用,還提供第三方接口。本系統(tǒng)中的服務(wù)可以為第三方系統(tǒng)提供調(diào)用接口,實現(xiàn)多系統(tǒng)功能、業(yè)務(wù)上的集成。同時經(jīng)過協(xié)議轉(zhuǎn)換后的其他類型智能終端也可以接入到本平臺中。
在實時數(shù)據(jù)服務(wù)組中,需要指出的是:數(shù)據(jù)存儲服務(wù)通過MySQL數(shù)據(jù)庫集群持久化相關(guān)業(yè)務(wù)數(shù)據(jù),通過Redis NoSQL數(shù)據(jù)庫集群在內(nèi)存中記錄上行報文的實時狀態(tài)。數(shù)據(jù)采集服務(wù)與各個智能終端之間采用基于TCP長連接的實時通信方式,數(shù)據(jù)包解析服務(wù)采用多節(jié)點部署方式可對高并發(fā)、多協(xié)議適配提供高效的支撐。
接口服務(wù)組以及實時數(shù)據(jù)服務(wù)組中所有服務(wù)均經(jīng)過一定的負(fù)載均衡策略后發(fā)生調(diào)用,這樣可以確保未來海量智能終端以及系統(tǒng)中各實時服務(wù)的正常運行與高可用。
綜上綜述,每個微服務(wù)啟動時從統(tǒng)一的“配置管理中心”組件獲取與自身相關(guān)的配置信息,啟動后將自身的對外服務(wù)信息注冊到“服務(wù)注冊與發(fā)現(xiàn)”組件。所有的客戶端請求都會首先進(jìn)入“API網(wǎng)關(guān)與API管理中心”組件,該組件首先根據(jù)當(dāng)前請求中的服務(wù)名稱從“服務(wù)注冊與發(fā)現(xiàn)”組件中獲取對應(yīng)的服務(wù)配置,隨后根據(jù)服務(wù)配置直接調(diào)用相應(yīng)的服務(wù)。
本文探討了微服務(wù)架構(gòu)在面向互聯(lián)網(wǎng)、在海量智能終端運營管理系統(tǒng)中的實際應(yīng)用,詳細(xì)描述了所采用的技術(shù)架構(gòu)、設(shè)計思路及具體實現(xiàn)。利用微服務(wù)架構(gòu)改造智能終端運營管理系統(tǒng)可為智能終端的大規(guī)模應(yīng)用提供強有力保障,促進(jìn)用戶有序充電,更加高效地普及用戶側(cè)電力需求響應(yīng)。后續(xù)可將展現(xiàn)組件、歷史數(shù)據(jù)服務(wù)組件微服務(wù)化,并在后者中引入Hadoop大數(shù)據(jù)離線分析工具[5]進(jìn)一步對海量數(shù)據(jù)進(jìn)行深度分析用以輔助決策。