童 艳,周欣明
(91550部队 大连 116023)
实时测控集群是目前测控系统采用的新型实时数据处理系统,主要用于承担测控系统的实时数据处理任务,包括对测控目标的外测轨迹解算、遥测在轨跟踪实时解算、遥测参数和遥控指令的实时监控处理、对测控设备的数据处理以及数字引导信息的生成等计算任务。它能够为测控系统的指挥显示和安全控制分系统提供目标航迹与参数信息,可作为试验指挥和安全故障判决的依据,还能为测控设备提供目标的数字引导信息,与其它指控中心信息互通完成联合试验任务等。因此,对实时测控集群的实时性和可靠性要求较高[1]。
测控集群系统一改过去集中式处理体系结构,是测控系统未来向多目标多任务方向发展需求以及计算机技术发展进步双重因素驱动的结果[2,3]。集中式处理体系结构简单,数据处理由单台计算机完成,实时性好,但风险较集中,虽然通常设计两台数据处理服务器互为热备份,但一旦两台服务器同时出现故障,将面临测控失利的风险。另外,集中式处理体系结构的数据处理能力取决于服务器的软硬件性能。按照测控系统未来发展趋势,数据量随着测控目标数增多会成倍增长,实时数据处理需求也会加大,而集中式处理受限于计算机性能,承载能力和可扩展性将成为制约测控系统发展的瓶颈。测控集群系统属于分布式处理体系结构,它是由若干计算机(节点机)通过高速网络连接在一起,按照任务分配相互协作,共同完成测控任务[4]。传统集群技术的研究侧重于计算任务在多个计算节点的负载均衡,具有高可用性,但对其它节点和网络通常采用单一系统或简单的双集群系统来保证系统的可靠性[5,6]。前者存在一旦其它节点或网络故障,整个系统都将瘫痪的问题;后者则要求每个计算节点只能服务于一个集群系统,在体系结构上造成了计算节点的资源浪费。本文在集群设计架构上对控制节点等关键设备进行“主/副”机配置,并在数据收发上采用“双工”网络方式配置。这种体系结构的优点是数据处理任务全部由计算节点接收、处理和发送,计算节点的控制由互为备份的两台控制节点完成,控制节点通过网络将数据处理任务分配到计算节点上完成,每个计算节点是一台独立的计算机,计算节点的个数可根据任务规模扩展。每台计算节点在控制节点的控制下运行,并实时报告工作状态,控制节点可根据收集的计算节点状态动态分析节点机资源利用率和故障情况,从而动态完成任务迁移和故障恢复,保证数据处理系统的实时性和可靠性。
集群系统的核心工作是实时数据处理,完成该工作的设备是集群中的各个计算节点。传统集群通常具有计算任务周期长、计算量大等特点,一旦计算节点出现故障,只能诉求检查点与卷回恢复技术等后向恢复机制实现进程迁移[7,8]。实时测控集群不同于其它集群系统的是其数据处理需求是已知的,且数据处理周期性强、实时性高。因此,可在软件设计上采用前向恢复机制。由于运行在集群计算节点上的进程具有一致性,可同时启动运行并统一受控制节点调度,要求同一时刻完成某项计算任务的线程在系统中只能有一个处于解挂状态,便可保证集群系统承担的数据处理任务的每个运算粒度在任意时刻有且只有一个活动节点在承担运行工作,从而省去了进程迁移时的进程检查点设置和环境拷贝过程,但同时也对进程控制提出了较高的要求。为此,本文设计了一种满足数据处理实时性和系统高可用的集群节点进程控制方法,有效发挥集群系统架构在测控系统中应用的优势。
实时测控数据处理集群系统主要由互为备份的两台控制节点、若干计算节点以及双工时统设备和网络设备组成。集群控制节点采用“主/副”机工作方式,网络设备采用双工方式,整个系统部件都具有热备份,且不存在不必要的冗余备份,在硬件上保证了系统的高可用性。控制节点主机通过心跳获取各计算节点状态[9],对状态正常的计算节点进行任务分配,通过“挂起/解挂”信号控制计算节点进程的运行,保证测控任务作业中需要的每个计算任务被分配到若干计算节点的其中一台上运行。集群计算节点进程根据收到的来自控制节点的控制信号对自己的运行状态进行控制。如果收到的是“挂起”信号,则进程控制所有工作线程处于等待状态;如果收到的是“解挂”信号,则进程根据作业要求解挂相关工作线程,实现计算节点进程在集群系统中的控制和调度。集群系统在时统信号的统一控制下工作,计算节点主控线程除了控制进程内的工作线程,还在每个时间周期收集各个线程的工作状态并上报给控制节点。当计算节点软件出现故障时,控制节点能在一个时间周期内收到报告并采取任务迁移。当计算节点进程发生任务迁移时,按照以上控制方法,进程的主控线程能够在一个周期内对控制信号作出反应,挂起非活动节点的工作线程,解挂活动节点的工作线程,从而满足实时测控集群完成数据处理任务的实时性要求和集群系统的高可用性。
计算节点进程采用多线程架构[10],由一个控制线程和多个工作线程组成。根据实时数据处理任务需要设计计算节点进程包含一个主控线程和多个用于计算的工作线程。主控线程负责创建工作线程并挂起,等待控制节点的控制信号;根据控制节点的任务分配指令,实时控制本进程各个工作线程的“挂起/解挂”,并汇集各个工作线程的工作情况,定期向控制节点报告。工作线程在主控线程的控制下,完成具体的数据处理任务,并向主控线程报告自己的工作情况。集群控制节点根据收集到的各计算节点工作情况,实时修改任务分配方案,并按任务分配方案给各个计算节点发送“挂起/解挂”信号,从任务分配上保证计算节点的进程在集群系统中具有唯一性的运行,即同一时刻每个进程在集群系统中有且只有一个处于活动状态。这样做既节省了系统资源,又能增强系统的鲁棒性,一旦软件因为遭受数据冲击而崩溃,不会影响到迁移后的软件执行。
考虑进程运行和迁移的实时性以及计算节点的高可用性,设计一种由工作信号实现主控线程“挂起/解挂”其他工作线程的流程。主控线程在收到控制节点的“挂起/解挂”信号后,向其它工作线程发送工作信号。由于工作线程通常分为时间驱动线程和数据驱动线程,因此工作信号的处理方法也相应分为两种情况。
2.2.1 时间驱动线程的工作信号处理方法
时间驱动线程通常用于完成数据解算与任务发送,需要在时统信号下周期驱动运行,而主控线程发送工作信号就是在时统信号的统一控制下完成的,因此时间驱动线程在收到主控线程发送的工作信号后解挂运行,并主动将时间驱动线程的工作信号清零,等待下一周期主控线程发送工作信号,实现在统一时间驱动下工作。由此设计的时间驱动线程控制过程为:主控线程在时统信号驱动下收到解挂信号时,将时间驱动线程的工作信号置1,并发送给时间驱动线程,时间驱动线程收到工作信号后清零工作信号并开始工作,工作完成后继续等待下一周期工作信号的到来;当主控线程收到控制节点的挂起信号时,将发送给时间驱动线程的工作信号清零,时间驱动线程在一个时间周期内收到工作信号为零,即刻挂起继续等待下一个工作信号,直到收到非零的工作信号继续开始工作。工作流程如图1所示。
图1 主控线程控制时间驱动线程的工作流程Fig.1 The working process of the master thread and time driven thread
2.2.2 数据驱动线程的工作信号处理方法
数据驱动线程通常用来完成数据接收任务,因此它在工作时不应受时间周期的控制,而主控线程发送工作信号是在时统信号的统一控制下完成的,因此设计的工作信号处理方法应实现线程解挂之后不受时间驱动,并且在任意时间周期还能挂起。本文的设计方法是:当主控线程收到解挂信号时,将数据驱动线程的工作信号置1,并发送给数据驱动线程,数据驱动线程收到工作信号后开始工作,但不清零工作信号,也就是一次性解挂数据驱动线程运行;当主控线程收到控制节点的挂起信号时,将发送给数据驱动线程的工作信号清零,数据驱动线程在一个时间周期内收到工作信号为零,即刻挂起继续等待下一个工作信号,直到收到非零的工作信号继续开始工作。工作流程如图2所示。
图2 主控线程控制数据驱动线程的工作流程Fig.2 The working process of the master thread and data driven thread
假设某项实时测控数据处理任务的计算粒度划分为外测数据处理、遥测数据处理、姿态信息处理、落点计算、信息分发和数据模拟共六个数据处理单元,每个数据处理单元被设计成一个独立的进程完成。首先在所有计算节点上都布设这六个数据处理进程,每个进程根据数据处理需求设计为多线程程序,由主控线程创建负责数据处理的子线程并挂起。以信息分发进程为例,信息分发的数据处理功能是接收集群网络节点间交换的信息,根据不同作业加工并发送与本次作业相关的信息。假设信息处理分类有A、B、C、D四种,则由主控线程在初始化时创建数据接收、A类信息加工发送、B类信息加工发送、C类信息加工发送、D类信息加工发送五个子线程。子线程创建后挂起,等待主控线程工作信号。主控线程在20Hz时统信号的驱动下,按照收到的控制节点“挂起/解挂”信号给子线程发送工作信号。约定工作信号为0时,子线程处于挂起状态,此时不进行数据处理;工作信号为1时,子线程解挂,完成数据处理工作后,继续等待下一时间周期的工作信号。信息分发子线程中数据接收线程属于数据驱动线程,工作信号处理流程按照图2设计。其它子线程属于时间驱动线程,工作信号处理流程按照图1设计。软件设计中工作信号可采用条件变量来实现[11]。当进程内部发生故障时,由工作状态报告机制实现任务迁移。例如,信息分发进程某个子线程数据发送不成功,此时会向主控线程报告错误信息,主控线程会将线程号及错误类别码报告给控制节点,由控制节点采取任务迁移措施。具体实现方法是控制节点给故障节点机发送挂起信号,给任务迁移的目的计算节点发送信息分发进程解挂信号;当故障节点机上的信息分发进程主控线程收到“挂起”信号时,将其子进程的工作信号置0,子进程挂起;迁移节点机上的信息分发进程收到解挂信号后,接替故障机完成信息分发数据处理任务,此时操作人员可进行故障诊断分析,恢复节点机功能,重启信息分发进程并挂起等待。通过任务迁移,在新的数据处理周期可恢复系统的信息分发功能,系统的故障修复时间为50ms。采用这种设计方法可实现计算节点上各数据处理进程的快速启动,并能在一个时间周期内快速实现计算节点上各数据处理进程的任务迁移。
本文采用软件设计方法实现了测控集群数据处理进程控制,使计算节点能够根据来自控制节点的控制信号对自己的运行状态进行控制,完成实时数据处理任务。在本文的控制方法下,计算节点的实时数据处理功能能够快速启动,并在进程发生故障时实现快速任务迁移,使测控集群系统同时具备数据计算的实时性和计算节点的高可用性。