曹宏宇 胡恒
摘 要:將低壓配電側集中器和智能配變終端兩個設備進行融合,既是實現營配貫通業務需求、降低投資成本、提升臺區運維效率的需要,也是支撐泛在電力物聯網建設的一個重要手段。“軟件定義終端”是實現終端融合的一種可行的方法。容器技術的出現,使一切皆軟件的想法成為現實,也使得終端應用軟件App化成為可能。但不可否認任何事物都具有兩面性,應用軟件容器化必然會導致終端軟件變得越來越龐大和復雜,給整個軟件系統的設計帶來一些全新的挑戰。傳統的單點應用軟件模式將難以適應未來智能終端的發展要求,因此應該重視新架構和新技術的引入。微服務(Microservices)是目前業界非常受歡迎的架構模式,企業和服務提供商正在尋找更好的方法將應用程序部署在基于容器的虛擬化云環境中,微服務被認為是未來的方向。
關鍵詞:微服務;智能終端;集中器
中圖分類號:TP311.13 文獻標志碼:A 文章編號:2095-2945(2019)20-0017-03
Abstract: The integration of the low voltage distribution side concentrator and the intelligent distribution transformer terminal is not only the need to realize the business demand, reduce the investment cost and improve the operation and maintenance efficiency of the Taiwan area. It is also an important means to support the construction of ubiquitous power Internet of things. "Software defined terminal" is a feasible method to realize terminal fusion. The emergence of container technology not only makes the idea of everything software come true, but also makes it possible for terminal application software to be appraised. However, it is undeniable that everything has two sides, and the application software container will inevitably lead to the terminal software becoming more and more huge and complex, which brings some new challenges to the design of the whole software system. The traditional single-point application software model will be difficult to meet the requirements of the development of intelligent terminals in the future, so we should pay attention to the introduction of new architecture and new technology. Microservice is a very popular architecture pattern in the industry. Enterprises and service providers are looking for better ways to deploy applications in container-based virtual cloud environments. Microservice is considered to be the future trend.
Keywords: Microservices; intelligent terminal; concentrator
引言
本文試圖探討將微服務架構和遠程過程調用(RPC)用于終端軟件設計,并如何利用該模式解決容器和App之間信息交互的難題。
1 微服務架構
1.1 微服務簡介
作為一種全新的程序設計架構模式,微服務把一個整體應用程序拆分成多個小的服務,它們組成的一組服務可以相互協調,共同完成原有單一服務提供的功能。微服務架構中的每個組成服務都以獨立進程的方式運行,而且構建時每個服務都對應具體的業務,不同服務間的通信開銷是輕量級的。每個服務都可以單獨部署,而且不推薦統一且集中的服務管理。在構建微服務架構的每個組成服務時,都需要根據其相關業務的上下文選擇合適的語言和工具。
圖1描述了典型的微服務架構。
采用微服務架構的主要優勢有:
易于開發和維護。一個微服務只關注一個特定的業務功能,所以它的業務清晰、代碼量較少。開發和維護單個微服務相對比較簡單,整個應用是由若干個微服務構建而成,所以整個應用也會維持在可控狀態;
單個微服務啟動較快。單個微服務代碼量較少,所以啟動會比較快。
高可移植。微服務體量較小,功能較單一,這使得移植工作更容易。
易于測試。微服務依賴比較少,主要聚焦在功能測試,由于功能單一,代碼對測試友好,無需過度測試。
局部修改容易部署。單體應用只要有修改,就要重新部署整個應用,微服務解決了這樣的問題。一般來說,對某個微服務進行修改,只需要重新部署這個服務即可。
技術棧不受限。在微服務中,我們可以結合項目業務及團隊的特點,合理地選擇技術棧。
傳統微服務架構的缺點主要包括:
需要較高的運維開銷,提高了開發成本。和單體服務不同的是,傳統的微服務架構在構建每個組成服務時,都需要完成構建、測試以及部署等工作,還需要單獨的容器運行;如果要支持多語言環境的話會更加復雜。
存在隱式接口及接口匹配問題。雖然傳統的微服務架構把單一服務進行拆分,實現了業務間的解耦合,但是多個服務間的協作需要新的接口,從而把原來的簡單交互復雜化,在業務出現變更時可能需要統一協調發布。
增加了系統復雜性。微服務架構本質上是一種分布式系統,在提高了業務并發性的同時也帶來了一定的復雜性和其他問題。例如,如果存在網絡延遲,可能會導致數據不一致性,因此需要考慮容錯機制。另外,還需要權衡異步機制、差異化版本帶來的問題,開發人員還需要分析消息序列化、工作負載等在分布式系統上經常出現的問題。
1.2 微服務與容器
在容器技術出現之前,微服務通常需要獨自或者共同部署在多臺應用服務器或多個虛擬機上,微服務之間通過標準的通信接口實現訪問。這樣做的好處是當一個微服務出現問題時,并不會影響到其他的服務。而且,微服務可以基于資源的需求進行獨立擴展,可以被部署在更小的主機上。各個微服務使用的開發語言也可以不同,只要保持接口協議統一。
然而,不容忽視的是,當微服務部署在多個主機上,大量微服務的管理也成為一個難題。另外,假如微服務是由不同程序語言開發的,那么實際部署時需要加載各自的庫,從而增加了部署的復雜性,為了解決這一問題,容器技術應運而生。類似Docker容器技術等借助Namespaces及Cgroup等內核接口,實現了不同容器間的隔離;不同容器還可以共享同一內核。
目前流行的Linux容器主流方案是Docker和Rocket。Docker在實現時有一個libcontainer模塊,此模塊把相關的庫程序、用戶交互接口標準化;同時還為所有的容器鏡像一個官方的資源庫DockerHub。DockerHub類似于GitHub,簡化了Docker容器共享和發布的流程。基于Docker的所有容器是部署在同一主機上的,因此避免了不同語言開發環境使用不同庫文件的部署問題。另外,借助Docker的DockerFile還能夠解決不同開發語言、不同框架以及不同庫文件間的依賴性。
將微服務應用放置在容器中,帶來了快速與可移植性。從開發、測試、上線,實現了“一次編寫,到處運行”。
總之,通過容器、微服務的有效結合應用,最終幫助企業應用演進到互聯網架構,實現IT投資和收益的最優化。
1.3 微服務之間的通信
微服務軟件架構的一個重要的特點是采用輕量級的通信機制,目前主流的技術方案是使用遠程過程調用 (Remote Procedure Call,RPC)。本質上講,遠程過程調用借助網絡從遠程計算機上請求服務,屏蔽了底層通信協議等網絡細節。RPC協議構建于TCP或UDP,或者是HTTP上,允許開發者直接調用另一臺服務器上的程序,而開發者無需另外的為這個調用過程編寫網絡通信相關代碼,使得程序開發人員在開發網絡分布式程序時可以更多關注業務實現,而較少的關注網絡細節。遠程過程調用實現時使用的是客戶端-服務器端工作模式,是一種請求/響應式的通信技術,它使得我們可以像調用本地函數一樣調用一個遠程服務。在使用各類RPC風格的實現時,我們只要通過IDL定義好接口,通常能夠自動生成客戶端和服務端的代碼,非常易于使用。
2 基于微服務的終端軟件探討
2.1 基于微服務的終端軟件架構
以軟件定義終端,所有終端的功能通過容器APP的方式實現,同時智能終端設計可裁剪的統一操作系統,屏蔽硬件的多樣化差異,為所有終端提供底層運行環境。操作系統各層級間統一數據接口,使用容器技術對業務功能APP與底層系統的硬件資源做隔離,確保系統整體功能不受影響,同時可根據業務實際進行容器內APP資源權限合理分配,有效控制單一APP故障的影響范圍。
使用微服務架構進行設計,將容器分為基礎服務容器和高級業務容器。基礎服務容器提供終端基礎業務功能的抽象,如電表、電力物聯網傳感器、脈沖量和交采模擬量等數據的高頻采集和存儲,高級業務容器通過調用基礎服務容器提供的服務接口,獲取所需數據,從而實現高級業務功能如電能質量監測和分析等。
2.2 容器之間的通信
容器之間的通信方式是基于微服務架構的重要組成部分。經過廣泛的調研和評估后,我們推薦采用gPRC框架。gRPC是Google公司基于HTTP/2協議標準設計的,其目的是面向移動應用市場,是目前主流的開源RPC框架。gRPC的通用性體現在支持ProtoBuf(Protocol Buffers) 序列化協議,并且支持多種開發語言;另外,為了提供健壯的客戶端,gRPC借助一種簡單的實現方式進行精確的服務定義,并且在此基礎上自動生成后臺支持服務的客戶端庫;這種健壯的客戶端充分使用了高級流功能以及鏈接功能,能夠在很大程度上降低TCP連接數目,從而提高了網絡帶寬的利用率。
gRPC具有的優勢包括:
接口描述性強。由于定義服務時使用的是ProtoBuf數據序列化協議(和XML、JSON等序列化方式類似),因此gRPC可以支持數據的序列化操作,從而能夠廣泛應用于數據存儲、通信協議等領域。
不同開發語言的支持。gRPC對主流的開發語言都支持,比如C/C++、JAVA、Go、Node.js、Python、Ruby、PHP和C#等,在GitHub中包括各個開發語言的gRPC實現。除了支持各種開發語言的實現外,gRPC還可以生成各類開發語言的服務端庫文件以及客戶端庫文件。
支持HTTP/2標準。gRPC在設計之初就考慮了支持HTTP/2標準,因此和其他RPC框架相比,gRPC具備很多原生的功能,比如頭部壓縮、多復用請求等等。實際應用時如果使用了這些功能,會在很大程度上降低TCP連接數目,提高網絡帶寬的利用率,節省網絡帶寬;另外,還能夠在一定程度上節省CPU使用、延長電池壽命。最重要的是,gRPC的分布式特性也能夠提高Web應用在云端上的性能,從而以一種透明的方式實現客戶端和服務器端的通信,并且在構建通信系統時得到大大的簡化。
正是由于gRPC有如上優勢,gRPC目前才可以應用在Google的云服務和對外提供的API中,包括Docker項目在內的主流開源項目都采用了gRPC框架。
3 結束語
容器作為一種輕量級虛擬化技術,可以更好的利用物理資源,降低系統開銷。當前容器己經在虛擬化領域取得了一定成績,各種基于容器技術的應用逐漸投入到生產環境中。可以預見容器技術會越來越普遍,而和容器關系緊密的微服務架構技術也將受益。面對傳統終端軟件設計中碰到的各種問題,容器化和微服務化無疑將是一種非常有意義的嘗試。
參考文獻:
[1]楊強,張鈞鳴.基于微服務架構的大數據應用開發創新實踐[J].電力大數據,2019,22(03):71-76.
[2]李貞昊.微服務架構的發展與影響分析[J].信息系統工程,2017(01).
[3]孫海洪.微服務架構和容器技術應用[J].金融電子化,2016(05).