严竞雄
(南通墅勤数据科技有限公司 江苏省南通市 226002)
当前,云计算、大数据、区块链等新兴技术日新月异,发展十分迅速。一些传统的信息技术已经被分布式系统、分布式数据库、分布式计算所取代,对于线上服务器资源总量与利用率的数据获取,目前有多种实现方式,比如Hadoop YARN、Spark等大数据平台提供在线资源展示页面,但是有的平台,例如一些流媒体服务并不提供此类系统资源数据的获取接口。同时,不同的平台、不同的操作系统之间,数据的访问与监控也难以做到一致,不便于资源的统一管理、统一监控和个性化定制,对于服务器集群或者是云平台资源一体化管理还存在较多可以优化和建设之处。因此,建立一款基于Webservice的个性化资源监控系统对于云平台建设具有积极的意义和推动作用。
Webservice是一种具有低耦合性的Web应用程序,使用XML来实现多平台,多系统间的数据交互,提供各个平台系统间相互协同工作的能力。
运用Webservice,研发人员可以更好的将时间和精力聚焦到业务流程或者是业务逻辑的具体实现,通过接口技术,使建立在不同操作系统之上的应用程序数据交互更为方便。
图1:系统架构示意图
整个系统架构示意图如图1所示,大致分为三部分,即C端(客户端)、Web/Webservice服务器端和MySQL数据库服务器端,客户端通过系统信息收集软件将CPU的利用率,内存利用率、硬盘使用情况等资源信息的相关数据通过发送至Webservice的指定接口,Webservice接收到数据,将数据处理、提交给后台的MySQL数据库服务器,后台MySQL数据库负责对数据的处理和存储,实现数据的及时记录与更新。系统维护人员可访问Web服务器访问统计数据,根据得到的数据实现在线服务器的资源监控。
数据库采用MySQL,MySQL是一种关系型数据库,支持Windows、Linux、FreeBSD等操作系统,提供C、C++、Python、.NET等多种编程语言接口,为程序员跨平台跨系统开发提供了方便。关于数据库的设计,首先在MySQL中新建一个数据库,并在新建的数据库中新建一张表,表内设有timestamp、ip、computer、system、releaseversion、platformversion、osversion、platform、machine、osarch、cpuname、cpucores、cpuuse、memcapa、memoryuse、diskinfor、diskuse、cpusn、boardsn、biossn、mac字段,分别代表时间戳、IP地址、计算机名、系统、发布版本号、平台版本号、操作系统版本号、所属平台、系统架构、位数、CPU型号、CPU核数、CPU利用率、内存容量、内存利用率、磁盘序列号、磁盘分区大小、CPU序列号、主板序列号、BIOS序列号和MAC地址。
Python支持跨平台开发和部署,客户端采用PyCharm作为IDE进行软件开发,客户端主要分为两部分,即信息搜集和信息上报,系统信息的搜集主要用到了WMI模块,WMI的全称为Windows Management Instrumentation,通过WMI模块可以搜集当前系统相关信息。在使用WMI模块前,首先要通过import wmi代码语句引入。如,需要获取系统的版本信息和位数信息,可通过编辑如下代码得到。
同样,通过WMI模块还可以获得CPU信息、内存信息、磁盘信息等,十分方便。
信息上报采用suds模块调用Webservice接口,在使用前,通过from suds.client import Client代码引入suds模块,Webservice接口调用如下所示:
因为Webservice服务端设有SOAP Header认证,因此,在客户端中引入了token进行用户鉴权,通过Webservice的ClientInformationCollecter接口进行数据上报。
Webservice采用.NET Framework和C#语言进行设计开发,通过MySqlConnection conn=ConnectionPool.getPool().getConnection();语句,使用MySQL连接池技术作为数据库连接的资源分配手段,实现了Webservice与数据库之间统一的连接管理,避免数据库连接泄露,从而实现了连接复用和更快的系统响应速度。使用SOAP Header消息认证,如在API接口函数执行开始处调用if (header.ValideUser(header.UserName,header.PassWord))判断语句,在客户端连接Webservice时,通过用户鉴权,如果鉴权成功,才能对接Webservice接口进行数据传输,否则则返回认证错误信息,从而提高了Webservice数据传输的安全性。在数据入库前,Webservice应用程序会先判断数据库中是否已经含有需要存储数据的表,若表不存在,则会先按照规定格式,如表前缀名加日期名,创建新的数据库表,创建成功后,再在表内添加数据。实现数据的按表、按天存放,使数据的存储更加合理有序。
开发完毕后,需要对客户端和服务端的程序分别打包发布,对于客户端,可以使用pyinstaller对python程序进行打包,生成单个exe文件。对于服务端的Webservice应用程序,可点击Visual Studio菜单栏的生成,在下拉菜单中,点击发布,在弹出的发布页中选择需要生成的文件路径,点击发布后即可。发布生成后,可将生成的一系列文件复制到IIS服务器指定目录下,在IIS管理器中新建添加网站,在添加网站窗口中填入网站名称、网站物理路径等信息,同时,添加传递身份认证。完成后点击确定按钮,启动网站即可。
在客户端运行系统信息搜集软件,若数据库表中产生数据,则证明客户端与服务端系统数据联通。
通过分别对客户端、服务端程序的设计、开发、部署,测试,最终完成一整套基于Webservice的系统信息上报平台的设计与实现。介绍了客户端利用Python编程语言进行信息搜集与上报的软件开发过程,服务端利用.NET Framework和C#开发Webservice应用程序的过程,Webservice技术实现了不同系统间数据共享的目的,达到了系统平台间的整合与统一,它的可集成性、松散耦合等特点使系统的性能得到了提升,部署更加灵活,为研发运维一体化建设提供了技术支持,基于Webservice的系统信息上报平台使负责线上服务器运维的工作人员有更多的精力投入到如何优化资源配置,而非如以往将重心放在数据监控上,提高了运维人员的工作效率,同时也提升了企业的竞争力、生产力。