龙空技术网

构件容错是什么?基于CORBA的望远镜观测控制系统构件容错算法

漫聊知识 600

前言:

如今咱们对“bully算法协调者”大体比较关切,你们都需要知道一些“bully算法协调者”的相关知识。那么小编在网络上搜集了一些对于“bully算法协调者””的相关内容,希望同学们能喜欢,同学们一起来学习一下吧!

在阅读此文前,诚邀您请点点右上方的“关注”,既方便您进行讨论与分享,还能及时阅读最新内容,感谢您的支持。

随着分布式计算技术在工业控制系统中广泛应用,大型射电望远镜观测控制系统的软件体系结构由经典的C/S模型转变到以构件开发为基础的分布式计算模型,如VERITAS、GTC(Gran Telescopio Canarias)、LAMOST等。在上述系统中,望远镜控制系统的业务逻辑以CORBA构件形式封装,构件失效会造成系统功能缺失,核心构件崩溃甚至会导致系统瘫痪。如何提高构件的容错性能成为一个重要课题。

目前分布式应用系统中一般采用对象复制技术实现构件容错。有人采用Primary-backup复制方式,利用客户端请求重定向实现应用级容错。但算法存在故障检测延迟,且不支持状态服务。有人提出了基于Active复制的动态负载分配容错算法,服务方根据负载响应广播请求,任务管理模块将请求向所有服务方副本广播,返回结果后再更新所有副本对此请求的执行状态。这一方式通信开销大,容错性能依赖于底层系统提供的容错支持,算法移植性差。

有人改进了Active复制方式的结果协调过程,提出了RRR算法。应答由处理速度最快成员返回,响应速度有所提高。但若各复制对象处理效率相当,在多层C/S结构中,RRR算法产生大量冗余请求,算法性能将明显下降。

针对上述问题,本文提出了一种基于半主动复制的构件容错算法SAR(semi-active replication),并应用于提高射电望远镜观测控制系统的可靠性。

容错模型

采用分布式面向对象思想建立望远镜控制系统的构件容错模型。相关定义如下:

及Pi到指定进程Pj的通信链路L<i,j>的集合构成系统的容错域。容错目的即保障容错域内Pi的有效性及L<i,j>的可达性。

定义2构件组Component Group={replicai,i∈(1,R)},为构件的一组实例。构件组成员replicai运行时为Pi的一个副本,R为冗余度。若replicai[H]m表示replicai运行于主机Hm上,则副本分布应满足:∀replicai[H]m和replicaj[H]m,若i≠j,则m≠n。

定义3组成员replicaj=(nid,I,status,pri),nid为成员名;I为对外的接口集合;status为运行状态集合;pri表示成员的运行优先级,优先级最高者指定为所在组的组长Foreman。组长代表构件组与外部对象进行交互,其余成员作为副本冗余。

基于上述定义,图1给出了SAR容错算法框架。框架的复制逻辑在底层通信服务之上,主要由对象管理模块OM(Object Manager)、操作同步模块OS(Operation Synchronizer)、操作记录模块OR(Operation Recorder)组成。OM参与失效检测,负责维护成员可达的对象引用列表VRM(Valid Reference Map)。OS实现状态同步机制,当构件组与外部对象发生交互后,它将组内成员的状态同步一致。OR参与错误恢复,它将与外部对象交互操作写入Log日志,并利用操作计数表OCM(Operation Count Map)处理失效切换导致的消息重发或者丢失。由于每个成员具有独立的容错模块,单个成员崩溃不会造成整体容错机制失效。

图1 SAR算法框架

算法设计

SAR算法通过复制多个冗余对象对抗通信故障、进程崩溃等导致的fail-stop类型失效,其基本思想是通过多对象引用获取冗余服务,冗余构件采用半主动方式执行请求和状态消息链式转发减小状态同步开销。算法由主动检错、状态同步和错误恢复三部分构成。主动检错是对成员的失效检测与切换过程,状态同步和错误恢复则维护成员间的状态一致性。

为方便描述,将系统中的消息进行如下分类:

(1)互操作消息inter-msg,构件之间的请求或应答消息。

(2)操作同步消息syn-msg,构件组内成员状态同步时发送的消息。

(3)选举消息elec-msg,组长失效时,组内选举接替者时产生的消息。

主动检错

