APP下载

基于Redis的ATS缓存系统设计与实现

2023-08-10程远瑶王昕怡

计算机应用与软件 2023年7期
关键词:主从分布式车站

程远瑶 王昕怡 陈 逸 郭 佳

(通号城市轨道交通技术有限公司 北京 100070)

0 引 言

信号系统是城市轨道交通列车控制的神经中枢,列车自动监控系统(ATS)是整个城市轨道交通信号系统的运营核心,负责监视和控制线路中所有列车的运行状态,是城轨信息化体系建设中的重要一环[1-2]。城轨线路地域分布广,对实时性要求高,车站节点需要具备独立运行的能力,并由中心集中控制所属车站[3-4]。因此ATS一般设计为分布自律、中心集中控制的系统,且系统关键设备及网络结构采用冗余的方式部署,保证系统具有高度的可靠性和可用性。

全自动运行系统是城轨列车控制自动化发展的新阶段[5],ATS系统需要接入更多其他专业的数据,增加与其他系统联动。现有的ATS存储系统无法满足日益增长的数据交互需求,因此迫切需要一套实时强、可靠性高、灵活易扩展、支持分区容错的缓存系统。目前常用的分布式缓存架构多以内存数据库Memcache、Redis为存储核心搭建集群[6-8],缓存热点数据、提高系统访问的并发量,具备极高的读写性能和可靠性,但系统中各节点对缓存数据的访问会因网络传输距离增加带来整体响应时延的增加,不适合地域分布广、对实时性要求高的应用场景。

为解决上述问题及挑战,本文基于Redis强大的性能优势和灵活的数据结构,根据ATS的特点,设计了适用于ATS的缓存系统,提供实时性强、可靠性高的数据服务。

1 系统设计方案

分布式系统遵循CAP(Consistency,Availability,Partition Tolerance)定理进行设计,即在构建分布式系统时,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。由于轨道交通信号系统领域对系统性能有高安全性、高可靠性的需求,高可用性、高分区可用性是更系统更核心的设计目标,对一致性的要求只需保证在系统数据收敛后,对系统的所有访问都将返回相同的结果,满足最终一致性即可。因此在ATS分布式缓存业务场景中,以满足可用性、分区容忍性、最终一致性为目标,以保证系统稳定可靠地运行。

由于城轨线路长度一般在十几公里到上百公里,地域延伸广,为保证系统稳定可靠及实时性,ATS系统采用分布自律系统,车站分机提供车次跟踪、进路选排等业务服务,中心服务器提供全线监视、控制等服务,区域故障,不影响系统提供基本服务。基于以上ATS业务场景,本文设计缓存系统采用混合分割式和复制式的拓扑结构,系统设计方案如图1所示。基于Redis的ATS分布式缓存系统采用Redis作为实时信息的缓存数据库。为快速服务实时响应,避免远距离站间网络通信带来的时延影响,本文方案将Redis模块与其他业务模块置于同一物理节点中,各节点缓存独立信息,为本节点提供数据服务,节点间数据通过同步达到数据最终一致性。每个缓存节点设立一个或多个缓存数据的备份,用于保障数据的可靠性。在本文中,不失一般性地建模为一个中心三个车站缓存数据库,中心缓存数据库对应三个备机,各车站各对应一个备机。本分布式缓存系统由中心和车站的缓存数据库构成,中心缓存数据库通过主主同步的方式从各车站缓存数据库同步数据,各缓存备机通过主从同步的方式实现与缓存数据库的数据同步。

图1 基于Redis的ATS缓存系统整体方案

1.1 系统结构详细设计

本文基于开源组件Redis设计实现了满足业务场景需求的高可靠性、高实时性的ATS分布式缓存系统。为保证系统具有高度的可靠性和可用性,系统关键设备及网络结构采用冗余的方式。

单物理节点的ATS分布式缓存系统详细设计如图2所示。Redis作为缓存主程序,直接与ATS系统业务组件进行数据交互,存储实时数据,提供查询、存储、修改等服务;与高可用模块交互信息,负责物理节点Redis冗余设备的维护、切换、设备主从状态发布。Redis管理组件负责监控与管理Redis状态信息,包括Redis主从状态、运行状态等;与网络组件交互数据,实现网络冗余控制;与数据同步模块交互信息,实现不同节点数据同步。

图2 ATS分布式缓存系统结构详细设计

1.2 系统功能详细设计

1.2.1缓存数据结构设计

ATS系统中唯一物理设备对应多个属性,包括列车信息、轨道、道岔、信号机等状态信息、ZC状态信息等,数据结构具有明显的树状结构特点,与Redis提供的键值对形式的Hash数据结构特点类似。使用Hash结构存储可以使业务组件轻松访问到具体设备目标属性的状态值,避免非必要的冗余信息访问。

为避免Redis缓存中键冲突问题,需要设计设备的唯一标识为键,属性值为对应的设备具备的属性或者车站下特定设备标识。以联锁表示信息为例,缓存的数据结构设计如表1所示,Hash key为线路码+站码;Field为设备类型和设备ID的组合;Value为设备的状态色码值。Hash key与Field可以表征某线路某站的某个特定设备,具备全局唯一性。

