文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.03.024
中文引用格式: 史耀政,库流亨. 一种分布式SCADA消息中间件设计方案[J].电子技术应用,2016,42(3):84-86.
英文引用格式: Shi Yaozheng,Ku Liuheng. A design scheme of distributed message middleware for SCADA system[J].Application of Electronic Technique,2016,42(3):84-86.
0 引言
数据采集与监视控制(Supervisory Control And Data Acquisition,SCADA)系统在铁路牵引供电及其他工业控制系统领域占据着重要地位,可以对现场的运行设备进行实时数据监视和控制,实现数据采集、设备控制、测量分析、参数调节以及各类信号报警等功能。随着分布式技术在SCADA系统中应用的不断推广,SCADA系统各个子系统之间以及与其他异构系统之间的消息传递变得更加复杂化、多样化[1]。
本文针对分布式环境下SCADA系统复杂的应用场景,提出了一套高效可靠的分布式消息中间件设计方案。该方案采用N-Tree结构[2]对分布式系统节点进行消息区域划分,各个子区域的消息根据应用需求进行收集和传递。系统采用经典的Publisher-Subscriber(发布/订阅)模式设计,产生消息的节点称之为Publisher(发布者),获取并处理消息的节点称之为Subscriber(订阅者)。订阅者首先需要对特定的消息区域进行“消息订阅”,发布者会自动将订阅的消息推送到各订阅节点。
系统采用了特殊设计的分布式一致性算法,确保系统中分布式节点之间的消息一致性和完整性,同时提高了分布式消息访问的效率。本文将重点描述消息分发系统设计和分布式一致性算法设计。
1 分布式SCADA系统
SCADA系统在铁路电气化远动系统上的应用较早,近些年来随着中国铁路的迅猛发展,也带动了铁路电气化远动系统向更高的目标发展。当前我国SCADA系统发展处于第三阶段,即基于分布式计算机网络以及关系数据库技术的、能够实现大范围联网的SCADA系统[3]。
一个典型的铁路供电调度SCADA系统结构图如图1所示。
图中每一个方框仅标示了一种分布式SCADA系统功能角色,在实际的SCADA系统中,每一种系统角色一般均对应了多台分布式计算机节点。每一个系统节点根据实际应用情况的不同负责相应的计算任务,完成各自所属角色的功能。
2 消息分发系统设计
(1)角色分类
在分布式SCADA系统中,按照消息的收集与分发功能的不同,划分为两种角色:消息供应者与消息订阅者。
消息供应者负责按照N-Tree结构对系统中的消息进行区域划分,并注册、收集指定区域的消息,主动推送给订阅节点或者等待消息订阅者查询。消息订阅者则根据实际应用需求,通过指定机器节点名、区域名去“订阅”消息内容,在消息订阅时可以指定是否需要由消息供应者主动推送。
(2)消息分类与确认
按照消息紧急程度的不同,可以划分为两大类消息:紧急消息和一般消息。这两大类消息都可以根据实际应用需求的不同来划分应用子类,其区别在于:紧急消息具有“告警”和“正常”两种状态且需要消息订阅者进行“确认”,而一般消息则没有状态区分且不需要被确认。
(3)消息缓存与传递
系统针对不同类型消息的应用特点,设计了两种缓存方式:“链式队列”缓冲和“环形队列”缓冲。对于重要程度较高的且需要等待确认的紧急消息,则应采用“链式队列”缓冲模式,确保消息不会丢失;对于一般性消息则可以采用“环形队列”缓冲模式,在极端情况下早期的消息可能会丢失,但同样保证了最新的消息被缓存。
系统中每一个节点均需要维护自己的消息缓冲区和消息订阅需求列表,消息节点之间的通信采用TCP/IP网络传输。消息订阅与传递遵循以下步骤:
(1)消息订阅者将订制的消息请求(包括指定优先级、消息区域等)传递给消息供应者进行“订阅”操作;
(2)消息供应者维护自身节点和远程节点的消息订阅请求,当产生新的消息时,根据消息订阅请求进行筛选;
(3)消息订阅者的消息缓冲区中的内容得到更新,可以根据应用需求定制后续行为(例如报警、打印、存库等)。
消息分发系统模型见图2。
3 分布式一致性算法
本文提出采用基于“Quorum-Based算法”[4]与消息区域模型相结合的机制,对分布式消息中间件的数据一致性做出保证。这里采用的方案能够保证分布式SCADA系统中的消息缓冲数据“最终一致性”,而不是满足“强一致性”。所谓“强一致性”指的是当消息订阅者对系统消息进行获取或确认时,必须检查或更新相关节点的所有消息副本状态是否一致,只有保证所有消息副本状态一致才能完成读写操作。而最终一致性的概念是:在每次获取或更新数据状态时,并不保证所有节点上的数据副本均保持一致,而是根据设定的策略保证部分数据是最新的,剩余不同步的副本则由系统内部负责自行同步,系统保证在没有后续更新的情况下最终返回上一次更新的最新状态。
由于本文设计的分布式一致性算法不属于强一致性算法,且经过了特殊优化,因此系统工作的效率较高,且能够确保分布式SCADA系统的数据一致可靠性。本文设计的分布式一致性算法描述如下:
(1)系统中每一个消息区域的消息供应者(总数量V)均可以对访问(读)操作和确认(写)操作进行授权许可,每次授权尚未完成的情况下不可重复授权其他操作,防止出现读写冲突的情况;
(2)每一次消息访问(读)操作必须获得Vr个节点授权许可才能进行,同样,每一次消息确认(写)操作必须获得Vw个节点授权才能进行;
(3)系统中各项操作的授权许可数量满足如下关系:
式(1)表示一次读操作所需授权数与一次写操作所需授权数之和应该大于系统授权总数,这样可以保证同一份数据拷贝不会发生并行读写的情况,因为一旦读操作获得了授权,就不可能存在足够的写操作授权了,反之亦然。式(2)表示一次写操作必须获得半数以上的授权,确保同一份数据拷贝不会同时被2个及以上请求修改,这样就能保证系统数据写入的串行化和一致性。式(3)属于优化的可选策略,表示一次读操作所需授权数应当尽可能小,以提高系统数据访问效率。
图3中给出了本系统中描述的分布式SCADA系统消息供应者与消息订阅者之间的访问关系。
在图3中,消息供应者会对某个消息逻辑区域提供订阅功能,而这样的节点一般可以存在多个,提供相同消息区域供应的多个节点构成了分布式节点群集。当消息供应者需要访问或确认某区域消息时,需要遵循本文描述的分布式一致性算法规则。而SCADA系统中的消息区域状态与各消息供应者之间的同步,则由系统在操作完成后自动进行。
4 实践结果分析
本文利用GT-ITM提供的Transit-Stub(TS)模型[5],构建一个分层结构网络对此消息中间件进行性能测试。
仿真系统根据铁路SCADA系统实际应用需求划分角色区域,每个区域有多个系统节点。假设消息供应者每200 ms新增一条消息,每条消息为128 B的数据包,每一个消息订阅者都订阅所有区域消息以模拟最大负载情况。通常,服务器节点既充当消息供应者又充当消息订阅者。仿真实验测试在不同应用规模下的系统负载情况。实验结果如表1所示。
从表1中可以看出,相同消息供应者的情况下,消息订阅者数量的增加会导致网络吞吐量线性增长,但是增量不会呈现倍数关系。这说明本方案的设计有效地降低了相同节点上多个消息订阅者的消息传递负载。消息供应者数量的增加会使得网络吞吐量和CPU负载呈现比率上升趋势,这是因为消息供应者需要维护和更新各消息订阅者队列,实时推送消息内容。当消息供应者和消息订阅者的数量按照同等规模扩大时,系统表现出稳定的线性增长趋势。这表明系统能够稳定有效地控制分布式消息传递,具有良好的运行效率。
5 结束语
本文针对铁路牵引供电SCADA系统中消息传递效率较低、接口复杂不统一的问题,设计并实现了一套通用的消息中间件方案。该方案对系统角色、消息内容进行区域划分,对消息传递的机制进行了改进,利用Quorum-Based改进算法确保了分布式节点之间的消息一致性。仿真实验及实践结果表明,本方案设计的消息中间件能够适应不同规模的SCADA系统应用,具有良好的可靠性和运行效率。
参考文献
[1] 张平.我国高速铁路牵引供电SCADA系统的分析与探讨[J].铁道建筑技术,2010(4):72-74.
[2] Chris Gauthier Dickey,Virginia Mary Lo,Daniel Zappala.Using n-trees for scalable event ordering in peer-to-peer games[C].Proceedings of NOSSDAV,2005.
[3] 崔瑞超.浅谈中国高速铁路的发展[J].新课程学习(学术教育),2010(10):30-31.
[4] 熊庭刚,卢正鼎,张家宏,等.基于Quorum系统的分布式访问控制框架研究[J].计算机科学,2010(5).
[5] CALVERT K,EAGAN J,MERUGU S,et al.Extending and enhan-cing GT-ITM[C].Proc of ACM SIGCOMM Workshop on Models,Methods and Tools for Reproducible Network Research,2003.