APP下载

5G电信核心网热备模式下的业务指令断点接续执行研究与实践

2021-01-26陈雷樊野

江苏通信 2020年6期
关键词:寄存器队列指令

陈雷 樊野

中国移动通信集团江苏有限公司

0 引言

在通讯领域中,核心网侧的网元节点之间的信息传送需要极高的效率和可用性,系统可用性目标MTBF/(MTBF+MTTR)往往要达到5个9,也就是99.999%,比多数互联网企业的99.99%目标要高一个数量级。而电信节点间传递的消息,往往因为事务性场景不同,需要既能支持同步消息,也要支持异步消息,甚至是混合支持。同步消息场景下,要能够保障消息串行执行,确保时序性、事务性;异步消息场景下,需要充分利用带宽和资源,实现高并发的消息投递及高效的并行处理,在有限的资源下完成最多的业务服务。

本文讨论的是通过在业务系统中,构造最小化信息核单元,依靠一二级缓存和索引定位机制,实现高效的串并行结合的消息处理方式,实现高达970CPS/秒的信息投递。同时,通过同步核单元方式,以软方式实现应用级双机热备。在故障切换时,可在0.7秒内完成切换和业务恢复,恢复业务可从中断处接续执行,兼顾业务完整性和效率,实现电信级高可用。

本实践的更大优势是完全使用软方式实现以上能力,不依赖其他商用双机软件以及辅助保活设备,具备管理虚拟IP能力的服务器均可进行部署和应用,从而大幅降低企业成本。

1 应用场景

以当前江苏南京5G指令开通的业务受理场景为例。正常情况下,业务支撑系统每秒需发送近113条同异步指令到达核心网网元侧,进行相关业务功能启效或停用。目前这些指令来自于BOSS系统或其他渠道的CRM系统,指令以文本方式存储在指令文件中,传递至网关并由信令接口机解析发送至核心网网元侧,同时将网元侧的回应消息记录在回应结果文件中作为业务日志进行保存。指令及相关文件示意如图1所示。

图1 指令文件示意图

指令文件在解析处理时,需要判断每条指令的归属终端用户,若属于一个终端用户的指令集,需要按顺序处理和投递,保障业务时序性,且在得到核心网网元的应答消息后才能继续处理和发送下一指令。而对于不同终端用户的指令,则需要充分利用带宽,高并发地并行投递,以避免产生指令积压,导致业务受阻。与核心网网元交互的示意图如图2所示。

图2 与核心网网元交互示意图

该场景需要做到7×24小时不间断运行,而做到完全不间断运行非常困难。出于对应用系统稳定、可靠、有效、持续运行、灾备等要求,一般都会部署2个或以上的应用节点。一个是主用节点,用于业务处理;一个是备用节点,作为主节点的备份,在主节点故障时,备用节点会接管主用节点进行业务处理。在采用传统双机HA软件的房中,备用节点应用在切换时需要完成启动、初始化、状态同步后才能进入工作态,实现任务接续执行,而这一过程一般都需要十几秒以上才能完成,无法满足业务场景需要,因此需要能够保证秒级切换并接续执行。

2 设计思路

基于高可用和效率等方面的综合考虑,本实践采用应用级双机热备方式进行业务支撑。主用节点和备用节点的应用系统都启动并运行于工作态,实时同步主备间的任务执行和状态信息,以及侦活探测,确保主用节点故障时,备用节点能瞬时进行接管,接续任务执行。

为能高效在主备节点之间信息同步,在应用的运行内存中构建包含所有控制信息和状态的最小化“核”控制单元,保存自身及执行任务的各方面状态与进展数据。同时通过一二缓冲机制以及寄存单元,实现串并行兼容的处理方式,利用资源开销最小的TCP/IP消息方式进行主备通讯,实现主备信息同步。

为缩小“核”单元大小,采用了索引标记方式进行状态保存和更新,不保存具体指令,这样“核”单元可缩小至940字节,可保存在一个TCP/IP消息包中,一个信息交互即可完成全部信息同步。建立并维护主备间一致的运行“快照”,当切换时,备用节点均可以此来恢复任务的执行状态,进行接续执行。

2.1 应用的核单元设计

核单元位于应用的运行内存中,由控制单元、寄存器、一级缓存组成。一级缓存由多个指针操控的双向队列组成,完成对不同终端用户数据的组织和排序,在特定的定时器消息触发下进行协调执行。