构件组的成员启动时,OM获取各成员的负载信息,按照性能优先原则分配成员优先级pri。然后根据nid从名字服务器解析与成员相关的所有活动对象的引用lbj ref,并按pri大小添加到VRM中,VRM表的数据项结构为<pri,obj_ref>。组长向某一构件组发送互操作消息前,从VRM中选取该组内优先级最高的成员<primax,obj_ref>作为服务提供者。若对此成员访问失败,OM将其视为失效对象从VRM中删除,并将消息重发至优先级次之的成员,直到该组没有活动成员的对象引用。算法描述如下:

上述算法实现了客户方的检错与失效切换,只要服务端构件组还有活动成员,请求就能得到响应,提高了系统的稳定性。

状态同步

为减小成员之间的状态同步开销,SAR算法采用传递操作消息代替传递状态数据的方式实现成员之间状态同步。系统为构件接口集合I中的每一个方法定义唯一的全局标示符m uid。组长与外部对象发生交互时,通过OS发送一条操作同步消息syn-msg给成员。消息格式为(m uid,para list,result),para list和result分别为操作参数和执行结果。成员只需根据此消息以半主动执行的方式实现与组长的状态同步。

半主动执行过程如下:

(1)成员根据收到操作同步消息的m uid、para list执行对应的操作;

(2)若执行此操作需与外部对象产生交互,即嵌套访问,成员将等待此访问对应的操作同步消息到达,并根据消息中的result作为执行结果直接返回。

(3)若经过时间Tt还未收到执行结果,成员判定组长失效,并按有人]提出的优化的Bully算法以优先级pri发起选举。

(4)一旦赢得选举它将主动与外部对象交互,获得此操作对应的执行结果,并成为新的组长。

为减小状态同步开销,本文采用了操作同步消息的链式转发机制。组长对外发起或响应某次操作时,只需按2.1节描述的方式将此操作转发给优先级仅次于自己的成员,收到此消息的成员按此规则向下传递。每个成员仅需完成一次成功的消息转发,即可实现对组内成员的遍历。当组长失效时,优先级高的成员优先赢得选举,避免了组内成员频繁发起选举引起额外的开销。

错误恢复

假设系统中各个构件驻留的主机和通信链路失效时机是随机的。对算法流程造成影响的有以下情形:

(1)组长访问外部对象还未将操作结果转发给成员就已经失效,接替成员由于未收到此操作的执行结果,重复执行此操作。

(2)成员收到操作同步消息未转发就失效,导致转发链断开。

