嚴(yán)競雄
(南通墅勤數(shù)據(jù)科技有限公司 江蘇省南通市 226002)
當(dāng)前,云計算、大數(shù)據(jù)、區(qū)塊鏈等新興技術(shù)日新月異,發(fā)展十分迅速。一些傳統(tǒng)的信息技術(shù)已經(jīng)被分布式系統(tǒng)、分布式數(shù)據(jù)庫、分布式計算所取代,對于線上服務(wù)器資源總量與利用率的數(shù)據(jù)獲取,目前有多種實現(xiàn)方式,比如Hadoop YARN、Spark等大數(shù)據(jù)平臺提供在線資源展示頁面,但是有的平臺,例如一些流媒體服務(wù)并不提供此類系統(tǒng)資源數(shù)據(jù)的獲取接口。同時,不同的平臺、不同的操作系統(tǒng)之間,數(shù)據(jù)的訪問與監(jiān)控也難以做到一致,不便于資源的統(tǒng)一管理、統(tǒng)一監(jiān)控和個性化定制,對于服務(wù)器集群或者是云平臺資源一體化管理還存在較多可以優(yōu)化和建設(shè)之處。因此,建立一款基于Webservice的個性化資源監(jiān)控系統(tǒng)對于云平臺建設(shè)具有積極的意義和推動作用。
Webservice是一種具有低耦合性的Web應(yīng)用程序,使用XML來實現(xiàn)多平臺,多系統(tǒng)間的數(shù)據(jù)交互,提供各個平臺系統(tǒng)間相互協(xié)同工作的能力。
運用Webservice,研發(fā)人員可以更好的將時間和精力聚焦到業(yè)務(wù)流程或者是業(yè)務(wù)邏輯的具體實現(xiàn),通過接口技術(shù),使建立在不同操作系統(tǒng)之上的應(yīng)用程序數(shù)據(jù)交互更為方便。
圖1:系統(tǒng)架構(gòu)示意圖
整個系統(tǒng)架構(gòu)示意圖如圖1所示,大致分為三部分,即C端(客戶端)、Web/Webservice服務(wù)器端和MySQL數(shù)據(jù)庫服務(wù)器端,客戶端通過系統(tǒng)信息收集軟件將CPU的利用率,內(nèi)存利用率、硬盤使用情況等資源信息的相關(guān)數(shù)據(jù)通過發(fā)送至Webservice的指定接口,Webservice接收到數(shù)據(jù),將數(shù)據(jù)處理、提交給后臺的MySQL數(shù)據(jù)庫服務(wù)器,后臺MySQL數(shù)據(jù)庫負(fù)責(zé)對數(shù)據(jù)的處理和存儲,實現(xiàn)數(shù)據(jù)的及時記錄與更新。系統(tǒng)維護人員可訪問Web服務(wù)器訪問統(tǒng)計數(shù)據(jù),根據(jù)得到的數(shù)據(jù)實現(xiàn)在線服務(wù)器的資源監(jiān)控。
數(shù)據(jù)庫采用MySQL,MySQL是一種關(guān)系型數(shù)據(jù)庫,支持Windows、Linux、FreeBSD等操作系統(tǒng),提供C、C++、Python、.NET等多種編程語言接口,為程序員跨平臺跨系統(tǒng)開發(fā)提供了方便。關(guān)于數(shù)據(jù)庫的設(shè)計,首先在MySQL中新建一個數(shù)據(jù)庫,并在新建的數(shù)據(jù)庫中新建一張表,表內(nèi)設(shè)有timestamp、ip、computer、system、releaseversion、platformversion、osversion、platform、machine、osarch、cpuname、cpucores、cpuuse、memcapa、memoryuse、diskinfor、diskuse、cpusn、boardsn、biossn、mac字段,分別代表時間戳、IP地址、計算機名、系統(tǒng)、發(fā)布版本號、平臺版本號、操作系統(tǒng)版本號、所屬平臺、系統(tǒng)架構(gòu)、位數(shù)、CPU型號、CPU核數(shù)、CPU利用率、內(nèi)存容量、內(nèi)存利用率、磁盤序列號、磁盤分區(qū)大小、CPU序列號、主板序列號、BIOS序列號和MAC地址。
Python支持跨平臺開發(fā)和部署,客戶端采用PyCharm作為IDE進行軟件開發(fā),客戶端主要分為兩部分,即信息搜集和信息上報,系統(tǒng)信息的搜集主要用到了WMI模塊,WMI的全稱為Windows Management Instrumentation,通過WMI模塊可以搜集當(dāng)前系統(tǒng)相關(guān)信息。在使用WMI模塊前,首先要通過import wmi代碼語句引入。如,需要獲取系統(tǒng)的版本信息和位數(shù)信息,可通過編輯如下代碼得到。
同樣,通過WMI模塊還可以獲得CPU信息、內(nèi)存信息、磁盤信息等,十分方便。
信息上報采用suds模塊調(diào)用Webservice接口,在使用前,通過from suds.client import Client代碼引入suds模塊,Webservice接口調(diào)用如下所示:
因為Webservice服務(wù)端設(shè)有SOAP Header認(rèn)證,因此,在客戶端中引入了token進行用戶鑒權(quán),通過Webservice的ClientInformationCollecter接口進行數(shù)據(jù)上報。
Webservice采用.NET Framework和C#語言進行設(shè)計開發(fā),通過MySqlConnection conn=ConnectionPool.getPool().getConnection();語句,使用MySQL連接池技術(shù)作為數(shù)據(jù)庫連接的資源分配手段,實現(xiàn)了Webservice與數(shù)據(jù)庫之間統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄露,從而實現(xiàn)了連接復(fù)用和更快的系統(tǒng)響應(yīng)速度。使用SOAP Header消息認(rèn)證,如在API接口函數(shù)執(zhí)行開始處調(diào)用if (header.ValideUser(header.UserName,header.PassWord))判斷語句,在客戶端連接Webservice時,通過用戶鑒權(quán),如果鑒權(quán)成功,才能對接Webservice接口進行數(shù)據(jù)傳輸,否則則返回認(rèn)證錯誤信息,從而提高了Webservice數(shù)據(jù)傳輸?shù)陌踩?。在?shù)據(jù)入庫前,Webservice應(yīng)用程序會先判斷數(shù)據(jù)庫中是否已經(jīng)含有需要存儲數(shù)據(jù)的表,若表不存在,則會先按照規(guī)定格式,如表前綴名加日期名,創(chuàng)建新的數(shù)據(jù)庫表,創(chuàng)建成功后,再在表內(nèi)添加數(shù)據(jù)。實現(xiàn)數(shù)據(jù)的按表、按天存放,使數(shù)據(jù)的存儲更加合理有序。
開發(fā)完畢后,需要對客戶端和服務(wù)端的程序分別打包發(fā)布,對于客戶端,可以使用pyinstaller對python程序進行打包,生成單個exe文件。對于服務(wù)端的Webservice應(yīng)用程序,可點擊Visual Studio菜單欄的生成,在下拉菜單中,點擊發(fā)布,在彈出的發(fā)布頁中選擇需要生成的文件路徑,點擊發(fā)布后即可。發(fā)布生成后,可將生成的一系列文件復(fù)制到IIS服務(wù)器指定目錄下,在IIS管理器中新建添加網(wǎng)站,在添加網(wǎng)站窗口中填入網(wǎng)站名稱、網(wǎng)站物理路徑等信息,同時,添加傳遞身份認(rèn)證。完成后點擊確定按鈕,啟動網(wǎng)站即可。
在客戶端運行系統(tǒng)信息搜集軟件,若數(shù)據(jù)庫表中產(chǎn)生數(shù)據(jù),則證明客戶端與服務(wù)端系統(tǒng)數(shù)據(jù)聯(lián)通。
通過分別對客戶端、服務(wù)端程序的設(shè)計、開發(fā)、部署,測試,最終完成一整套基于Webservice的系統(tǒng)信息上報平臺的設(shè)計與實現(xiàn)。介紹了客戶端利用Python編程語言進行信息搜集與上報的軟件開發(fā)過程,服務(wù)端利用.NET Framework和C#開發(fā)Webservice應(yīng)用程序的過程,Webservice技術(shù)實現(xiàn)了不同系統(tǒng)間數(shù)據(jù)共享的目的,達(dá)到了系統(tǒng)平臺間的整合與統(tǒng)一,它的可集成性、松散耦合等特點使系統(tǒng)的性能得到了提升,部署更加靈活,為研發(fā)運維一體化建設(shè)提供了技術(shù)支持,基于Webservice的系統(tǒng)信息上報平臺使負(fù)責(zé)線上服務(wù)器運維的工作人員有更多的精力投入到如何優(yōu)化資源配置,而非如以往將重心放在數(shù)據(jù)監(jiān)控上,提高了運維人員的工作效率,同時也提升了企業(yè)的競爭力、生產(chǎn)力。