一种服务网格调度系统的优化设计与实现

2010-05-26 08:28张燕丽
关键词:集群调度服务器

张燕丽

(广东农工商职业技术学院 计算机科学系,广州 510507)

网格技术作为20世纪90年代中期出现的新技术,将异地或异构的计算机组成集群,当作一个单一虚拟系统或者一个虚拟组织,他为广义的资源共享系统的建立奠定了有效而可靠的基础[1]。一般而言.网格系统被分类为三个主要的范畴:计算网格、数据网格和服务网格[2]。目前,服务网格 (Grid Services)正以爆炸式的增长势头向前发展。在众多Web Service服务中,有许多如大型的网络考试、网络报名、网络查询等服务,存在用户数量多、分布地域广、访问并发时间集中等特点。需要提供服务器集群,统一对外提供服务。考虑到用户分布和服务并发的不均衡性,不能使用简单的集中式本地集群(Local Centralized Cluster),需要采取分布式异地集群(Global Distributed Cluster)的方式。现实工作中,集群中的服务器的大多数为异构的,同时要求集群要有一定的扩充能力,能够根据预计用户的多少随时增设服务器,来扩充整个系统的服务能力。异地性构的特性,使得服务调度与优化问题成为网格技术中急需解决的关键问题。

1 调度系统的体系结构

在基于Web service的服务网格中,为适应对服务器的高性能、高可用性和灵活的扩展性等高要求,需要引入调度服务器,来充当服务任务的分配者(Service Dispatcher)和集群的管理者(Cluster Manager)[3]。引入调度服务器后,集群服务器对外具有唯一的IP,即调度服务器IP,也称为集群地址。用户访问集群地址,调度服务器会在对用户请求地址等信息进行分析后,从集群中根据一定的策略,确定提供服务的节点服务器,然后实现任务的调度。用户不需知道具体提供服务的服务器是谁,可以说服务网格本身就是一种并行或分布式处理的系统,其体系结构如图1所示。

为了保证系统的高可用性和稳健性,防止调度服务器故障造成服务无法正常进行,本系统在实现时采用双机热备技术,引入备份调度服务器,一旦主调度服务器发生故障,备份调度服务器立即接管相应的工作,保证系统的高可用性。

2 调度实现的具体方法

从图1看,如果所有的的客户访问流量均通过调度服务器,调度服务器将成为整个系统的瓶颈。为此,必须采取一定的措施,保证在服务过程中流量不经过调度服务器。在本系统的具体实现中,采用HTTP重定向技术(图2)。

图1 调度系统的体系结构示意图

图2 HTTP重定向工作过程

HTTP重定向是指调度服务器在接收用户的HTTP请求后,指示用户用另外的一个URL去获取请求内容,由该URL对应的服务器来响应这个请求,提供服务[4]。该方法在调度分配后,会在用户和真正提供服务的节点服务器之间直接建立新的连接,并通过该连接为用户提供服务。所以,调度服务器仅在服务的最初进行任务分配,在服务的过程中,流量将不再经过调度服务器,从而大大降低调度服务器的负载,避免其成为整个系统的瓶颈。

3 调度策略的优化方案

服务网格中,服务器集群特殊的构建方式,势必造成集群内各服务器处理能力和地理分布的差异。为了更加合理地把负载分配给集群内部的各个节点服务器,使用户获得最快的服务响应,得到最好的用户体验,调度策略要充分考虑服务的就近性和各节点服务器当前的负载状况及处理能力差异。因此,需要对各服务器的负载进行监控,并采取一些的算法保证服务的就近性。

3.1 节点服务器负载状况的监控

3.1.1 衡量节点服务器负载状况的综合指标

服务器的负载是否适中,根据管理员经验,可以从以下服务器指标对其负载进行评价:服务器的当前CPU利用率:CPUi;内存利用率:MEMORYi;磁盘空间利用情况:DISKi;对请求的响应时间:。

在本调度算法中,通过动态调整权重Ri来计算综合负载(Integrated loadi):

由于各参数在反映服务器负载时,很难确定所占比重,在具体实现时,本系统采用静态设置,动态修改的方式。先由管理员根据经验值设置权重及各指标上限。如可预设:CPU系数置为4,内存系数置为3,响应时间置为2,磁盘系数置为1,CPU占用应在50%以下,超过70%,则可认为服务器无法正常工作;其内存占用与磁盘占用应在80%以下;同时响应时间应在100 ms以内。当服务过程中,监控到某节点服务器参数超出指标上限时,由系统自动将其权重置为最大值100。从而使该节点服务器的综合负载远大于其他节点服务器。

根据调度服务器采集的数据分析,当某节点服务器某些参数超出正常值(如CPU占用达到70%)且居高不下时,可判定该服务器单点失效,从而进行故障切换,将该节点服务器的服务连接转到负载较低的节点服务器,以保证服务的继续进行。