针对以上情形,本文对消息内容进行扩充,引入了消息序列号sn。扩充后inter-msg消息格式为(<m_uid,sn>,para_list),syn-msg格式为(<m_uid,sn>,para_list,result)。sn初始值为0,表示m_uid标记的操作执行次数。成员的OR维护操作计数表OCM。OCM分为发送操作计数表SOCM和接收操作计数表ROCM,表的数据项结构为(<m_uid,sn>。

以图2为例说明消息序列号更新过程:

(1)A1作为组长向B组发送m_uid=A.msg(i)的互操作消息,首先更新SOCM,sn(A.msg(i))=m+1,然后将更新后的<m_uid,sn>加入消息中。

(2)消息按2.1节描述的方式成功发送至B组后,A1将SOCM的更新和请求结果按2.2节描述的同步算法转发给A2~An。

(3)若B1~Bi-1失效,则Bi收到A1发送的消息。Bi响应此消息,并将ROCM中相应m_uid的sn值更新为n+1,然后将<m_uid,sn>加入操作同步消息中并转发给Bi+1~Bn。Bi+1~Bn根据<m_uid,sn>更新ROCM。

图2 消息序列号更新示意图

正常情况下ROCM中已记录的序列号snr与新收到序列号snn的关系应为snr+1=snn。对于情形(1),snr=snn,服务方将直接返回上一次的结果。对于情形(2),snr+1<snn,服务方将请求重发snr<sn<snn-1的消息。收到重发请求,发送方OR查找操作Log日志将消息重发。

算法正确性分析

下面简要验证SAR算法满足以下特性。

(1)嵌套访问时,算法不会引起请求重复执行

系统正常运行时,某一构件组内只有优先级最高的成员获得访问外部构件的权限,因此整个构件组只会对外部对象发出一次有效请求。当有成员失效时,接替成员有且仅有可能发出一次重复请求,SAR算法通过消息序列机制处理这一重复请求。

(2)构件组内成员具有状态一致性

一般情况下,一条操作的输入参数的数据量远小于操作执行过程中引起的状态变化。组内成员获得某一操作的参数后,通过本地半主动执行方式便能获得与操作发起者相同的执行态。链式转发方式保证了各个成员能以相同顺序收到操作同步消息。即使因成员失效导致转发链断开,通过错误恢复算法,成员之间的状态也能最终达到一致。

算法性能分析

对于望远镜观测控制系统而言,构件提供服务的平均响应时间至关重要,它反映了系统对提交任务的平均处理能力。下面对SAR算法与Active复制算法、RRR算法的平均响应时间进行了分析比较。

基于复制方式的容错构件平均响应时间为:

式中,pf为构件失效概率,tn为任务正常执行时间,tf为失效后的检测、恢复、任务执行时间。对于主动复制,pf=pR<<1,p为成员的失效率,R为构件冗余度。因此,仅需考虑正常状况下的响应时间。

分布式控制系统一般采用多层C/S结构,各层构件之间存在嵌套访问。在具有容错机制的系统中,构件响应的消息分为请求消息和协调消息两类,请求消息对应需执行的任务,协调消息实现状态一致协调,二者计算量分别为De、Dc,一般情况下De>Dc。若Ci表示处于第i层的构件,则其任务正常执行时间可表示为tni=(αDe+βDc)/V,α、β分别为请求消息和协调消息的数量,V为处理速率。

在Active复制算法中所有成员都响应请求,Ci的成员均收到来自Ci-1的R条请求消息,tn等于组内成员处理请求所需时间的最大值。因此,算法的平均响应时间

RRR算法中,处理速率是根据当前任务执行情况获得的。在未协调出最快响应者前,Ci-1已经向Ci发出k条请求消息,k∈(1,R)。其中最先到达的消息被响应,其余k-1条作为重复请求处理。加上成员发出的1条处理速度查询消息,共计k条协调消息。算法的平均响应时间

SAR算法中Ci成员仅需执行一次请求并完成一次协调消息转发,算法的平均响应时间

RRR算法前提是成员处理速率差异明显,适用于诸如Web服务等面向广域环境的分布计算。而对于局域网环境下分布式控制系统,构件成员Vmax≈V。因此,式(3)中k值接近于R。综上所述,SAR算法应用于望远镜观测控制系统时比其他两种算法具有更好的性能。

算法实现与性能测试

该算法已被应用于FAST射电望远镜密云缩尺模型的总控系统,实现了系统核心构件的容错。总控系统采用CORBA分布式对象中间件技术,应用开源中间件TAO实现构件化开发。构件的容错模块作为CORBA对象实现,并通过设置超时策略对服务超时、失效进行检测。设置客户对象请求代理ORB的Relative Roundtrip Timeout Policy策略,当请求超时ORB抛出TIME-OUT异常,防止请求阻塞。

总控系统中命令执行器获取天文观测者发送的观测指令,根据观测指令计算出各控制子系统需执行的控制指令,并发送到各子系统相应代理。本文分别测试了应用SAR算法和Active复制算法、RRR算法情况下命令执行器平均响应时间。

图3给出了正常工作时,请求频率f=50,冗余度R对平均响应时间的影响。结果表明SAR算法响应时间基本不受冗余度增大的影响,而另外两种算法随着R增大响应时间变长。这是由于SAR算法消息转发机制,当冗余度增加时,成员收到的消息数不会增多。

图3 响应时间随冗余度的变化

图4给出了R=6时,请求频率对对平均响应时间的影响。从图中可以看出,随着请求频率增加,响应时间逐渐变长。但无论是轻载还是重载,SAR算法的吞吐率要高于另外两种算法。

图4 响应时间随请求频率的变化

为了提高望远镜观测控制系统的构件可用性,本文提出了基于半主动复制机制的构件容错算法SAR。经过分析与测试表明,在分布式多层C/S应用环境下,该算法性能优于RRR和Active复制算法,具有更短的任务平均响应时间。应用该算法的FAST密云缩尺模型总控系统,能够在保证系统响应性能前提下提供有效的容错支持。该算法也可为FAST原型的观测控制系统容错研究提供参考。

LAMOST观测控制系统体系结构的构架》

基于C O R BA的应用级容错系统的设计与实现》

提高冗余服务性能的动态容错算法》

标签: #bully算法协调者