程遠(yuǎn)瑤 王昕怡 陳 逸 郭 佳
(通號(hào)城市軌道交通技術(shù)有限公司 北京 100070)
信號(hào)系統(tǒng)是城市軌道交通列車控制的神經(jīng)中樞,列車自動(dòng)監(jiān)控系統(tǒng)(ATS)是整個(gè)城市軌道交通信號(hào)系統(tǒng)的運(yùn)營(yíng)核心,負(fù)責(zé)監(jiān)視和控制線路中所有列車的運(yùn)行狀態(tài),是城軌信息化體系建設(shè)中的重要一環(huán)[1-2]。城軌線路地域分布廣,對(duì)實(shí)時(shí)性要求高,車站節(jié)點(diǎn)需要具備獨(dú)立運(yùn)行的能力,并由中心集中控制所屬車站[3-4]。因此ATS一般設(shè)計(jì)為分布自律、中心集中控制的系統(tǒng),且系統(tǒng)關(guān)鍵設(shè)備及網(wǎng)絡(luò)結(jié)構(gòu)采用冗余的方式部署,保證系統(tǒng)具有高度的可靠性和可用性。
全自動(dòng)運(yùn)行系統(tǒng)是城軌列車控制自動(dòng)化發(fā)展的新階段[5],ATS系統(tǒng)需要接入更多其他專業(yè)的數(shù)據(jù),增加與其他系統(tǒng)聯(lián)動(dòng)。現(xiàn)有的ATS存儲(chǔ)系統(tǒng)無(wú)法滿足日益增長(zhǎng)的數(shù)據(jù)交互需求,因此迫切需要一套實(shí)時(shí)強(qiáng)、可靠性高、靈活易擴(kuò)展、支持分區(qū)容錯(cuò)的緩存系統(tǒng)。目前常用的分布式緩存架構(gòu)多以內(nèi)存數(shù)據(jù)庫(kù)Memcache、Redis為存儲(chǔ)核心搭建集群[6-8],緩存熱點(diǎn)數(shù)據(jù)、提高系統(tǒng)訪問(wèn)的并發(fā)量,具備極高的讀寫性能和可靠性,但系統(tǒng)中各節(jié)點(diǎn)對(duì)緩存數(shù)據(jù)的訪問(wèn)會(huì)因網(wǎng)絡(luò)傳輸距離增加帶來(lái)整體響應(yīng)時(shí)延的增加,不適合地域分布廣、對(duì)實(shí)時(shí)性要求高的應(yīng)用場(chǎng)景。
為解決上述問(wèn)題及挑戰(zhàn),本文基于Redis強(qiáng)大的性能優(yōu)勢(shì)和靈活的數(shù)據(jù)結(jié)構(gòu),根據(jù)ATS的特點(diǎn),設(shè)計(jì)了適用于ATS的緩存系統(tǒng),提供實(shí)時(shí)性強(qiáng)、可靠性高的數(shù)據(jù)服務(wù)。
分布式系統(tǒng)遵循CAP(Consistency,Availability,Partition Tolerance)定理進(jìn)行設(shè)計(jì),即在構(gòu)建分布式系統(tǒng)時(shí),一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance)這三個(gè)要素最多只能同時(shí)實(shí)現(xiàn)兩點(diǎn),不可能三者兼顧。由于軌道交通信號(hào)系統(tǒng)領(lǐng)域?qū)ο到y(tǒng)性能有高安全性、高可靠性的需求,高可用性、高分區(qū)可用性是更系統(tǒng)更核心的設(shè)計(jì)目標(biāo),對(duì)一致性的要求只需保證在系統(tǒng)數(shù)據(jù)收斂后,對(duì)系統(tǒng)的所有訪問(wèn)都將返回相同的結(jié)果,滿足最終一致性即可。因此在ATS分布式緩存業(yè)務(wù)場(chǎng)景中,以滿足可用性、分區(qū)容忍性、最終一致性為目標(biāo),以保證系統(tǒng)穩(wěn)定可靠地運(yùn)行。
由于城軌線路長(zhǎng)度一般在十幾公里到上百公里,地域延伸廣,為保證系統(tǒng)穩(wěn)定可靠及實(shí)時(shí)性,ATS系統(tǒng)采用分布自律系統(tǒng),車站分機(jī)提供車次跟蹤、進(jìn)路選排等業(yè)務(wù)服務(wù),中心服務(wù)器提供全線監(jiān)視、控制等服務(wù),區(qū)域故障,不影響系統(tǒng)提供基本服務(wù)?;谝陨螦TS業(yè)務(wù)場(chǎng)景,本文設(shè)計(jì)緩存系統(tǒng)采用混合分割式和復(fù)制式的拓?fù)浣Y(jié)構(gòu),系統(tǒng)設(shè)計(jì)方案如圖1所示?;赗edis的ATS分布式緩存系統(tǒng)采用Redis作為實(shí)時(shí)信息的緩存數(shù)據(jù)庫(kù)。為快速服務(wù)實(shí)時(shí)響應(yīng),避免遠(yuǎn)距離站間網(wǎng)絡(luò)通信帶來(lái)的時(shí)延影響,本文方案將Redis模塊與其他業(yè)務(wù)模塊置于同一物理節(jié)點(diǎn)中,各節(jié)點(diǎn)緩存獨(dú)立信息,為本節(jié)點(diǎn)提供數(shù)據(jù)服務(wù),節(jié)點(diǎn)間數(shù)據(jù)通過(guò)同步達(dá)到數(shù)據(jù)最終一致性。每個(gè)緩存節(jié)點(diǎn)設(shè)立一個(gè)或多個(gè)緩存數(shù)據(jù)的備份,用于保障數(shù)據(jù)的可靠性。在本文中,不失一般性地建模為一個(gè)中心三個(gè)車站緩存數(shù)據(jù)庫(kù),中心緩存數(shù)據(jù)庫(kù)對(duì)應(yīng)三個(gè)備機(jī),各車站各對(duì)應(yīng)一個(gè)備機(jī)。本分布式緩存系統(tǒng)由中心和車站的緩存數(shù)據(jù)庫(kù)構(gòu)成,中心緩存數(shù)據(jù)庫(kù)通過(guò)主主同步的方式從各車站緩存數(shù)據(jù)庫(kù)同步數(shù)據(jù),各緩存?zhèn)錂C(jī)通過(guò)主從同步的方式實(shí)現(xiàn)與緩存數(shù)據(jù)庫(kù)的數(shù)據(jù)同步。
圖1 基于Redis的ATS緩存系統(tǒng)整體方案
本文基于開源組件Redis設(shè)計(jì)實(shí)現(xiàn)了滿足業(yè)務(wù)場(chǎng)景需求的高可靠性、高實(shí)時(shí)性的ATS分布式緩存系統(tǒng)。為保證系統(tǒng)具有高度的可靠性和可用性,系統(tǒng)關(guān)鍵設(shè)備及網(wǎng)絡(luò)結(jié)構(gòu)采用冗余的方式。
單物理節(jié)點(diǎn)的ATS分布式緩存系統(tǒng)詳細(xì)設(shè)計(jì)如圖2所示。Redis作為緩存主程序,直接與ATS系統(tǒng)業(yè)務(wù)組件進(jìn)行數(shù)據(jù)交互,存儲(chǔ)實(shí)時(shí)數(shù)據(jù),提供查詢、存儲(chǔ)、修改等服務(wù);與高可用模塊交互信息,負(fù)責(zé)物理節(jié)點(diǎn)Redis冗余設(shè)備的維護(hù)、切換、設(shè)備主從狀態(tài)發(fā)布。Redis管理組件負(fù)責(zé)監(jiān)控與管理Redis狀態(tài)信息,包括Redis主從狀態(tài)、運(yùn)行狀態(tài)等;與網(wǎng)絡(luò)組件交互數(shù)據(jù),實(shí)現(xiàn)網(wǎng)絡(luò)冗余控制;與數(shù)據(jù)同步模塊交互信息,實(shí)現(xiàn)不同節(jié)點(diǎn)數(shù)據(jù)同步。
圖2 ATS分布式緩存系統(tǒng)結(jié)構(gòu)詳細(xì)設(shè)計(jì)
1.2.1緩存數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
ATS系統(tǒng)中唯一物理設(shè)備對(duì)應(yīng)多個(gè)屬性,包括列車信息、軌道、道岔、信號(hào)機(jī)等狀態(tài)信息、ZC狀態(tài)信息等,數(shù)據(jù)結(jié)構(gòu)具有明顯的樹狀結(jié)構(gòu)特點(diǎn),與Redis提供的鍵值對(duì)形式的Hash數(shù)據(jù)結(jié)構(gòu)特點(diǎn)類似。使用Hash結(jié)構(gòu)存儲(chǔ)可以使業(yè)務(wù)組件輕松訪問(wèn)到具體設(shè)備目標(biāo)屬性的狀態(tài)值,避免非必要的冗余信息訪問(wèn)。
為避免Redis緩存中鍵沖突問(wèn)題,需要設(shè)計(jì)設(shè)備的唯一標(biāo)識(shí)為鍵,屬性值為對(duì)應(yīng)的設(shè)備具備的屬性或者車站下特定設(shè)備標(biāo)識(shí)。以聯(lián)鎖表示信息為例,緩存的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表1所示,Hash key為線路碼+站碼;Field為設(shè)備類型和設(shè)備ID的組合;Value為設(shè)備的狀態(tài)色碼值。Hash key與Field可以表征某線路某站的某個(gè)特定設(shè)備,具備全局唯一性。
表1 聯(lián)鎖緩存標(biāo)識(shí)信息數(shù)據(jù)結(jié)構(gòu)
1.2.2網(wǎng)絡(luò)冗余功能設(shè)計(jì)
網(wǎng)絡(luò)冗余是工業(yè)網(wǎng)絡(luò)的一項(xiàng)保障策略。作為快速反應(yīng)備份系統(tǒng),網(wǎng)絡(luò)冗余的目的是減輕意外中斷的風(fēng)險(xiǎn),通過(guò)即時(shí)響應(yīng)保證生產(chǎn)連續(xù),從而降低關(guān)鍵數(shù)據(jù)流上任意一點(diǎn)失效所帶來(lái)的影響。
ATS系統(tǒng)涉及安全相關(guān),為保證系統(tǒng)的可靠性、實(shí)時(shí)性,在運(yùn)輸層采用雙網(wǎng)冗余設(shè)計(jì),在雙網(wǎng)的情況下,即使某一單網(wǎng)連接故障也不應(yīng)該影響正常的通信,從而保證傳輸?shù)目煽啃浴?/p>
雙網(wǎng)需要實(shí)現(xiàn)數(shù)據(jù)的冗余傳輸功能,發(fā)送方要將一個(gè)數(shù)據(jù)包發(fā)送到兩個(gè)單網(wǎng)連接上,兩個(gè)同樣的數(shù)據(jù)包先后從兩個(gè)單網(wǎng)連接到達(dá)接收方,接收方取先到的數(shù)據(jù)包,丟棄后到的數(shù)據(jù)包。為了實(shí)現(xiàn)該功能,通過(guò)設(shè)計(jì)雙網(wǎng)協(xié)議對(duì)單網(wǎng)連接進(jìn)行封裝,增加雙網(wǎng)序列號(hào)用于唯一標(biāo)識(shí)在兩個(gè)單網(wǎng)上傳輸?shù)臄?shù)據(jù)包,如表2所示。雙網(wǎng)的序列號(hào)為8字節(jié)(64位)整數(shù),假設(shè)傳輸速度為每微秒發(fā)送一個(gè)數(shù)據(jù)包,該序列號(hào)發(fā)生溢出需要50多萬(wàn)年的時(shí)間,因此理論上可以保證該序列號(hào)永遠(yuǎn)都不會(huì)重復(fù),實(shí)現(xiàn)對(duì)數(shù)據(jù)包的唯一標(biāo)識(shí)。
表2 雙網(wǎng)協(xié)議包格式
1.2.3數(shù)據(jù)同步功能設(shè)計(jì)
為保證數(shù)據(jù)的一致性,需要通過(guò)設(shè)計(jì)適配ATS系統(tǒng)的分布式緩存同步策略,保證車站、中心各節(jié)點(diǎn)數(shù)據(jù)的統(tǒng)一。ATS分布式緩存系統(tǒng)中的數(shù)據(jù)同步分為:節(jié)點(diǎn)主從同步、數(shù)據(jù)冗余備份即車站節(jié)點(diǎn)、中心緩存節(jié)點(diǎn)主機(jī)與熱備從機(jī)的同步;節(jié)點(diǎn)主主同步,多主機(jī)節(jié)點(diǎn)間的數(shù)據(jù)同步即車站節(jié)點(diǎn)主機(jī)之間、車站節(jié)點(diǎn)主機(jī)與中心節(jié)點(diǎn)主機(jī)間的數(shù)據(jù)同步。
1) 節(jié)點(diǎn)主從同步方案。本文通過(guò)在ATS節(jié)點(diǎn)對(duì)應(yīng)的Redis服務(wù)設(shè)定主從角色,建立緩存主從角色與ATS系統(tǒng)服務(wù)器主備機(jī)的對(duì)應(yīng)關(guān)系。Redis客戶端通過(guò)IP和端口標(biāo)識(shí)相應(yīng)節(jié)點(diǎn)的Redis實(shí)例并設(shè)置主從關(guān)系。車站和中心緩存節(jié)點(diǎn)均采用冗余備份機(jī)制,且緩存主從節(jié)點(diǎn)間采用全量同步結(jié)合增量同步的方式實(shí)時(shí)備份緩存數(shù)據(jù)。節(jié)點(diǎn)主從初始化連接狀態(tài)后,進(jìn)行全量同步,將主節(jié)點(diǎn)緩存中所有數(shù)據(jù)復(fù)制一份,寫入從節(jié)點(diǎn);全同步結(jié)束后,進(jìn)行增量同步,將主節(jié)點(diǎn)的寫操作同步到從服務(wù)器上。
基于Redis的ATS分布式緩存主從同步方案具體如下:
(1) 初始化ATS分布式集群,各節(jié)點(diǎn)服務(wù)器的初始化主備狀態(tài)均為主機(jī),各節(jié)點(diǎn)Redis緩存的初始化主從狀態(tài)均為主機(jī)。
(2) 各節(jié)點(diǎn)服務(wù)器通過(guò)加權(quán)競(jìng)爭(zhēng)算法判斷并切換自身主備狀態(tài)。
(3) 緩存的主從狀態(tài)隨服務(wù)器主備狀態(tài)進(jìn)行自適應(yīng)的切換:當(dāng)服務(wù)器為主機(jī),通過(guò)Redis客戶端將對(duì)應(yīng)Redis設(shè)為主機(jī);當(dāng)服務(wù)器為備機(jī),將對(duì)應(yīng)Redis設(shè)為主服務(wù)器對(duì)應(yīng)Redis的從機(jī)。
(4) 服務(wù)器通過(guò)心跳信息維護(hù)Redis主從狀態(tài),當(dāng)緩存狀態(tài)異常,如緩存重啟、網(wǎng)絡(luò)連接異常、與其他緩存連接異常等,服務(wù)器將標(biāo)記Redis異常狀態(tài)信息,改變相應(yīng)競(jìng)爭(zhēng)因子,實(shí)現(xiàn)故障自動(dòng)識(shí)別與切換。
當(dāng)ATS系統(tǒng)服務(wù)器主備機(jī)狀態(tài)發(fā)生切換,或緩存的網(wǎng)絡(luò)連接等狀態(tài)信息發(fā)生故障,分布式緩存系統(tǒng)的主從狀態(tài)需要進(jìn)行切換。Redis主從復(fù)制功能雖然內(nèi)置了基于故障檢測(cè)的主從切換策略[9-10],但ATS系統(tǒng)的主備切換需要根據(jù)集群機(jī)器的網(wǎng)卡狀態(tài)、接口狀態(tài)、主要進(jìn)程狀態(tài)和集群設(shè)備間心跳連接狀態(tài)進(jìn)行判斷,Redis內(nèi)置的主從切策略不能滿足ATS系統(tǒng)的業(yè)務(wù)場(chǎng)景需求。
本文提出一種加權(quán)競(jìng)爭(zhēng)算法,根據(jù)影響主備切換的系統(tǒng)狀態(tài)條件建立狀態(tài)矩陣,經(jīng)過(guò)配置的加權(quán)參數(shù)矩陣的處理,將節(jié)點(diǎn)的狀態(tài)量化為競(jìng)爭(zhēng)因子,通過(guò)比較競(jìng)爭(zhēng)因子的大小確定集群各節(jié)點(diǎn)的主備狀態(tài)。
定義關(guān)于離散時(shí)間的競(jìng)爭(zhēng)因子函數(shù)如式(1)所示。
m(Tk)=λP(Tk)
(1)
式中:m(Tk)為節(jié)點(diǎn)在Tk時(shí)刻的競(jìng)爭(zhēng)因子;P(Tk)為影響主備切換的系統(tǒng)狀態(tài)矩陣關(guān)于離散時(shí)間Tk的函數(shù);λ為各類狀態(tài)的影響因子矩陣。
其中,影響主備切換的系統(tǒng)狀態(tài)矩陣如式(2)所示,矩陣元素pi(Tk)為網(wǎng)卡狀態(tài)、聯(lián)鎖接口狀態(tài)、ZC限速通道狀態(tài)、ZC列車通道狀態(tài)、ZCATO通道狀態(tài)、TWC接口狀態(tài)、主要進(jìn)程狀態(tài)、集群設(shè)備間心跳連接狀態(tài)等節(jié)點(diǎn)相關(guān)的狀態(tài)信息關(guān)于離散時(shí)間Tk的抽象模型,當(dāng)pi(Tk)=1時(shí)表示狀態(tài)正常,pi(Tk)=0時(shí)表示狀態(tài)異常。
各類狀態(tài)的影響因子矩陣如式(3)所示,矩陣元素λi為各節(jié)點(diǎn)狀態(tài)信息的權(quán)重表示各狀態(tài)信息對(duì)節(jié)點(diǎn)能否正常運(yùn)行的影響程度,可以根據(jù)實(shí)際情況進(jìn)行靈活配置。
(3)
在競(jìng)選主機(jī)的判決中,m(Tk)越大表示被判斷為主機(jī)的可能性越大。通過(guò)式(1),集群中每個(gè)節(jié)點(diǎn)計(jì)算Tk時(shí)刻本節(jié)點(diǎn)的m(Tk),并將本節(jié)點(diǎn)競(jìng)選因子廣播到集群。假設(shè)集群大小為n,Tk時(shí)刻集群中本節(jié)點(diǎn)接收到的競(jìng)爭(zhēng)因子矩陣如式(4)所示。
本節(jié)點(diǎn)通過(guò)比較當(dāng)前時(shí)刻m(Tk)與接收到的上一時(shí)刻競(jìng)爭(zhēng)因子矩陣Mk-1,判斷本節(jié)點(diǎn)主備狀態(tài)。若?m∈Mk-1,m
2) 主主同步方案。中心節(jié)點(diǎn)緩存中的數(shù)據(jù)是所轄范圍內(nèi)所有車站節(jié)點(diǎn)緩存的數(shù)據(jù)的集合。各車站節(jié)點(diǎn)除保存本車站緩存數(shù)據(jù)外,還需保存相鄰節(jié)點(diǎn)緩存數(shù)據(jù)。本文利用Redis的Stream數(shù)據(jù)結(jié)構(gòu),采用生產(chǎn)者消費(fèi)者模式實(shí)現(xiàn)高可靠性、高實(shí)時(shí)性的緩存數(shù)據(jù)同步?;赗edis的ATS緩存系統(tǒng)主主同步方案如圖3所示,需要同步數(shù)據(jù)的節(jié)點(diǎn)作為生產(chǎn)者將數(shù)據(jù)以哈希鍵值對(duì)的形式寫入本節(jié)點(diǎn)時(shí)序消息隊(duì)列中,需求同步數(shù)據(jù)的節(jié)點(diǎn)作為消費(fèi)者獲取生產(chǎn)節(jié)點(diǎn)消息隊(duì)列中數(shù)據(jù)。通過(guò)消息隊(duì)列的形式,將數(shù)據(jù)同步解耦為異步模式,節(jié)點(diǎn)將需要同步的數(shù)據(jù)以時(shí)序序列的形式緩存在節(jié)點(diǎn)內(nèi)存中,消費(fèi)節(jié)點(diǎn)主動(dòng)檢測(cè)隊(duì)列中數(shù)據(jù)更新,讀取未消費(fèi)數(shù)據(jù),實(shí)現(xiàn)節(jié)點(diǎn)間數(shù)據(jù)同步。
圖3 主主同步方案
使用Redis中Stream結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)流,Stream是一個(gè)時(shí)序的、支持多播的可持久化的消息隊(duì)列。ATS系統(tǒng)中,各節(jié)點(diǎn)需要同步的數(shù)據(jù)都為實(shí)時(shí)狀態(tài)信息,將同步數(shù)據(jù)劃分為全體狀態(tài)信息和變化信息,當(dāng)前狀態(tài)可通過(guò)過(guò)去一段時(shí)間內(nèi)全體消息加上增量的變化信息恢復(fù),在消息隊(duì)列中存儲(chǔ)全體信息和變化信息,將標(biāo)識(shí)全體狀態(tài)信息的消息ID存儲(chǔ)在Redis中,消費(fèi)者通過(guò)消息ID,獲取當(dāng)前時(shí)間最近的全體信息,消費(fèi)后續(xù)變化信息持續(xù)同步數(shù)據(jù)。全體消息ID失效時(shí),發(fā)送請(qǐng)求包,生產(chǎn)者收到請(qǐng)求后,檢查一定時(shí)間段內(nèi)是否處理過(guò)請(qǐng)求信息。若未處理過(guò),則寫入全體信息,更新Redis中全體消息ID;若已處理,忽略請(qǐng)求。
為保證業(yè)務(wù)系統(tǒng)的高效、穩(wěn)定,ATS分布式緩存需要滿足極高實(shí)時(shí)性、可用性,系統(tǒng)響應(yīng)速度是衡量這一系統(tǒng)性能的關(guān)鍵指標(biāo)。此外,Redis中Stream的不同參數(shù)也對(duì)系統(tǒng)性能產(chǎn)生影響。因此,本文對(duì)基于Redis的ATS分布式緩存系統(tǒng)的響應(yīng)速度、Stream響應(yīng)性能進(jìn)行測(cè)試與分析。
搭建ATS集群環(huán)境,利用重慶五號(hào)線的生產(chǎn)環(huán)境數(shù)據(jù)進(jìn)行功能和性能測(cè)試,本次測(cè)試環(huán)境中,集群由一個(gè)中心服務(wù)器與三個(gè)車站分機(jī)四個(gè)節(jié)點(diǎn)組成。
2.1.1硬件環(huán)境配置
物理節(jié)點(diǎn)性能指標(biāo)均為CPU主頻2.30 GHz,內(nèi)存2 GB,可用磁盤空間10 GB以上,網(wǎng)卡為2個(gè)100 Mbit/s以太網(wǎng)卡。
2.1.2軟件配置
測(cè)試環(huán)境操作系統(tǒng)版本采用RHEL6.5,內(nèi)核版本2.6.32,Redis版本采用穩(wěn)定版5.0.6,使用Redis Desktop Manager程序?qū)edis的存儲(chǔ)狀態(tài)及內(nèi)存使用情況進(jìn)行監(jiān)控。
2.2.1響應(yīng)速度性能
模擬實(shí)際場(chǎng)景中城市軌道交通信號(hào)系統(tǒng)的I/O負(fù)載,利用重慶五號(hào)線生產(chǎn)環(huán)境數(shù)據(jù)對(duì)ATS緩存進(jìn)行性能測(cè)試。建立多個(gè)緩存客戶端連接,測(cè)試不同連接數(shù)下系統(tǒng)平均每秒的響應(yīng)次數(shù),測(cè)試結(jié)果如圖4所示,可以看出,在連接數(shù)為1到20時(shí),隨著連接數(shù)的增加,系統(tǒng)響應(yīng)速度性能會(huì)有一定提升;當(dāng)連接數(shù)繼續(xù)增加,系統(tǒng)的響應(yīng)速度性能會(huì)有一定程度的下降。ATS系統(tǒng)并發(fā)量一般在20~100,緩存系統(tǒng)的平均響應(yīng)的請(qǐng)求數(shù)達(dá)100 000次/s以上,可以滿足系統(tǒng)對(duì)響應(yīng)速度的需求。
圖4 實(shí)際業(yè)務(wù)場(chǎng)景中系統(tǒng)響應(yīng)性能
2.2.2Stream響應(yīng)性能
由于主主同步中Stream的消息隊(duì)列長(zhǎng)度參數(shù)會(huì)對(duì)吞吐量產(chǎn)生影響,因此在Stream配置不同消息隊(duì)列截取長(zhǎng)度參數(shù)、有無(wú)容忍長(zhǎng)度誤差的情況下,對(duì)不同寫入次數(shù)的執(zhí)行時(shí)間進(jìn)行測(cè)試。在單連接場(chǎng)景下,系統(tǒng)的吞吐量性能如圖5所示??梢钥闯?執(zhí)行時(shí)間與寫入次數(shù)呈線性關(guān)系;在消息隊(duì)列截取長(zhǎng)度較大時(shí),有容忍長(zhǎng)度誤差時(shí)系統(tǒng)性能更優(yōu);相同容忍長(zhǎng)度誤差情況下,截取長(zhǎng)度較小的執(zhí)行時(shí)間更短,性能更優(yōu)。
圖5 單連接場(chǎng)景下Stream響應(yīng)性能
本文提出基于Redis的分布自律的緩存系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)實(shí)時(shí)信息的增刪改查,基于工業(yè)信號(hào)系統(tǒng)需求,實(shí)現(xiàn)了雙網(wǎng)冗余、數(shù)據(jù)同步等功能,保證了系統(tǒng)的高可用性和數(shù)據(jù)的高一致性。以重慶五號(hào)線的實(shí)際業(yè)務(wù)場(chǎng)景為測(cè)試環(huán)境對(duì)本文所設(shè)計(jì)的系統(tǒng)進(jìn)行性能測(cè)試,結(jié)果表明基于Redis的分布自律的緩存系統(tǒng)具有響應(yīng)速度快、吞吐量大的性能,可以滿足信號(hào)系統(tǒng)高可用性、高數(shù)據(jù)一致性和高實(shí)時(shí)性的要求。