3.1.2 节点服务器负载信息的采集

节点服务器负载参数的采集,由各节点服务器自行通过本地的负载信息采集程序(MonitorClient)调用Windows操作系统的Performance Logs and Alerts(性能日志和警报)服务来获取本地的CPU利用率、内存利用率、磁盘使用率等系统性能信息。并形成数据包,定期传递到调度服务器,也就是监控服务器。

3.1.3 定期汇报制度及动态负载表的生成

调度服务器在进行任务分配时,需要了解各节点服务器的负载状况,从而避免将任务分配给超负载的节点服务器。因此,调度服务器需要随时了解各节点服务器的最新负载状况。为此本系统通过调度服务器端的负载信息收集与监控程序(MonitorServer),在调度服务器与各节点服务器之间,建立了定期汇报制度,各节点服务器每隔10 ms向调度服务器报告其各参数值,同时调度服务器定期通过主动探询获取各服务器的节点网络响应时间,并在调度服务器中形成“动态负载表”,以便调度服务器即时掌握并监控各节点服务器的当前负载情况,并在分配用户请求时,做出均衡选择,以保证服务的质量。调度服务器除要完成服务任务分配的工作之外,首先要完成各节点服务器的负载监控。因此,调度服务器也成为监控服务器。

3.2 服务就近性的的方案选择

服务的就近性,是指网络距离的就近性[6]。就服务就近性判断问题,本系统讨论了3种方案:

方案1:理想的就近性参数-网络延迟和路由器跳数。通过比较提供服务的服务器到用户的网络延迟或所经过的路由器跳数来衡量服务提供的远近[7]。这样方案在理论上是比较理想的,在实现上受到各种因素的制约,如防火墙。所以在具体实现上存在一定难度。

方案2:仿照静态路由,建立就近表。在具体应用时,当服务请求到达时,可利用预先设置的IP数据库(该数据库须不断更新),判断用户地理情况,从预先设置的服务就近表,查表返回就近的服务器。静态就近表,由网络管理员静态配置,按照已知的服务器分布情况,给相应的IP范围设置3个就近的服务站点IP,每个站点有不同的优先级。

方案3:动态就近表的建立与使用动态就近表,可以仿照路由器的动态路由表的建立方式,通过动态学习的方式取得。当一个用户请求到达调度服务器时,调度服务器会通知集群中的各应用服务器,请他们检查各自站点到该用户的网络往返时延。各应用服务器检测后,将结果发回调度服务器,调度服务器从中选择最短时间对应的3个服务器做为推荐就近服务器,并由此建立动态就近表。

考虑到设计实现的可行性,本系统采用第2套方案,由网络管理员根据已知服务器分布,建立静态就近表,形成IP数据库。服务请求到达时,通过检索IP数据库,确定服务请求发出的地理位置,并通过检索静态就近表,确定推荐的3个就近服务器。

4 调度的优化算法

本系统具体调度算法是在就近的基础上,参考节点服务器的负载状况,选取最佳服务器。节点服务器端:周期性地获取自身的负载参数;周期性将负载参数形成“报告包”,向调度服务器报告各自的负载情况;响应由调度服务器转发的客户机请求。

调度服务器(也称监控服务器)端:周期性对各节点服务器定期报告的负载信息进行收集;周期性通过主动探询获取各节点服务器的网络响应时间;周期性更新动态负载表,计算并更新各结点服务器的综合负载指标;新服务请求到达时,查静态就近表获得推荐的三个节点服务器IP及其优先级;从监控形成的动态负载表中,获取三个推荐服务器的负载实际水平;检查推荐的各服务器负载是否超出上限;若均超出上限,则将请求转发到动态负载表中综合负载指标最低的的节点服务器;否则,将请求转发到综合负载指标最低的推荐服务器。

5 服务网格调度系统的设计与实现

本系统主要使用C++平台开发,采用Client/Server架构。节点服务器端主要完成负载信息采集和提供WEB服务;调度服务器本身也是节点服务器监控平台,除提供对各节点服务器负载监控外,主要完成任务调度,系统管理,基本参数配置等功能。

5.1 节点服务器端-负载信息采集程序(MonitorClient)

负载信息采集程序:主要负责本服务器负载信息的定时采集,包括CPU利用情况、内存利用情况、磁盘空间利用情况,并定时向调度服务器报告其动态采集的负载信息。要获得各服务器节点的负载信息,可以在各服务器结点端安装的MonitorClient程序。通过调用Windows操作系统的Performance Logs and Alerts(性能记录日志及警报)服务来获取CPU利用率、内存利用率、磁盘使用率等系统性能信息。

5.2 调度服务器端

