论文部分内容阅读
摘要:组通信是构造高可靠分布式系统的重要基石。以组通信技术为基础,提出了基于Internet的多媒体考试系统平台中集群管理器的结构和设计,详细描述了实现中所采用的可靠全序组播算法、组成员管理、流量控制算法、负载平衡及失效转发算法。
关键词:组通信;多媒体考试系统
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 11-0000-02
一、引言
[]当前,企业级的计算系统应用日益广泛,而高可用性、高容错性和高可靠性是这些企业级的关键性应用所必须具有的特性,使用集中式的服务架构将无法满足这些需求。
近十年来,组通信(Group Communication)[1][2][3]领域的研究取得重大进展,对于可靠组播、消息排序、失效检测等关键性问题都已提出了不少解决方法。一些操作系统和数据库系统都已经使用组通信技术来构造集群系统。
本文以我们开发的基于Internet的多媒体考试系统平台作为实例,具体描述了将组通信技术应用于构造服务集群系统的方法。
二、系统需求和体系结构
基于Internet的多媒体考试系统平台提供从题库系统、成卷系统、考试规划一直到计算机考试、自动阅卷、答卷信息评价的全线服务,自动化程度高,实现了考试的完全无纸化。它对于系统的性能提出了以下需求:
高扩展性:由于可以通过Internet进行考试,考生人数不受局域网计算机数的限制,因此要求系统必须能够承受大量考生同时参加多门课程的考试,而不会产生性能瓶颈。
高可靠性:考试信息、试题、考生答案等重要数据不能丢失。
高可用性:当系统出现故障时,应该在限定时间内(秒级)自动恢复,不影响考试的进行。
为了满足以上需求,我们基于组通信技术将系统设计为一个集群结构,其包含多个考试服务器,客户端通过负载平衡技术选择一个服务器进行通信,当连接的服务器失效后,客户端可以重新连接到其他服务器,继续进行相关的操作而考试不受影响,这一过程对于用户(考生)是透明的。
每个服务器结点主要由web服务、集群管理器(Cluster Manager,CM)、考试服务器(Exam Server,ES)和数据库服务器四种服务组成,其中CM主要负责使用组通信协议和其它结点的CM进行可靠通信以实现状态复制,ES和数据库服务器进行交互,具体实现应用逻辑如登陆、交卷、查询等。
集群管理器CM主要包括以下处理模块:
可靠全序组播:由于一个节点的消息要发送给集群内所有其他节点,为了使节点之间进行高效的消息传输,采用组播(multicast)方式,实现一对多通信。但是其缺陷是不能保证消息的可靠传递,此外为了保证各节点的状态一致,使各个节点按照相同的顺序接收消息也很重要(即全序,Total order)。可靠全序组播模块就是要保证节点之间使用IP multicast达到消息的可靠、全序传递的目的。
组成员管理:将集群内的服务节点有机组织起来,负责节点的加入、离开和失效的处理,保证所有生存的节点保持相同的组成员视图。
流量控制:如果一个结点由于不能及时处理接收的消息而导致其缓冲区溢出,从而引起大量消息重传。为此采用流量控制机制控制消息的发送速率,以达到流控的目的。
三、可靠全序组播
每个结点都各自维护着一个本地消息计数器,作为发送的消息的顺序号,称为结点顺序号。当某个结点要向全组的结点发送消息m时,给m设置结点顺序号,然后将m发送给集群内一个称为sequencer的结点S(sequencer的产生见下一节)。S还维护着一个全局消息计数器,称为全局顺序号。S每收到一个消息,就给消息设置全局顺序号,再将消息放入它的发送队列。一个线程负责将发送队列中的消息依次按照一定速率在网络中组播。
发送结点将消息m发送给S后,以组播形式接收,如果接收到m,则说明m已经可靠到达S,可以继续发送下一个消息;如果在一定时间内未接收到m,则认为m丢失,重新发送m直到S接收成功为止。同时,S记录着每个结点最后发送的消息的结点顺序号,从而避免接收到重复消息。
所有接收结点对于S组播的消息采取负向应答方式。每个结点都记录着下一个预期接收的消息的全局顺序号Ne。当接收到全局顺序号为Nm的消息时,如果Ne>Nm,则说明此消息是重复消息,将其丢弃;如果Ne=Nm,则将此消息放入接收队列,并且Ne加1;如果Ne<Nm,说明有消息丢失,向S发送一个NACK应答消息,其包含全局顺序号Ne。S接收到NACK后,将从Ne到当前全局顺序号的消息放入到发送队列(去掉重复的消息)重新组播发送。由于接收者是根据新收到的消息序号来判断是否有消息丢失,当S没有消息发送时,则接收者将无法判断丢失情况。因此,当S的发送队列没有消息后,S会周期性的组播一个Declare消息,声明当前的全局顺序号,以激发丢失消息的接收者进行应答。
四、组成员管理
(一)结点启动和加入
结点p启动后,首先周期性的组播一个Discover消息,以查找当前集群内的sequencer;如果在一定时间内(10秒)没有收到应答,则将自己设置为sequencer,初始化各种状态,建立集群并准备接受其它结点随后的加入。
如果集群已经存在,则当前的sequencer S接收到Discover消息后,对p进行权限验证,如果合法,则向p发送应答,然后S将当前成员列表信息和应用状态信息(如已登陸考生信息、已交卷考生信息等)发送给p,状态传输完成后,S使用可靠组播向其它所有结点发送p加入的消息。各结点都更新自己的成员列表信息。p正式加入了集群。 由于每时刻只能有一个结点加入,如果这时S在处理其它结点的加入,S向p发送Waiting消息,p等待一段时间后重新再加入。
如果这时恰好S失效(见下文),则集群内的结点向p发送Waiting消息,p等待一段时间后重新再加入。
(二)结点离开
如果结点p要离开集群,则向sequencer S发送Leave消息,S接收到后,使用可靠组播向其它所有结点发送p离开的消息。各结点都更新自己的成员列表信息。然后S向p发送应答,同意其离开,p正式离开集群。
如果这时S恰好失效,则p将等到新的sequencer产生后再重新发送Leave消息。在p正式离开之前,它仍是集群内的成员。
五、流量控制
集群系统不但要保证所有成员节点具有一致的正确状态,而且要具有良好的性能。
方法是:在sequencer发送每个消息时引入一个可变的延迟时间T。T的初值为0,这时sequencer发送消息而没有延迟;每当sequencer接收到一个NACK的应答时,T增加2ms,当T增加到30ms时,将不再增加;每当sequencer连续发送30个消息而沒有收到NACK并且T>0时,则T减小3ms(当T<0,则T=0)。这样延迟时间缓慢上升,而下降较快,以便系统尽力保持较好的性能。
六、负载平衡和失效转发
我们采取在客户端进行负载平衡。具体过程如下:
首先浏览器下载ActiveX客户端后,客户端执行,其首先向下载服务器的CM发出请求,CM将当前集群内各成员结点的相关信息和一个称为视图id的值返回给客户端,然后客户端采取具体的负载平衡算法如随机法、轮流法等选择一个服务结点,请求其服务。这样不同客户端的请求可以由集群内各结点分担处理。当连接的服务结点不可用时,客户端重新选择一个服务结点就可以继续运行。
由于集群内的结点可以动态加入、退出或者失效,因此客户端所保存的成员结点的信息可能不准确,对于这个问题我们的解决方法是:客户端初始从下载服务器的CM得到了一个视图id,以后每次客户端向服务器发出的请求都包括该视图id,服务器检查该视图id是否与自己的视图id相等,如果不等则说明客户端的成员结点的信息已经过时,于是向客户端发送目前最新的成员结点信息和新的视图id。
七、结论
本文详细说明了我们采用的可靠全序组播算法、组成员管理、流量控制算法、负载平衡和失效转发机制。具有较高的性能。
参考文献:
[1]Gregory Chockler,Idit Keidar, and Roman Vitenberg.Group communication specifications:A comprehensive study.ACM Computing Surveys,33(4):1-43,December,2001
[2]K.P.Birman.A Review of Experiences with Reliable Multicast.Software-Practice and Experience,29(9),741-774,1999
[3]KAASHOEK,M.F.AND TANENBAUM,A.S.An evaluation of the Amoeba group communication.system.In 16th International Conference on Distributed Computing Systems (ICDCS) (May),436-447,1996
关键词:组通信;多媒体考试系统
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 11-0000-02
一、引言
[]当前,企业级的计算系统应用日益广泛,而高可用性、高容错性和高可靠性是这些企业级的关键性应用所必须具有的特性,使用集中式的服务架构将无法满足这些需求。
近十年来,组通信(Group Communication)[1][2][3]领域的研究取得重大进展,对于可靠组播、消息排序、失效检测等关键性问题都已提出了不少解决方法。一些操作系统和数据库系统都已经使用组通信技术来构造集群系统。
本文以我们开发的基于Internet的多媒体考试系统平台作为实例,具体描述了将组通信技术应用于构造服务集群系统的方法。
二、系统需求和体系结构
基于Internet的多媒体考试系统平台提供从题库系统、成卷系统、考试规划一直到计算机考试、自动阅卷、答卷信息评价的全线服务,自动化程度高,实现了考试的完全无纸化。它对于系统的性能提出了以下需求:
高扩展性:由于可以通过Internet进行考试,考生人数不受局域网计算机数的限制,因此要求系统必须能够承受大量考生同时参加多门课程的考试,而不会产生性能瓶颈。
高可靠性:考试信息、试题、考生答案等重要数据不能丢失。
高可用性:当系统出现故障时,应该在限定时间内(秒级)自动恢复,不影响考试的进行。
为了满足以上需求,我们基于组通信技术将系统设计为一个集群结构,其包含多个考试服务器,客户端通过负载平衡技术选择一个服务器进行通信,当连接的服务器失效后,客户端可以重新连接到其他服务器,继续进行相关的操作而考试不受影响,这一过程对于用户(考生)是透明的。
每个服务器结点主要由web服务、集群管理器(Cluster Manager,CM)、考试服务器(Exam Server,ES)和数据库服务器四种服务组成,其中CM主要负责使用组通信协议和其它结点的CM进行可靠通信以实现状态复制,ES和数据库服务器进行交互,具体实现应用逻辑如登陆、交卷、查询等。
集群管理器CM主要包括以下处理模块:
可靠全序组播:由于一个节点的消息要发送给集群内所有其他节点,为了使节点之间进行高效的消息传输,采用组播(multicast)方式,实现一对多通信。但是其缺陷是不能保证消息的可靠传递,此外为了保证各节点的状态一致,使各个节点按照相同的顺序接收消息也很重要(即全序,Total order)。可靠全序组播模块就是要保证节点之间使用IP multicast达到消息的可靠、全序传递的目的。
组成员管理:将集群内的服务节点有机组织起来,负责节点的加入、离开和失效的处理,保证所有生存的节点保持相同的组成员视图。
流量控制:如果一个结点由于不能及时处理接收的消息而导致其缓冲区溢出,从而引起大量消息重传。为此采用流量控制机制控制消息的发送速率,以达到流控的目的。
三、可靠全序组播
每个结点都各自维护着一个本地消息计数器,作为发送的消息的顺序号,称为结点顺序号。当某个结点要向全组的结点发送消息m时,给m设置结点顺序号,然后将m发送给集群内一个称为sequencer的结点S(sequencer的产生见下一节)。S还维护着一个全局消息计数器,称为全局顺序号。S每收到一个消息,就给消息设置全局顺序号,再将消息放入它的发送队列。一个线程负责将发送队列中的消息依次按照一定速率在网络中组播。
发送结点将消息m发送给S后,以组播形式接收,如果接收到m,则说明m已经可靠到达S,可以继续发送下一个消息;如果在一定时间内未接收到m,则认为m丢失,重新发送m直到S接收成功为止。同时,S记录着每个结点最后发送的消息的结点顺序号,从而避免接收到重复消息。
所有接收结点对于S组播的消息采取负向应答方式。每个结点都记录着下一个预期接收的消息的全局顺序号Ne。当接收到全局顺序号为Nm的消息时,如果Ne>Nm,则说明此消息是重复消息,将其丢弃;如果Ne=Nm,则将此消息放入接收队列,并且Ne加1;如果Ne<Nm,说明有消息丢失,向S发送一个NACK应答消息,其包含全局顺序号Ne。S接收到NACK后,将从Ne到当前全局顺序号的消息放入到发送队列(去掉重复的消息)重新组播发送。由于接收者是根据新收到的消息序号来判断是否有消息丢失,当S没有消息发送时,则接收者将无法判断丢失情况。因此,当S的发送队列没有消息后,S会周期性的组播一个Declare消息,声明当前的全局顺序号,以激发丢失消息的接收者进行应答。
四、组成员管理
(一)结点启动和加入
结点p启动后,首先周期性的组播一个Discover消息,以查找当前集群内的sequencer;如果在一定时间内(10秒)没有收到应答,则将自己设置为sequencer,初始化各种状态,建立集群并准备接受其它结点随后的加入。
如果集群已经存在,则当前的sequencer S接收到Discover消息后,对p进行权限验证,如果合法,则向p发送应答,然后S将当前成员列表信息和应用状态信息(如已登陸考生信息、已交卷考生信息等)发送给p,状态传输完成后,S使用可靠组播向其它所有结点发送p加入的消息。各结点都更新自己的成员列表信息。p正式加入了集群。 由于每时刻只能有一个结点加入,如果这时S在处理其它结点的加入,S向p发送Waiting消息,p等待一段时间后重新再加入。
如果这时恰好S失效(见下文),则集群内的结点向p发送Waiting消息,p等待一段时间后重新再加入。
(二)结点离开
如果结点p要离开集群,则向sequencer S发送Leave消息,S接收到后,使用可靠组播向其它所有结点发送p离开的消息。各结点都更新自己的成员列表信息。然后S向p发送应答,同意其离开,p正式离开集群。
如果这时S恰好失效,则p将等到新的sequencer产生后再重新发送Leave消息。在p正式离开之前,它仍是集群内的成员。
五、流量控制
集群系统不但要保证所有成员节点具有一致的正确状态,而且要具有良好的性能。
方法是:在sequencer发送每个消息时引入一个可变的延迟时间T。T的初值为0,这时sequencer发送消息而没有延迟;每当sequencer接收到一个NACK的应答时,T增加2ms,当T增加到30ms时,将不再增加;每当sequencer连续发送30个消息而沒有收到NACK并且T>0时,则T减小3ms(当T<0,则T=0)。这样延迟时间缓慢上升,而下降较快,以便系统尽力保持较好的性能。
六、负载平衡和失效转发
我们采取在客户端进行负载平衡。具体过程如下:
首先浏览器下载ActiveX客户端后,客户端执行,其首先向下载服务器的CM发出请求,CM将当前集群内各成员结点的相关信息和一个称为视图id的值返回给客户端,然后客户端采取具体的负载平衡算法如随机法、轮流法等选择一个服务结点,请求其服务。这样不同客户端的请求可以由集群内各结点分担处理。当连接的服务结点不可用时,客户端重新选择一个服务结点就可以继续运行。
由于集群内的结点可以动态加入、退出或者失效,因此客户端所保存的成员结点的信息可能不准确,对于这个问题我们的解决方法是:客户端初始从下载服务器的CM得到了一个视图id,以后每次客户端向服务器发出的请求都包括该视图id,服务器检查该视图id是否与自己的视图id相等,如果不等则说明客户端的成员结点的信息已经过时,于是向客户端发送目前最新的成员结点信息和新的视图id。
七、结论
本文详细说明了我们采用的可靠全序组播算法、组成员管理、流量控制算法、负载平衡和失效转发机制。具有较高的性能。
参考文献:
[1]Gregory Chockler,Idit Keidar, and Roman Vitenberg.Group communication specifications:A comprehensive study.ACM Computing Surveys,33(4):1-43,December,2001
[2]K.P.Birman.A Review of Experiences with Reliable Multicast.Software-Practice and Experience,29(9),741-774,1999
[3]KAASHOEK,M.F.AND TANENBAUM,A.S.An evaluation of the Amoeba group communication.system.In 16th International Conference on Distributed Computing Systems (ICDCS) (May),436-447,1996