趙苗苗,陳 鵬,顏昌隆
(1.武漢郵電科學(xué)研究院,湖北武漢 430074;2.烽火通信科技股份有限公司,湖北武漢 430074)
伴隨著大數(shù)據(jù)和各類云服務(wù)的爆炸式增長,數(shù)據(jù)中心互聯(lián)設(shè)備應(yīng)運(yùn)而生[1-2],該設(shè)備種類繁多,且分別提供不同的配置命令,傳統(tǒng)的CLI(命令行界面)網(wǎng)絡(luò)管理方式對(duì)管理人員和用戶要求比較高,無法滿足數(shù)據(jù)中心網(wǎng)絡(luò)的運(yùn)維要求,該文提出了基于GoAhead 嵌入式Web 服務(wù)器的網(wǎng)絡(luò)管理架構(gòu),這種基于Web 的網(wǎng)絡(luò)管理系統(tǒng)通過標(biāo)準(zhǔn)的網(wǎng)絡(luò)瀏覽器就可以對(duì)設(shè)備進(jìn)行訪問,可以有效地顯示網(wǎng)絡(luò)管理數(shù)據(jù),提高了網(wǎng)絡(luò)管理效率[3-6]。該文重點(diǎn)介紹了嵌入式Web 網(wǎng)絡(luò)管理系統(tǒng)中JSON(Javascript Object Notation)與命令行的適配機(jī)制及實(shí)現(xiàn),選擇JSON 作為AJAX(Asynchronous Javascript And Xml)的數(shù)據(jù)傳輸格式,有效地提高了傳輸效率[7-11]?;谠摍C(jī)制實(shí)現(xiàn)了設(shè)備數(shù)據(jù)的可視化,讓系統(tǒng)具有移植性和擴(kuò)展性,對(duì)于不同配置命令的設(shè)備可實(shí)現(xiàn)個(gè)性化定制,開發(fā)簡(jiǎn)單、便于維護(hù)。
該軟件系統(tǒng)主要由Webclient 模塊、GoAhead Webserver模塊、CLI模塊及底層Interface Service 等各項(xiàng)業(yè)務(wù)和協(xié)議模塊組成,實(shí)現(xiàn)了嵌入式Web 網(wǎng)管系統(tǒng)的基本功能,其架構(gòu)如圖1 所示。
圖1 嵌入式Web網(wǎng)絡(luò)管理系統(tǒng)架構(gòu)
該軟件系統(tǒng)采用了異步AJAX 技術(shù),客戶端可以在不更新加載整個(gè)頁面的情況下與服務(wù)器交換數(shù)據(jù),并更新部分網(wǎng)頁,從而可以較好地同步交互造成的響應(yīng)慢的問題。AJAX 的核心對(duì)象是XmlHttpRequest,通過XmlHttpRequest 對(duì)象,瀏覽器的JavaScript 可以后臺(tái)與服務(wù)器交換數(shù)據(jù),無需等待服務(wù)器的響應(yīng)[12-13]。因此,在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,大大提高了頁面的響應(yīng)速度。
用戶在客戶端通過瀏覽器(例如Google Chrome、Mozilla Firefox 等)對(duì)目標(biāo)設(shè)備進(jìn)行訪問,通過在地址欄輸入設(shè)備的IP(Internet Protocol,網(wǎng)際互連協(xié)議)地址,Webserver 將設(shè)備的配置頁面信息通過HTTP(Hypertext Transfer Protocol,超文本傳送協(xié)議)傳送到Web 瀏覽器,然后顯示在用戶終端;用戶使用時(shí)在相應(yīng)的配置頁面進(jìn)行參數(shù)配置操作,當(dāng)用戶在Web 瀏覽器配置界面中輸入數(shù)據(jù)時(shí),先由JavaScript 程序?qū)ζ溥M(jìn)行預(yù)處理,檢查輸入數(shù)據(jù)是否符合要求,對(duì)于不符合要求的數(shù)據(jù),在前臺(tái)頁面進(jìn)行返錯(cuò)提示;Web 服務(wù)器執(zhí)行ASP(Active Server Page)過程、GoForms 過程實(shí)現(xiàn)接口,獲取待查詢的或者配置的JSON 數(shù)據(jù);通過映射文件將JSON 數(shù)據(jù)轉(zhuǎn)換成命令行,用于查詢數(shù)據(jù)或處理用戶設(shè)置,其中使用CLI 組件提供的IPS(Inter Process Signal,進(jìn)程間信號(hào)消息)接口與CLI 模塊交互,并且CLI 與業(yè)務(wù)模塊之間不感知HTTP 數(shù)據(jù);將查詢結(jié)果或處理結(jié)果以HTTP 響應(yīng)的方式返回給頁面,當(dāng)請(qǐng)求返回時(shí),客戶端使用JavaScript 來更新相應(yīng)的用戶界面。
該軟件系統(tǒng)的適配模塊主要是由AJAX Actions解析器、映射文件以及CLI 模塊組成,AJAX Actions解析器負(fù)責(zé)解析和組裝前臺(tái)頁面發(fā)送的JSON 格式數(shù)據(jù),通過映射文件interface_map.xml 將JSON 格式數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的CLI 命令行字符串,然后下發(fā)到CLI 模塊,并將CLI 模塊回復(fù)的操作結(jié)果發(fā)送到前臺(tái)頁面進(jìn)行解析與響應(yīng)。該方案能夠有效地提高Web網(wǎng)管系統(tǒng)的數(shù)據(jù)傳送和處理效率,減少客戶端的請(qǐng)求和響應(yīng)時(shí)間。
JSON 與CLI 命令行的映射過程如下:
1)在climap.js文件中定義了一個(gè)對(duì)象configObj,用來與命令行進(jìn)行映射,該對(duì)象支持set、show、no 等方法;
2)根據(jù)funName 查找映射文件interface_map.xml對(duì)應(yīng)的id,并獲得對(duì)應(yīng)的CLI 命令行字符串,其中,interface_map.xml 文件的參數(shù)說明如表1 所示。
表1 映射文件參數(shù)說明
配置操作流程如圖2 所示。
圖2 配置操作流程
如圖2 所示,用戶在配置設(shè)備時(shí),首先在Web 前端配置頁面完成設(shè)備參數(shù)的配置,點(diǎn)擊提交按鈕,用一個(gè)按鍵函數(shù)submitForm 來觸發(fā)AJAX 數(shù)據(jù)請(qǐng)求,這個(gè)過程使用configObj 對(duì)象的set 方法,以CallHome配置為例:
configObj.set("set_callhome","callhome","");
根據(jù)funName 和id 找到映射文件interface_map.xml中對(duì)應(yīng)的CLI 命令行字符串:
<set funName="set_callhome">
<mo2cli_entry id="callhome" mode="CONFIG_M ODE" cliName="netconf-ch-ssh" cat-id="ip" cat=""/></set>
取出字符串并以JSON 鍵值對(duì)的形式存放在cli.array 數(shù)組中:
"cli_array":[{type:"set",cli:"config terminal net conf-ch-ssh "}]
通過POST 請(qǐng)求把JSON 數(shù)據(jù)發(fā)送到webs2cli_uniform_interface 接口,后臺(tái)解析JSON 字符串并下發(fā)到CLI 模塊,命令行執(zhí)行完之后返回響應(yīng),由handle_config_result 函數(shù)處理返回的響應(yīng),配置錯(cuò)誤時(shí)后臺(tái)返回錯(cuò)誤提示數(shù)據(jù)給前臺(tái)頁面,配置成功則調(diào)用show 命令刷新前臺(tái)頁面,前臺(tái)解析并顯示配置數(shù)據(jù)。
如圖3 所示,用戶在Web 前端點(diǎn)擊查詢功能頁面,頁面首先調(diào)用initTable 函數(shù)初始化表格,在show_config_info 函數(shù)中實(shí)現(xiàn)show 命令的轉(zhuǎn)換。
圖3 查詢操作流程
以CallHome 查詢功能為例,使用configObj 的show 方法:
configObj.show("show_callhome","show_callhome","");
根據(jù)funName 和id 找到映射文件interface_map.xml中對(duì)應(yīng)的CLI 命令行字符串:
<show funName="show_callhome">
<mo2cli_entry id="show_callhome" mode="CON FIG_MODE" cliName="debug show netconf-ch-ssh"cat=" ; ;"/></show>
因?yàn)镴SON 不能識(shí)別/r/n,故用其實(shí)體 ; 來表示。從而獲得對(duì)應(yīng)的CLI命令行字符串:
"cli_array":[{"type":"get","cli":"debug show netco nf-ch-ssh "}]
通過AJAX 請(qǐng)求將命令行下發(fā)后,后臺(tái)返回的是字符串,此時(shí)webs2cli_uniform_interface 接口提供通道作用,handle_show_info 函數(shù)負(fù)責(zé)解析,將字符串解析成JSON 類型數(shù)組并返回給前臺(tái)頁面,前臺(tái)HTML 頁面負(fù)責(zé)用戶界面的組織及數(shù)據(jù)格式化的輸出。
該軟件系統(tǒng)選擇JSON 作為AJAX 的數(shù)據(jù)傳輸格式,同時(shí)選取cJSON 作為JSON 的封裝和解析庫。cJSON 是一個(gè)開源、簡(jiǎn)潔、功能全面的JSON 封裝/解析器。JSON 與命令行模型適配過程中使用的接口函數(shù)如下:
1)JSON 數(shù)據(jù)包解析接口
cJSON*cJSON_Parse(const char*value)
用于解析JSON 數(shù)據(jù)包,并按照cJSON 結(jié)構(gòu)體的結(jié)構(gòu)序列化整個(gè)數(shù)據(jù)包,其中的參數(shù)是JSON 鍵值對(duì)字符串。
2)JSON 對(duì)象遍歷接口
char*cJSON_Print(cJSON*item)
用于將創(chuàng)建好的cJSON 對(duì)象封裝成字符串形式的JSON 數(shù)據(jù),并打印出來,其中的參數(shù)是cJSON 結(jié)構(gòu)數(shù)據(jù)。
3)查找指定的JSON 對(duì)象接口
cJSON*cJSON_GetObjectItem(const cJSON*const object,const char*const string);
用于解析cJSON 結(jié)構(gòu)體中指定名稱的JSON 對(duì)象,返回JSON 格式數(shù)據(jù),其中第一個(gè)參數(shù)是cJSON結(jié)構(gòu)數(shù)據(jù),第二個(gè)參數(shù)是指定的JSON 對(duì)象名稱。
4)查找JSON數(shù)組中指定索引的JSON對(duì)象接口
cJSON*cJSON_GetArrayItem(const cJSON *array,int index);
用于解析cJSON 數(shù)組中指定名稱的JSON 對(duì)象,返回JSON 格式數(shù)據(jù),其中第一個(gè)參數(shù)是cJSON 數(shù)組,第二個(gè)參數(shù)是待查找的JSON 對(duì)象的索引。
上述接口實(shí)現(xiàn)了JSON 數(shù)據(jù)的封裝和解析,通過webs2cli_uniform_interface 接口調(diào)用實(shí)現(xiàn),JSON 支持嵌套,即一個(gè)JSON 格式中,允許再嵌套一個(gè)JSON 格式的數(shù)據(jù),理論上支持無限層次的JSON 嵌套[14-16]。
該文以CallHome 配置和查詢功能為例來說明管理軟件系統(tǒng)的測(cè)試。CallHome 是一種常用的Netconf 設(shè)備,主動(dòng)連接控制器的配置選項(xiàng)。
1)測(cè)試工具:Google Chrome/Secure CRT Portable 7.0.4。
2)測(cè)試設(shè)備:數(shù)據(jù)中心互聯(lián)設(shè)備。
將測(cè)試設(shè)備與PC 端連接,通過軟件Secure CRT Portable 對(duì)測(cè)試設(shè)備進(jìn)行訪問,瀏覽器登錄設(shè)置連接的IP 地址即可訪問測(cè)試設(shè)備。通過下面的測(cè)試用例來測(cè)試該功能的可用性:
1)在瀏覽器的CallHome 配置頁面中執(zhí)行配置下發(fā)操作,在CLI 中觀察其效果是否一致;
2)在CLI 中用命令行的方式執(zhí)行配置下發(fā)操作,觀察是否在Web 頁面中能夠同步顯示。
如圖4 所示,在Web 頁面根據(jù)參數(shù)要求填寫CallHome 的控制器IP 地址及端口,填寫完成后,點(diǎn)擊新增按鈕,頁面顯示配置成功提示,并且頭部列表上顯示剛剛新增的配置數(shù)據(jù),這里默認(rèn)網(wǎng)絡(luò)類型為公網(wǎng)且值為1。然后在CLI 界面通過debug show netconfch-ssh命令來查詢,結(jié)果顯示與Web頁面一致。如圖5所示,在CLI界面通過命令行方式配置控制器IP地址、端口及網(wǎng)絡(luò)類型(私網(wǎng):CTVPN193),配置下發(fā)后通過命令行查詢方式,得到顯示結(jié)果與Web頁面相同。
圖4 Web頁面配置查詢功能測(cè)試展示圖
圖5 CLI界面配置查詢功能測(cè)試展示圖
通過上述測(cè)試結(jié)果可得出如下結(jié)論:
1)Web 網(wǎng)管和傳統(tǒng)的CLI 網(wǎng)管在功能上可實(shí)現(xiàn)同步,操作結(jié)果完全一致,均能滿足用戶的要求;
2)Web 網(wǎng)管方式操作簡(jiǎn)單易上手,數(shù)據(jù)直觀,擁有更好的用戶體驗(yàn)。
該文介紹了一種基于GoAhead 的嵌入式Web 網(wǎng)管系統(tǒng)的實(shí)現(xiàn)架構(gòu),并重點(diǎn)介紹了該軟件系統(tǒng)中JSON 與命令行的適配機(jī)制與實(shí)現(xiàn),基于此,可以根據(jù)不同客戶的需求實(shí)現(xiàn)不同設(shè)備管理系統(tǒng)軟件的快速定制和開發(fā)。針對(duì)不同嵌入式設(shè)備和不同的業(yè)務(wù)需求,只需要根據(jù)設(shè)備的配置命令,修改映射文件和底層的封裝接口,即可將該方法成功應(yīng)用到新的管理系統(tǒng)中,開發(fā)簡(jiǎn)單、便于維護(hù),有效降低了嵌入式設(shè)備的運(yùn)行和維護(hù)成本,提高了Web網(wǎng)管系統(tǒng)的開發(fā)和維護(hù)效率。