王衛國,潘 雨
(北京智芯微電子科技有限公司,北京 102202)
目前電力系統中以智能電表、智能插座、充電樁等為代表的智能終端種類越來越多,應用也越來越廣,相應的運營管理系統輔之以手機App即可實現定位、遠程查詢、控制、支付等功能,極大地提高了用戶便利度和交互時的友好性。
不過隨著業務場景的快速發展變化,采用傳統單體應用架構實現的現有智能終端運營管理系統逐漸顯現出資源浪費嚴重、部署效率低下、技術選型單一、擴展能力有限、需求響應速度慢、產品交付周期長等諸多問題。FOWLER M于2014年提出了“微服務”這一全新概念。微服務架構易于開發、維護和擴展,服務可獨立部署,服務間松散耦合,開發技術棧選型靈活,系統資源可按需伸縮。隨著該架構思想的逐步成熟與落地實踐,前述問題逐漸得到有效改善和解決。微服務架構帶來了上述諸多好處,與此同時也提出了不少挑戰。具體來說,微服務架構須具備服務注冊與發現、服務調用網關、客戶端負載均衡、統一配置中心、服務治理與監控等基礎設施。
實現將微服務架構在智能終端運營管理系統中切實落地,對于提升運營系統性能、可靠性及穩定性都具有十分重要的積極意義。本文詳細描述了各個基礎設施所使用的具體技術,開發人員可集中精力專注于具體業務而無需過多關注整體架構。同時本文還使用了Git、Jenkins以及Docker來實現分布式代碼管理、代碼持續集成以及服務封裝與快速部署。隨著系統架構和功能的逐步完善,僅需通過有針對性地增加相關的服務節點數量以及少量的代碼修改和配置,即可輕松應對海量智能終端接入系統所帶來的巨大挑戰,而不再需要通過橫向部署更多的單體應用來實現,節省了大量服務器資源。
本文所采用的微服務技術棧綜合考慮團隊成員技術構成、新技術學習曲線、項目周期等因素,并結合當前國內微服務實踐經驗與現狀最終確定。
改造后智能終端運營管理系統由主站平臺、手機App(iOS、Android)、智能終端三部分組成[1]。
(1)主站平臺是整個系統的中樞部分,用于協調內部各個服務與手機App、智能終端之間的數據交互。主站利用心跳機制與接入系統中的每個終端保持長連接,處理響應來自手機App和終端的上、下行指令和數據,為相關人員提供歷史數據查詢、統計和分析研究,實時監測運行終端運行工況等。
(2)手機App是用戶參與數據交互過程、監控終端運行狀態、控制終端通斷、定時開關、查詢歷史數據的唯一途徑。
(3)智能終端內置WiFi通信模塊,經簡單設置與家庭內部路由器相連,用戶可通過手機App與特定智能終端完成綁定,隨后在聯網條件下可對綁定的終端進行遠程即時、定時控制及其他操作。
通過一系列微服務基礎設施以及集成封裝部署工具集,同時利用Spring Boot簡化應用開發,可快速搭建起簡單易懂、易部署維護的分布式系統開發工具集,如圖1所示。

圖1 本文微服務技術棧總體示意圖
本系統采用Spring Boot[2]開發微服務主體框架程序。Spring Boot是一個輕量級實現Java微服務的開發框架,其設計初衷旨在簡化Spring應用的開發與配置。通過自動配置、起步依賴、命令行界面和Actuator這4大主題,可實現代碼快速開發,經過簡單配置,即可利用其內置Web服務器實現一鍵啟動部署。
本文所采用的微服務基礎設施主要包括以下組件:
(1)Apollo(阿波羅)是由攜程網發布的一款開源配置管理中心組件,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,并且具備規范的權限、流程治理等特性。該組件可通過Git、SVN和本地文件存儲,實現公共信息配置。其功能和性能明顯優于Spring Cloud Config,且該組件已通過生產環境的嚴苛檢驗。
(2)Zookeeper是服務注冊與發現組件,負責服務的注冊、發現以及狀態同步,是順利完成微服務框架中各個服務間調用的信息中樞。該組件是目前用于解決分布式一致性的普遍性解決方案。
(3)Kong是由Mashape公司開源的一款API網關與API服務管理組件。該組件作為訪問系統服務的唯一入口,對外屏蔽了其內部所有復雜性,同時明顯簡化客戶端實現與微服務應用程序之間的溝通方式。該組件底層運行在NGINX之上,同時使用Lua擴展了NGINX,因此可輕松處理超高并發,支持水平擴展,能夠對外提供身份驗證、安全、流量控制、日志、協議轉換、訪問路由、負載均衡等功能,同時還可根據項目實際需要自行開發插件進行功能擴展。
(4) Netflix Hystrix是服務治理與監控組件。Hystrix是一個實現了超時機制和斷路器模式的工具類庫[3]。服務斷路器通過配置熔斷和降級規則,可實現服務調用過程中故障的快速處理,保證服務調用能夠快速響應,避免雪崩效應的產生。同時利用可視化監控組件Dashboard及Turbine,集中展現微服務集群中多個服務的實時監控數據和結果。