表1 联锁缓存标识信息数据结构

1.2.2网络冗余功能设计

网络冗余是工业网络的一项保障策略。作为快速反应备份系统,网络冗余的目的是减轻意外中断的风险,通过即时响应保证生产连续,从而降低关键数据流上任意一点失效所带来的影响。

ATS系统涉及安全相关,为保证系统的可靠性、实时性,在运输层采用双网冗余设计,在双网的情况下,即使某一单网连接故障也不应该影响正常的通信,从而保证传输的可靠性。

双网需要实现数据的冗余传输功能,发送方要将一个数据包发送到两个单网连接上,两个同样的数据包先后从两个单网连接到达接收方,接收方取先到的数据包,丢弃后到的数据包。为了实现该功能,通过设计双网协议对单网连接进行封装,增加双网序列号用于唯一标识在两个单网上传输的数据包,如表2所示。双网的序列号为8字节(64位)整数,假设传输速度为每微秒发送一个数据包,该序列号发生溢出需要50多万年的时间,因此理论上可以保证该序列号永远都不会重复,实现对数据包的唯一标识。

表2 双网协议包格式

1.2.3数据同步功能设计

为保证数据的一致性,需要通过设计适配ATS系统的分布式缓存同步策略,保证车站、中心各节点数据的统一。ATS分布式缓存系统中的数据同步分为:节点主从同步、数据冗余备份即车站节点、中心缓存节点主机与热备从机的同步;节点主主同步,多主机节点间的数据同步即车站节点主机之间、车站节点主机与中心节点主机间的数据同步。

1) 节点主从同步方案。本文通过在ATS节点对应的Redis服务设定主从角色,建立缓存主从角色与ATS系统服务器主备机的对应关系。Redis客户端通过IP和端口标识相应节点的Redis实例并设置主从关系。车站和中心缓存节点均采用冗余备份机制,且缓存主从节点间采用全量同步结合增量同步的方式实时备份缓存数据。节点主从初始化连接状态后,进行全量同步,将主节点缓存中所有数据复制一份,写入从节点;全同步结束后,进行增量同步,将主节点的写操作同步到从服务器上。

基于Redis的ATS分布式缓存主从同步方案具体如下:

(1) 初始化ATS分布式集群,各节点服务器的初始化主备状态均为主机,各节点Redis缓存的初始化主从状态均为主机。

(2) 各节点服务器通过加权竞争算法判断并切换自身主备状态。

(3) 缓存的主从状态随服务器主备状态进行自适应的切换:当服务器为主机,通过Redis客户端将对应Redis设为主机;当服务器为备机,将对应Redis设为主服务器对应Redis的从机。

(4) 服务器通过心跳信息维护Redis主从状态,当缓存状态异常,如缓存重启、网络连接异常、与其他缓存连接异常等,服务器将标记Redis异常状态信息,改变相应竞争因子,实现故障自动识别与切换。

当ATS系统服务器主备机状态发生切换,或缓存的网络连接等状态信息发生故障,分布式缓存系统的主从状态需要进行切换。Redis主从复制功能虽然内置了基于故障检测的主从切换策略[9-10],但ATS系统的主备切换需要根据集群机器的网卡状态、接口状态、主要进程状态和集群设备间心跳连接状态进行判断,Redis内置的主从切策略不能满足ATS系统的业务场景需求。

本文提出一种加权竞争算法,根据影响主备切换的系统状态条件建立状态矩阵,经过配置的加权参数矩阵的处理,将节点的状态量化为竞争因子,通过比较竞争因子的大小确定集群各节点的主备状态。

定义关于离散时间的竞争因子函数如式(1)所示。

m(Tk)=λP(Tk)

(1)

式中:m(Tk)为节点在Tk时刻的竞争因子;P(Tk)为影响主备切换的系统状态矩阵关于离散时间Tk的函数;λ为各类状态的影响因子矩阵。

其中,影响主备切换的系统状态矩阵如式(2)所示,矩阵元素pi(Tk)为网卡状态、联锁接口状态、ZC限速通道状态、ZC列车通道状态、ZCATO通道状态、TWC接口状态、主要进程状态、集群设备间心跳连接状态等节点相关的状态信息关于离散时间Tk的抽象模型,当pi(Tk)=1时表示状态正常,pi(Tk)=0时表示状态异常。

各类状态的影响因子矩阵如式(3)所示,矩阵元素λi为各节点状态信息的权重表示各状态信息对节点能否正常运行的影响程度,可以根据实际情况进行灵活配置。

(3)

在竞选主机的判决中,m(Tk)越大表示被判断为主机的可能性越大。通过式(1),集群中每个节点计算Tk时刻本节点的m(Tk),并将本节点竞选因子广播到集群。假设集群大小为n,Tk时刻集群中本节点接收到的竞争因子矩阵如式(4)所示。

