王萌,朱曉民,李煒
(1 北京郵電大學網絡與交換技術國家重點實驗室,北京 100876;2 東信北郵信息技術有限公司,北京 100191)
移動智能網是一種在移動網中快速、有效、經濟、方便的提供新業務的網絡體系結構[1]。隨著移動智能網的發展成熟,部署在網絡上的業務系統不斷出現,軟件和主機的數量也在相應的增多,網絡和業務資源的管理問題也越來越突出[2]。綜合網管系統可以通過一個控制操作臺實現對互聯的多個業務網絡的管理,能夠提供對多專業多廠家多個業務子網的透視、對所管業務的了解及對故障定位和故障排除的支持。
隨著智能網業務的拓展[3],原有的業務系統需要進行修改或者升級,可能會增加或者修改網管監控數據,其自身的業務數據如KPI(關鍵績效指標)等也可能會發生變化,而目前只能通過更新各個業務系統的網管代理來進行適應,導致現網維護的成本較高,業務系統網管代理開發者的開發負擔和現網工程客服人員的升級維護負擔較重,因此如何設計一種通用可擴展的網元代理,在業務系統功能變動或者擴展時,不需要對代理進行重新開發,以最小的代價適應智能網業務的發展,是一個亟需解決的問題。
插件式架構的應用系統具有良好的擴充性、可定制性和易維護性,本文即在論述插件設計思想的基礎上提出了一種基于插件技術實現通用網元代理的設計思路。
插件是一種遵循統一的預定義應用接口規范編寫出來的程序,主框架程序(宿主程序)在運行時通過接口規范對插件進行調用,以擴展應用程序的功能[4]。插件結構有助于應用程序功能的擴充和維護,許多著名的軟件都運用了這一技術,例如火狐瀏覽器、微信、Eclipse、Adobe Photoshop等。
基于插件開發的軟件可分為插件和宿主程序兩部分,兩者之間可以互相通信,宿主程序通過增刪或者修改插件來擴充或者變更整個軟件的功能。插件與調用它的宿主程序之間的結構關系如圖1所示。

圖1 插件和宿主程序UML關系圖
可以看到宿主程序和插件之間需要事先約定好兩種接口,其一是宿主程序接口,由宿主程序實現,插件調用這些接口獲取宿主程序內部的各種資源和數據,宿主程序接口為插件提供了定制宿主程序所需的全部接口;其二從插件的角度,為了使宿主程序能夠裝載并成功調用,插件也必須遵循宿主程序提供的插件接口,它為宿主程序提供了裝載和調度插件所需要的全部方法[5]。
基于插件的軟件開發框架能夠有效的減少系統各模塊之間的耦合;同時軟件新增加功能時不需要修改現有代碼,只需新開發插件進行安裝即可,增強了軟件的可擴展性;另外由于具體的功能由插件來實現,也降低了系統的整體復雜度。
通用網元代理作為綜合網管系統的重要組成部分,它運行于所有的被管理主機,其主要功能在于收集被管理主機的各種配置和運行數據。根據插件式架構設計思想,可以將通用網元代理劃分為代理接口、插件管理、插件調度和插件庫4大部分(如圖2所示)。
代理接口模塊實現與綜合網管系統控制中心的通信、消息轉發等功能;插件管理模塊實現系統對插件的管理功能,包括插件的新增、刪除、驗證、已安裝插件信息查詢、插件運行狀態查詢等功能;插件調度模塊實現了插件自動安裝升級、網管數據采集等通用網元代理的核心功能。