圖2 平臺技術架構示意圖
在微服務架構中,每個服務均有可能由不同的編程語言來實現。服務的運行環境往往也是千差萬別。尤其在服務數量較多的場景下,運行服務前,安裝各個服務的運行環境通常十分繁瑣、費時。Docker容器技術可以實現將服務及其運行環境加以封裝,并以封裝后的產物作為交付物。
開發人員不定時將代碼提交到Git遠程倉庫,持續集成工具Jenkins按預先設定周期定期從Git倉庫拉取指定項目代碼并自動完成構建,生成基于Docker容器的測試環境。測試人員在該測試環境中開展測試工作。上述過程經過多次反復迭代,測試完畢后得到穩定的項目源碼。最后再次經由Jenkins、Docker得到項目的Docker容器。利用Docker相關命令,可快速完成服務的部署運行[4]。這里每個服務對應一個單獨的項目。
利用微服務技術棧對智能終端運營管理系統進行改造,旨在通過優化系統整體架構實現系統的高性能、高可用。通過將單體應用拆分為多個可獨立運行的微服務模塊,最大限度降低系統模塊間的耦合,實現代碼快速開發和服務節點快速部署,大大降低運維的時間成本,顯著提升系統的整體擴展能力。
本平臺架構目前只實現了部分業務的微服務化。展現組件部分由于時間和技術方面的限制,目前尚未實現。同時根據當前的業務需求,對歷史數據服務組件進行微服務改造的意義不大,因此只是將其作為一個單獨的工程。經微服務化后的模塊根據業務分為接口服務組和實時數據服務組。具體技術架構如圖2所示。
(1)實時數據服務組:由數據采集服務、數據包解析服務、指令下發服務、數據存儲服務以及定時指令服務組成,采用Netty開源框架,利用NIO、多線程技術,負責與每一個智能終端進行通信,包括數據采集、指令下發、協議解析、數據校驗、數據加密/解密、協議適配、分布式部署、對外提供標準REST服務接口等功能。
(2)接口服務組:由App接口服務、Web接口服務、第三方接口服務組成,所有外部服務均通過REST方式調用相應接口服務,接口服務均返回JSON格式數據完成交互。接口服務組與實時數據服務組通過基于AMQP協議的RabbitMQ消息隊列實現異步調用、服務間解耦。
(3)展現組件:該組件支持手機端App和PC端瀏覽器兩種訪問方式。手機端App分為iOS與Android兩種操作系統版本,智能終端用戶利用App與智能終端進行互動操作;PC端瀏覽器作為系統平臺運營方的管理工具,主要用于查看業務統計信息、配置平臺運行參數、回顧歷史數據、輔助決策等。
(4)歷史數據服務組件:為展現組件提供數據支持。
按照上述系統架構設計,將接口以及對實時性要求較高的數據服務拆分成多個職責單一的微服務:接口服務組、實時數據服務組。這兩個微服務組與微服務基礎設施再結合展現組件、歷史數據服務組件,可基本實現整個運營管理系統的高可用。
接口服務組除了提供Web應用和App應用,還提供第三方接口。本系統中的服務可以為第三方系統提供調用接口,實現多系統功能、業務上的集成。同時經過協議轉換后的其他類型智能終端也可以接入到本平臺中。
在實時數據服務組中,需要指出的是:數據存儲服務通過MySQL數據庫集群持久化相關業務數據,通過Redis NoSQL數據庫集群在內存中記錄上行報文的實時狀態。數據采集服務與各個智能終端之間采用基于TCP長連接的實時通信方式,數據包解析服務采用多節點部署方式可對高并發、多協議適配提供高效的支撐。
接口服務組以及實時數據服務組中所有服務均經過一定的負載均衡策略后發生調用,這樣可以確保未來海量智能終端以及系統中各實時服務的正常運行與高可用。
綜上綜述,每個微服務啟動時從統一的“配置管理中心”組件獲取與自身相關的配置信息,啟動后將自身的對外服務信息注冊到“服務注冊與發現”組件。所有的客戶端請求都會首先進入“API網關與API管理中心”組件,該組件首先根據當前請求中的服務名稱從“服務注冊與發現”組件中獲取對應的服務配置,隨后根據服務配置直接調用相應的服務。
本文探討了微服務架構在面向互聯網、在海量智能終端運營管理系統中的實際應用,詳細描述了所采用的技術架構、設計思路及具體實現。利用微服務架構改造智能終端運營管理系統可為智能終端的大規模應用提供強有力保障,促進用戶有序充電,更加高效地普及用戶側電力需求響應。后續可將展現組件、歷史數據服務組件微服務化,并在后者中引入Hadoop大數據離線分析工具[5]進一步對海量數據進行深度分析用以輔助決策。