本节点通过比较当前时刻m(Tk)与接收到的上一时刻竞争因子矩阵Mk-1,判断本节点主备状态。若∀m∈Mk-1,mm(Tk+1),则本机为备机;若以上两种情况均不符合,表示存在一个或多个主机与本机竞争因子相等且最大,则进一步比较相同竞争因子主机的唯一标识通用唯一识别码(Universally Unique Identifier,UUID),UUID最大的节点当选主机。

2) 主主同步方案。中心节点缓存中的数据是所辖范围内所有车站节点缓存的数据的集合。各车站节点除保存本车站缓存数据外,还需保存相邻节点缓存数据。本文利用Redis的Stream数据结构,采用生产者消费者模式实现高可靠性、高实时性的缓存数据同步。基于Redis的ATS缓存系统主主同步方案如图3所示,需要同步数据的节点作为生产者将数据以哈希键值对的形式写入本节点时序消息队列中,需求同步数据的节点作为消费者获取生产节点消息队列中数据。通过消息队列的形式,将数据同步解耦为异步模式,节点将需要同步的数据以时序序列的形式缓存在节点内存中,消费节点主动检测队列中数据更新,读取未消费数据,实现节点间数据同步。

图3 主主同步方案

使用Redis中Stream结构存储数据流,Stream是一个时序的、支持多播的可持久化的消息队列。ATS系统中,各节点需要同步的数据都为实时状态信息,将同步数据划分为全体状态信息和变化信息,当前状态可通过过去一段时间内全体消息加上增量的变化信息恢复,在消息队列中存储全体信息和变化信息,将标识全体状态信息的消息ID存储在Redis中,消费者通过消息ID,获取当前时间最近的全体信息,消费后续变化信息持续同步数据。全体消息ID失效时,发送请求包,生产者收到请求后,检查一定时间段内是否处理过请求信息。若未处理过,则写入全体信息,更新Redis中全体消息ID;若已处理,忽略请求。

2 性能评测

为保证业务系统的高效、稳定,ATS分布式缓存需要满足极高实时性、可用性,系统响应速度是衡量这一系统性能的关键指标。此外,Redis中Stream的不同参数也对系统性能产生影响。因此,本文对基于Redis的ATS分布式缓存系统的响应速度、Stream响应性能进行测试与分析。

2.1 测试环境

搭建ATS集群环境,利用重庆五号线的生产环境数据进行功能和性能测试,本次测试环境中,集群由一个中心服务器与三个车站分机四个节点组成。

2.1.1硬件环境配置

物理节点性能指标均为CPU主频2.30 GHz,内存2 GB,可用磁盘空间10 GB以上,网卡为2个100 Mbit/s以太网卡。

2.1.2软件配置

测试环境操作系统版本采用RHEL6.5,内核版本2.6.32,Redis版本采用稳定版5.0.6,使用Redis Desktop Manager程序对Redis的存储状态及内存使用情况进行监控。

2.2 测试结果与分析

2.2.1响应速度性能

模拟实际场景中城市轨道交通信号系统的I/O负载,利用重庆五号线生产环境数据对ATS缓存进行性能测试。建立多个缓存客户端连接,测试不同连接数下系统平均每秒的响应次数,测试结果如图4所示,可以看出,在连接数为1到20时,随着连接数的增加,系统响应速度性能会有一定提升;当连接数继续增加,系统的响应速度性能会有一定程度的下降。ATS系统并发量一般在20~100,缓存系统的平均响应的请求数达100 000次/s以上,可以满足系统对响应速度的需求。

图4 实际业务场景中系统响应性能

2.2.2Stream响应性能

由于主主同步中Stream的消息队列长度参数会对吞吐量产生影响,因此在Stream配置不同消息队列截取长度参数、有无容忍长度误差的情况下,对不同写入次数的执行时间进行测试。在单连接场景下,系统的吞吐量性能如图5所示。可以看出,执行时间与写入次数呈线性关系;在消息队列截取长度较大时,有容忍长度误差时系统性能更优;相同容忍长度误差情况下,截取长度较小的执行时间更短,性能更优。

图5 单连接场景下Stream响应性能

3 结 语

本文提出基于Redis的分布自律的缓存系统设计,实现实时信息的增删改查,基于工业信号系统需求,实现了双网冗余、数据同步等功能,保证了系统的高可用性和数据的高一致性。以重庆五号线的实际业务场景为测试环境对本文所设计的系统进行性能测试,结果表明基于Redis的分布自律的缓存系统具有响应速度快、吞吐量大的性能,可以满足信号系统高可用性、高数据一致性和高实时性的要求。

猜你喜欢

主从分布式车站
车站一角
FANUC系统PROFIBUS主从功能应用
分布式光伏热钱汹涌
分布式光伏:爆发还是徘徊
在北京,一个车站的治理有多难
基于主从控制的微电网平滑切换控制策略研究
热闹的车站
热闹的车站
基于飞行试验数据的仿真模型主从一体化检验
基于DDS的分布式三维协同仿真研究