指令组织过程是通过解析用户指令信息,对其中的用户标识使用HASH算法计算其唯一Key值,保存在寄存器中,同时也在寄存器中完成过滤和排重,并以寄存器下标作为索引,在一级缓存中建立多用户的消息发送队列。实现一个用户指令保存在同一队列中,不同用户指令保存在不同队列中,以实现单用户指令串行执行,多用户指令并行执行的串并行结合执行方式。核单元整体架构模式如图3所示。

图3 核单元内部结构图

2.2 一二级缓存的设计

指令文件和二级缓存保存在“核”单元外部,在“控制单元”的统一控制下,批量将文件中指定块大小的记录一次读至内存缓冲区中,经解析、格式化后形成待处理的指令消息,插入二级缓存中,相关批指令文件访问偏移保存在“控制单元”中,完成指令集的第一次缓存。

而后,依次从二级缓存中指令记录,通过HASH算法得到用户标识Key值,存储在寄存器中,并进行过滤和重排。一级缓存单元下标以Key值所处寄存器单元序号为标识索引,依次将二级缓存中的指令地址下标,保存在一级缓存的双向消息队列中。在此过程中会有两种场景,一种是属于某一用户终端指令集,即通过HASH计算的Key值相同,此场景会插入到一级缓存的同一队列中。另一种场景是不同用户指令,此时会插入另外一个双向消息队列中,直至一级缓存数据满无法再插入。

通过上述过程完成了指令的组织和存储,当特定的定时器消息到达后,应用会扫描一级缓存各个队列,找到待执行的队列单元,根据单元中保存的下标信息,将二级缓存中对应的指令消息发送至核心网元,然后置该队列为等待回应状态,然后继续扫描下一队列继续处理。

当核心网元返回一条用户指令的回应消息到达时,找到对应的一级缓存队列单元,并释放该单元,通过指针指向下一待执行单元。如该队列全部单元均已经执行完毕,则清除相应一级缓存、寄存器、控制单元中对应的数据,继续加载二级缓存中的指令数据。

以上这些处理均是在不同定时器下协同下完成,该方式既完成了多指令并行处理和单用户指令的串行执行,又保证了核单元中的控制单元+寄存器+一级缓存最小(约940字节),但却能保存整个应用的各种状态以及指令处理任务进展信息。对核单元的每一次数据变更,均可通过一个TCP/IP消息同步

至备用节点,确保主备状态一致。

2.3 双机切换时的任务接续执行

主备节点运行相同的应用程序,并都处于运行态,主用节点运行于工作运行态,备用节点运行于工作备用态,相互之间通过特定的心跳消息,侦测对方存活状态。当主用节点因故障引起切换,或是心跳消息久无回应时,则开始切换,备用节点由工作备用态转为工作运行态,通过同步的核单元信息恢复主用节点各状态,即时接管主用节点应用。

具体过程为:备用节点依靠上次同步的核单元信息,加载共享磁阵上指定的指令文件,根据保存的偏移信息,重新构造二级缓存,并根据当前核单元中的一级缓存、控制单元、寄存器记录,进行任务接续执行。主备节点架构以及各资源示意图如图4所示。

图4 主备节点以及各资源架构示意图

3 结束语

本实践由C语言实现,拥有较高的执行效率。同时通过最小化“核”控制单元,依靠一二级缓存,结合共享内存和双向队列,实现串并行结合的执行方式。以周期定时器消息和核心网网元的应答消息为触发条件,统一进行消息组织、状态维护、指令执行,保障数据一致性和事务性的同时,又通过一个TCP/IP报文完成主备之间的状态、信息同步,实现了系统的高可靠性。

经实际验证,性能高达970CPS/秒,实现每秒近65MB指令消息发送至核心网网元侧。故障切换可在0.7秒内完成,千时无失效概率达99.999%,且任务能从断点处接续执行,保障了业务的高可用性和处理高效性。该实践不需部署双机辅助设备及商用双机软件等,完全以软方式实现,具有低成本、高效率以及高可靠性等特点。

猜你喜欢

寄存器队列指令
STM32和51单片机寄存器映射原理异同分析
《单一形状固定循环指令G90车外圆仿真》教案设计
Lite寄存器模型的设计与实现
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
移位寄存器及算术运算应用
丰田加速驶入自动驾驶队列
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法