圖2 基于插件的通用網元代理結構
通用網元代理接收綜合網管系統的命令調用相應插件獲取網管數據,因此不需要宿主程序提供接口,只需設計插件接口規范即可。因為每個插件都單獨實現獲取某種網管數據的功能,所以這里將插件設計為單獨的可執行程序,而宿主程序通過調用這些單獨的可執行程序來實現具體的功能。
插件接口要提供宿主程序調用插件所需的所有方法,包括幫助信息、版本信息、測試信息、參數配置信息、能力信息,所有為通用網元代理開發的插件都需要實現這些接口,根據插件的設計,插件接口需要通過傳遞給插件的參數來實現,分別對應插件-help、-version、-test、-paraminfo、-dataindex參數。其中參數信息即實現插件的功能所需要的必須的參數,供插件調用的時候使用;能力信息即插件實現功能的描述,將插件獲取的數據細化為數據指標,例如CPU占用率,內存剩余容量等,所有插件返回信息均使用XML格式化,例如插件返回版本信息如圖 3所示。

圖3 插件返回版本信息示例
根據具體需求,插件可以使用shell等腳本語言或者C/C++等高級語言編寫,只需要符合上面所述的接口規范即可。
由于插件需要從綜合網管系統安裝到通用網元代理,因此需要在代理本地維護一個插件庫,建立目錄分別存儲不同形式或狀態的插件,如表1所示。

表1 插件庫設計
支持插件功能的應用程序都需要對已安裝的插件進行管理。通用網元代理可以在一個配置文件中為每個已安裝的插件維護一條記錄,保存該插件的編號、版本、位置、狀態、更新時間等信息,進而利用這些信息實現插件的安裝、驗證、卸載等管理功能。
根據實際情況,插件在通用網元代理側的狀態可劃分為5種:初始、安裝失敗、安裝成功、驗證失敗、有效。插件首次安裝狀態為初始,之后狀態通過安裝、卸載、驗證3種操作進行遷移。插件狀態之間的轉換關系如圖4所示,其中實線為安裝操作,虛線為卸載操作,點劃線為驗證操作。
當且僅當插件處于有效狀態時,才能被通用網元代理調度使用。

圖4 插件狀態轉換關系
插件調度模塊需要根據綜合網管系統的指令執行相應的插件實現數據采集功能,通用網元代理側啟動單獨的進程負責插件調度。由于綜合網管系統的數據獲取指令可能存在并發,因此插件調度進程需要支持同時維護多個調度任務,每一個調度任務都是一個狀態遷移過程(如圖 5所示),包括4種狀態:修復(插件未準備好,修復插件),就緒(插件就緒,等待調度)、運行(插件運行)、結束(插件執行結束)。

圖5 插件調度狀態遷移圖
當插件狀態非有效、插件不存在或者當前安裝插件版本與接收的調度命令要求的不一致時,調度任務進入修復狀態,此時通用網元代理從綜合網管系統下載最新插件代碼進行安裝驗證,插件狀態變為有效后,調度任務才能進入就緒狀態等待調度,從而實現了插件自動修復和自動升級的功能。
由于數據采集可能存在單次和定期兩種情況,因此插件調度任務也需要支持兩種模式:單次調度和周期調度。當處于周期調度模式時,調度任務進入結束狀態后會再次遷移到就緒狀態等待下次調度。
本文提出的基于插件的通用網元代理的設計思路在功能與技術上都突破了傳統的思維,為綜合網管系統提供了智能化、可擴展、易維護的網管數據采集服務,業務功能的變更或者業務系統的擴展只需要修改相應的插件即可完成兼容,降低了業務側網管功能開發人員的負擔以及網絡維護成本。本文提到的插件結構需要在綜合網管系統控制中心提供對所有系統支持插件的管理功能,還需要進一步的研究。
[1]廖建新,王晶,郭力等.移動智能網[M].北京:北京郵電大學出版社,2000(11):1-10.
[2]呂獻美,王晶.移動智能網自動例檢系統的分析與設計[J].電信技術,2009(8):108-110.
[3]呂新榮,廖建新,朱曉民,武家春.無差別移動性管理網絡[J].通信學報,2007,28(7):1-7.
[4]李延春.軟件插件技術的原理與實現[J].計算機系統應用,2003(7):24-26.
[5]陳方明,陳奇.基于插件思想的可重用軟件設計與實現[J],計算機工程與設計,2005(1):172-176.