連 娜
(山西職業(yè)技術(shù)學院,山西 太原 030006)
現(xiàn)階段,面向高并發(fā)場景的軟件系統(tǒng)普遍采用了服務(wù)器集群作為部署和運行平臺,而在現(xiàn)有的針對Windows服務(wù)器的遠程管理中,用戶普遍采用以Team View、向日葵為代表的計算機管理軟件以遠程登錄的方式進行服務(wù)器工作狀態(tài)監(jiān)控和管理[1]。但作為遠程控制軟件,其主要功能集中在對單臺服務(wù)器遠程操作與配置方面,并不適用于對大量服務(wù)器同時進行實時監(jiān)控并進行數(shù)據(jù)歸集匯總的應(yīng)用場景。本文提出了一種基于微信小程序框架的輕便型應(yīng)用程序設(shè)計方案,能夠滿足隨時隨地監(jiān)測服務(wù)器集群運行狀態(tài)的應(yīng)用需求,有效簡化了服務(wù)器集群運行維護工作的復(fù)雜度并提升了工作效率。
在服務(wù)器集群的運維管理工作中,管理人員在根據(jù)實際運行情況及時調(diào)整集群工作模式、更新負載均衡方案以及分析集群故障原因時,都需要能夠?qū)崟r掌握各節(jié)點服務(wù)器的運行數(shù)據(jù)作為參考依據(jù)?,F(xiàn)有的遠程控制軟件,僅能通過逐一遠程登錄各節(jié)點服務(wù)器后查看各項運行信息,步驟繁瑣、耗時長且需要通過電腦操作,工作場地的局限性大且信息滯后、實時性差[2]。因此需要提供能夠在智能手機中運行的應(yīng)用程序,在實現(xiàn)批量采集服務(wù)器運行信息功能的同時具備良好的數(shù)據(jù)實時顯示功能。微信小程序作為騰訊公司發(fā)布的新一代手機應(yīng)用開發(fā)框架,具有使用便捷、響應(yīng)速度快以及便于更新和維護等優(yōu)勢,且無需安裝專用的APP程序,在解決了手機硬件兼容性問題的同時還節(jié)省了大量的手機存儲空間,非常適用于服務(wù)器集群運行數(shù)據(jù)實時監(jiān)控管理軟件的開發(fā)。因此,在本文設(shè)計的服務(wù)器運行實時監(jiān)控平臺方案中,以微信小程序開發(fā)框架為核心整合Python與PHP語言以及SQL Server數(shù)據(jù)庫技術(shù),完成服務(wù)器運行數(shù)據(jù)的采集存儲、匯總處理與實時顯示功能。
服務(wù)器運行實時監(jiān)控平臺的整體架構(gòu)如圖1所示,共由4個部分構(gòu)成,包括監(jiān)控程序、管理服務(wù)器、微信小程序模塊與管理平臺模塊。
圖1 系統(tǒng)架構(gòu)圖
監(jiān)控程序被部署在服務(wù)器集群的各節(jié)點上,負責采集各臺服務(wù)器主機的實時工作狀態(tài)數(shù)據(jù)并上傳至管理服務(wù)器的數(shù)據(jù)庫中。管理服務(wù)器作為平臺的核心模塊,負責數(shù)據(jù)的自動歸集與可靠存儲,并在此基礎(chǔ)上面向用戶提供數(shù)據(jù)訪問接口。微信小程序模塊負責從服務(wù)器中實時獲取集群中所有服務(wù)器的運行數(shù)據(jù)并批量顯示在用戶端的微信小程序中。管理平臺模塊負責面向管理人員提供日常運行管理所需的數(shù)據(jù)管理、分析等相關(guān)功能。
監(jiān)控程序被安裝在集群中的各個節(jié)點服務(wù)器上并設(shè)置為開機自動運行模式,根據(jù)固定的間隔時間獲取服務(wù)器當前的CPU、內(nèi)存使用率、網(wǎng)絡(luò)連接與帶寬占用情況等數(shù)據(jù)并且在將數(shù)據(jù)打包為Json格式后發(fā)送至管理服務(wù)器的數(shù)據(jù)上傳接口中,監(jiān)控程序主要基于Python的Psutil庫實現(xiàn)。
管理服務(wù)器中包含后臺數(shù)據(jù)庫與數(shù)據(jù)上傳接口、用戶接口及管理接口程序,數(shù)據(jù)上傳接口在收到監(jiān)控程序所提交的信息后,首先對數(shù)據(jù)內(nèi)容進行有效性校驗,濾除錯誤與重復(fù)數(shù)據(jù)后,將數(shù)據(jù)添加至后臺數(shù)據(jù)庫中存儲;用戶接口在收到微信小程序模塊的數(shù)據(jù)請求并校驗其身份后,在數(shù)據(jù)庫中進行檢索并實時返回結(jié)果數(shù)據(jù)至微信小程序模塊;管理接口在接收到管理平臺模塊所提交的操作請求并驗證其身份后,在數(shù)據(jù)庫中執(zhí)行數(shù)據(jù)更新、檢索操作并返回執(zhí)行結(jié)果。管理服務(wù)器基于部署在公共網(wǎng)絡(luò)中的云服務(wù)器搭建,后臺數(shù)據(jù)庫使用SQL Server搭建、數(shù)據(jù)上傳與訪問接口使用PHP+Apache框架創(chuàng)建Web Service服務(wù)頁面實現(xiàn)。
微信小程序模塊用于向用戶提供各服務(wù)器的實時運行狀態(tài)信息、服務(wù)器運行數(shù)據(jù)的匯總統(tǒng)計結(jié)果以及故障緊急預(yù)警提示信息,其運行原理是在微信小程序平臺和管理服務(wù)器之間建立數(shù)據(jù)通信,從系統(tǒng)數(shù)據(jù)庫中實時檢索數(shù)據(jù)并顯示在小程序界面中。微信小程序模塊使用微信開發(fā)者工具開發(fā),使用小程序開發(fā)框架中提供的request遠程請求功能與管理服務(wù)器上的用戶接口進行數(shù)據(jù)通信。
管理平臺模塊負責向系統(tǒng)管理員提供用戶賬號管理、歷史數(shù)據(jù)的檢索與管理、數(shù)據(jù)匯總分析以及報表打印功能,以上各項功能均通過對管理服務(wù)器上的系統(tǒng)數(shù)據(jù)庫發(fā)起添加、檢索、更新的訪問操作實現(xiàn),其原理是將各類數(shù)據(jù)訪問操作與配置參數(shù)封裝為相應(yīng)的SQL命令后提交至系統(tǒng)數(shù)據(jù)庫中執(zhí)行并獲取結(jié)果。管理平臺模塊基于Web應(yīng)用模式實現(xiàn),使用PHP構(gòu)建與管理服務(wù)器進行數(shù)據(jù)交互的機制,用戶UI界面則基于HTML與Jquery資源庫構(gòu)建。
服務(wù)器運行狀態(tài)數(shù)據(jù)主要分為計算機硬件資源使用情況以及網(wǎng)絡(luò)帶寬占用情況兩類,相關(guān)數(shù)據(jù)基于Python的Psutil庫獲取,實現(xiàn)過程如下所示:
import psutil//引入Psutil庫
psutil.cpu_percent(interval) //獲取CPU運行狀態(tài)
Cpura=phymem=psutil.virtual_memory() //獲取內(nèi)存運行狀態(tài)
Memra=int(phymem.percent #內(nèi)存占用比例
Memus=int(phymem.used/1024/1024) #內(nèi)存使用量
Memsum=int(phymem.total/1024/1024) #內(nèi)存總量
Net=psutil.net_io_counters()
SendData=Net.bytes_sent #網(wǎng)絡(luò)發(fā)送字節(jié)數(shù)
Receive=Net.bytes_recv #網(wǎng)絡(luò)接受字節(jié)數(shù)
在微信小程序開發(fā)框架中,數(shù)據(jù)的交互與顯示采用了前后端分離的模式,其中數(shù)據(jù)的獲取是在js文件中通過編程訪問管理服務(wù)器的數(shù)據(jù)接口實現(xiàn),而數(shù)據(jù)的顯示則需要通過在wxml文件中構(gòu)建UI界面實現(xiàn)。需要注意的是,負責實現(xiàn)同一功能的js與wxml類型文件的名稱應(yīng)該完全相同。
首先需要在js文件中調(diào)用wx.request方法向指定的管理服務(wù)器數(shù)據(jù)訪問接口URL地址發(fā)送數(shù)據(jù)請求指令與參數(shù)并接收返回結(jié)果,實現(xiàn)過程如下所示:
var that=this
wx.request({
url:′ https://192.168.1.1/get.php′, //數(shù)據(jù)訪問接口地址,必需以https開頭
data:{ //向數(shù)據(jù)訪問接口發(fā)送參數(shù)
serId:101, //檢索編號為101的服務(wù)器運行數(shù)據(jù)
key:k100}, //用戶模塊的身份碼
success:function(res){ //回調(diào)函數(shù)
that.setData({data01:res.data[′srName ′]}) //將返回的數(shù)據(jù)賦值給頁面中的數(shù)據(jù)對象
that.setData({data02:res.data[′srCPU ′]})
that.setData({data03:res.data[′srMem ′]})}})
數(shù)據(jù)的實時刷新功能,使用微信小程序開發(fā)框架提供的setInterval定時器機制按固定的間隔時間向管理服務(wù)器不間斷的發(fā)送請求并獲取數(shù)據(jù)實現(xiàn)。
在完成數(shù)據(jù)獲取的操作后,需要在wxml文件中將各數(shù)據(jù)項加載至頁面顯示組件中,實現(xiàn)過程如下所示:
//將JS文件中的數(shù)據(jù)對象內(nèi)容顯示在界面中
對于數(shù)據(jù)的批量顯示功能,則通過頁面顯示組件提供的wx:for循環(huán)顯示機制對從管理服務(wù)器數(shù)據(jù)接口中返回的數(shù)據(jù)集進行循環(huán)遍歷操作來實現(xiàn)。
數(shù)據(jù)訪問接口以Web Service服務(wù)的方式構(gòu)建,使用PHP語言完成訪問請求數(shù)據(jù)的接收、對系統(tǒng)數(shù)據(jù)庫的操作與數(shù)據(jù)結(jié)果的返回。實現(xiàn)過程如下所示:
If($_GET["key"]!="k100") //用戶身份碼校驗
{echo"Error";} //驗證不通過則直接返回錯誤信息
$sId=$_GET["serid"]; //接收服務(wù)器ID
$cmd="select*from sertable where id=".$sId; //構(gòu)建SQL命令
$redata=sqlsrv_query($server,$cmd); //執(zhí)行SQL命令并獲取結(jié)果集,$server為數(shù)據(jù)庫連接句柄
$row=sqlsrv_fetch_array($redata,SQLSRV_FETCH_ASSOC) //從結(jié)果集中獲取數(shù)據(jù)行
$srinfo=array(′title ′=> $row[′srName ′],′srCPU ′=>$row[′srCPU ′],′srMem ′=>$row[′srMem ′]); //將數(shù)據(jù)打包為數(shù)組格式
echo json_encode($srinfo); //將數(shù)據(jù)以json格式封裝并返回至發(fā)送請求的模塊
本文針對Windows服務(wù)器集群的遠程實時管理需求,以微信小程序框架為核心設(shè)計了服務(wù)器運行實時監(jiān)控平臺方案,涵蓋了服務(wù)器運行數(shù)據(jù)的實時采集、存儲管理、訪問接口以及數(shù)據(jù)在微信小程序中的獲取與展示功能的運行原理與實現(xiàn)機制。使服務(wù)器管理人員能夠通過手機微信APP方便快捷的同時監(jiān)控多臺服務(wù)器的實時運行狀態(tài),提升了服務(wù)器管理工作的效率與故障響應(yīng)速度。