(1)负载信息收集与监控模块-MonitorServer。主要负责收集各节点服务器定时发来的负载汇报信息;定期检测各节点服务器的响应时间;将各节点服务器的CPU利用情况、内存利用情况、磁盘空间利用情况、服务响应时间等信息汇总显示,并对超负载的服务器特殊处理。

本系统中,各服务器节点和调度服务器之间的通讯为TCP/IP通讯。各服务器节点通过本地安装的MonitorClient程序来获取本地CPU利用率、内存利用率、磁盘使用率等系统性能信息,并定时向调度服务器汇报;而调度服务器定期通过主动探询获取各服务器的节点网络响应时间。

为了取得各服务器节点的相关信息,同样需要将调度服务器和集群中的各服务器结点一一建立通信关系。因此,在调度服务器端安装好MonitorServer程序,也必须在同一目录下建立其配置文件Server.ini,指定各自的IP和及通信端口。调度服务器,主要用于监控集群中各服务器节点状态,并收集显示各服务器节点的以下信息:机器名、IP地址、CPU利用率、内存利用率、磁盘使用率和网络响应时间等。并将收集到的信息形成动态负载表。

(2)系统配置和管理模块-Configuration&Management。决策模块:主要负责根据就近表和监控模块取得的各服务器节点负载信息,调用负载均衡算法进行决策,确定由哪个服务器节点为用户请求提供服务,返回服务器节点IP。

其具体功能包括:静态就近表的建立;负载参数权值与上限的设置与修改;服务器故障切换等服务。

(3)调度决策模块-ServerDecision。在调度服务器端,除了要设计监控程序,以实现对集群中各服务器节点的状态监控,获取各服务器节点的动态负载参数外,当一个真正的服务请求到达时,还要进行负载均衡,选择最恰当的服务器,对请求提供最佳地服务。因此在调度服务器上还要设计1个ServerDecision程序,用于确定服务的提供者IP。

服务请求到达时,通过检索就近表,提取推荐的就近服务器,利用加权算法从3个推荐站点中找加权计算结果最小的服务站为用户提供服务。若3个推荐站点均不可用,则选择MonitorServer中,当时负载最低的服务站点为用户提供服务。最后返回确定提供服务的服务器IP。

(4)请求转发模块-Despatcher。该模块主要负责在请求到达时,取得客户端IP;调用决策模块取得提供服务的节点服务器IP(即 getIP,使用 Request.ServerVariables("REMOTE_ADDR")[8]来取得客户端的 IP地址),并将服务请求利用HTTP重定向的方式转发到决策模块所确定的服务器IP(即Redirector,调用ASP中的重定向方法Response.redirect(),让浏览器立即重定向到程序指定的IP地址[9])。

6 结论

本系统首先完成了服务网格中的节点服务器的监控功能,调试服务器本身也成为了监控服务器,实时对各结点服务器的负载状况进行监控。同时,做为调度系统,本系统的调度策略,充分考虑了网格中各节点服务器的处理能力的差异和地理分布的差异,更加合理地把负载分配给集群内部的节点服务器,使用户获得最快的服务响应。该系统的优点是具有灵活的扩展性;避免服务器单点失效造成地区性系统瘫痪;其调度服务器的双机热备技术保证了整个系统运行的稳定性。

[1]吴永和,马晓玲.基于数据网格的教育资源服务系统的实现[J].华东师范大学学报:自然科学版,2006(8):26-27

[2]杨昭昭,黄必清.基于Web服务的应用网格体系结构研究[J].计算机应用研究,2005(7):125-127

[3]王学智,刘罕杰,孙正民.基于BP网络的装备维护人员保障能力评估[J].四川兵工学报,2010(4):4-7

[4]武光明.ASP.NET应用程序中网页重定向及其数据传递技巧[J].黑龙江科技信息,2008(10):67-69

[5]胡凯,马雪洁,邓可.网络机群计算的负载指标研究与实现[J].计算机工程与设计,2007(7):150-153

[6]吴蔚.网络站点的负载均衡技术探索[J].计算机时代,2004(7):29-32

[7]王传殊,王意洁.基于网络延迟的P2P路由算法的研究[J].计算机科学,2007(8):27-32

[8]RUSSELL A.ASP.NET与VB.NET从入门到精通.高春蓉,谷宇等译.第1版.电子工业出版社,2002

[9]DOUGLAS E.TCP/IP网络互连第3卷客户/服务器编程及应用Linux/POSIX Sockets版[M].北京:人民邮电出版社,2002

猜你喜欢
集群调度服务器
《调度集中系统(CTC)/列车调度指挥系统(TDCS)维护手册》正式出版
通信控制服务器(CCS)维护终端的设计与实现
基于强化学习的时间触发通信调度方法
一种基于负载均衡的Kubernetes调度改进算法
海上小型无人机集群的反制装备需求与应对之策研究
虚拟机实时迁移调度算法
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
中国服务器市场份额出炉
勤快又呆萌的集群机器人