陳雷 樊野
中國移動通信集團江蘇有限公司
在通訊領(lǐng)域中,核心網(wǎng)側(cè)的網(wǎng)元節(jié)點之間的信息傳送需要極高的效率和可用性,系統(tǒng)可用性目標MTBF/(MTBF+MTTR)往往要達到5個9,也就是99.999%,比多數(shù)互聯(lián)網(wǎng)企業(yè)的99.99%目標要高一個數(shù)量級。而電信節(jié)點間傳遞的消息,往往因為事務(wù)性場景不同,需要既能支持同步消息,也要支持異步消息,甚至是混合支持。同步消息場景下,要能夠保障消息串行執(zhí)行,確保時序性、事務(wù)性;異步消息場景下,需要充分利用帶寬和資源,實現(xiàn)高并發(fā)的消息投遞及高效的并行處理,在有限的資源下完成最多的業(yè)務(wù)服務(wù)。
本文討論的是通過在業(yè)務(wù)系統(tǒng)中,構(gòu)造最小化信息核單元,依靠一二級緩存和索引定位機制,實現(xiàn)高效的串并行結(jié)合的消息處理方式,實現(xiàn)高達970CPS/秒的信息投遞。同時,通過同步核單元方式,以軟方式實現(xiàn)應(yīng)用級雙機熱備。在故障切換時,可在0.7秒內(nèi)完成切換和業(yè)務(wù)恢復(fù),恢復(fù)業(yè)務(wù)可從中斷處接續(xù)執(zhí)行,兼顧業(yè)務(wù)完整性和效率,實現(xiàn)電信級高可用。
本實踐的更大優(yōu)勢是完全使用軟方式實現(xiàn)以上能力,不依賴其他商用雙機軟件以及輔助?;钤O(shè)備,具備管理虛擬IP能力的服務(wù)器均可進行部署和應(yīng)用,從而大幅降低企業(yè)成本。
以當(dāng)前江蘇南京5G指令開通的業(yè)務(wù)受理場景為例。正常情況下,業(yè)務(wù)支撐系統(tǒng)每秒需發(fā)送近113條同異步指令到達核心網(wǎng)網(wǎng)元側(cè),進行相關(guān)業(yè)務(wù)功能啟效或停用。目前這些指令來自于BOSS系統(tǒng)或其他渠道的CRM系統(tǒng),指令以文本方式存儲在指令文件中,傳遞至網(wǎng)關(guān)并由信令接口機解析發(fā)送至核心網(wǎng)網(wǎng)元側(cè),同時將網(wǎng)元側(cè)的回應(yīng)消息記錄在回應(yīng)結(jié)果文件中作為業(yè)務(wù)日志進行保存。指令及相關(guān)文件示意如圖1所示。
圖1 指令文件示意圖
指令文件在解析處理時,需要判斷每條指令的歸屬終端用戶,若屬于一個終端用戶的指令集,需要按順序處理和投遞,保障業(yè)務(wù)時序性,且在得到核心網(wǎng)網(wǎng)元的應(yīng)答消息后才能繼續(xù)處理和發(fā)送下一指令。而對于不同終端用戶的指令,則需要充分利用帶寬,高并發(fā)地并行投遞,以避免產(chǎn)生指令積壓,導(dǎo)致業(yè)務(wù)受阻。與核心網(wǎng)網(wǎng)元交互的示意圖如圖2所示。
圖2 與核心網(wǎng)網(wǎng)元交互示意圖
該場景需要做到7×24小時不間斷運行,而做到完全不間斷運行非常困難。出于對應(yīng)用系統(tǒng)穩(wěn)定、可靠、有效、持續(xù)運行、災(zāi)備等要求,一般都會部署2個或以上的應(yīng)用節(jié)點。一個是主用節(jié)點,用于業(yè)務(wù)處理;一個是備用節(jié)點,作為主節(jié)點的備份,在主節(jié)點故障時,備用節(jié)點會接管主用節(jié)點進行業(yè)務(wù)處理。在采用傳統(tǒng)雙機HA軟件的房中,備用節(jié)點應(yīng)用在切換時需要完成啟動、初始化、狀態(tài)同步后才能進入工作態(tài),實現(xiàn)任務(wù)接續(xù)執(zhí)行,而這一過程一般都需要十幾秒以上才能完成,無法滿足業(yè)務(wù)場景需要,因此需要能夠保證秒級切換并接續(xù)執(zhí)行。
基于高可用和效率等方面的綜合考慮,本實踐采用應(yīng)用級雙機熱備方式進行業(yè)務(wù)支撐。主用節(jié)點和備用節(jié)點的應(yīng)用系統(tǒng)都啟動并運行于工作態(tài),實時同步主備間的任務(wù)執(zhí)行和狀態(tài)信息,以及偵活探測,確保主用節(jié)點故障時,備用節(jié)點能瞬時進行接管,接續(xù)任務(wù)執(zhí)行。
為能高效在主備節(jié)點之間信息同步,在應(yīng)用的運行內(nèi)存中構(gòu)建包含所有控制信息和狀態(tài)的最小化“核”控制單元,保存自身及執(zhí)行任務(wù)的各方面狀態(tài)與進展數(shù)據(jù)。同時通過一二緩沖機制以及寄存單元,實現(xiàn)串并行兼容的處理方式,利用資源開銷最小的TCP/IP消息方式進行主備通訊,實現(xiàn)主備信息同步。
為縮小“核”單元大小,采用了索引標記方式進行狀態(tài)保存和更新,不保存具體指令,這樣“核”單元可縮小至940字節(jié),可保存在一個TCP/IP消息包中,一個信息交互即可完成全部信息同步。建立并維護主備間一致的運行“快照”,當(dāng)切換時,備用節(jié)點均可以此來恢復(fù)任務(wù)的執(zhí)行狀態(tài),進行接續(xù)執(zhí)行。
核單元位于應(yīng)用的運行內(nèi)存中,由控制單元、寄存器、一級緩存組成。一級緩存由多個指針操控的雙向隊列組成,完成對不同終端用戶數(shù)據(jù)的組織和排序,在特定的定時器消息觸發(fā)下進行協(xié)調(diào)執(zhí)行。
指令組織過程是通過解析用戶指令信息,對其中的用戶標識使用HASH算法計算其唯一Key值,保存在寄存器中,同時也在寄存器中完成過濾和排重,并以寄存器下標作為索引,在一級緩存中建立多用戶的消息發(fā)送隊列。實現(xiàn)一個用戶指令保存在同一隊列中,不同用戶指令保存在不同隊列中,以實現(xiàn)單用戶指令串行執(zhí)行,多用戶指令并行執(zhí)行的串并行結(jié)合執(zhí)行方式。核單元整體架構(gòu)模式如圖3所示。
圖3 核單元內(nèi)部結(jié)構(gòu)圖
指令文件和二級緩存保存在“核”單元外部,在“控制單元”的統(tǒng)一控制下,批量將文件中指定塊大小的記錄一次讀至內(nèi)存緩沖區(qū)中,經(jīng)解析、格式化后形成待處理的指令消息,插入二級緩存中,相關(guān)批指令文件訪問偏移保存在“控制單元”中,完成指令集的第一次緩存。
而后,依次從二級緩存中指令記錄,通過HASH算法得到用戶標識Key值,存儲在寄存器中,并進行過濾和重排。一級緩存單元下標以Key值所處寄存器單元序號為標識索引,依次將二級緩存中的指令地址下標,保存在一級緩存的雙向消息隊列中。在此過程中會有兩種場景,一種是屬于某一用戶終端指令集,即通過HASH計算的Key值相同,此場景會插入到一級緩存的同一隊列中。另一種場景是不同用戶指令,此時會插入另外一個雙向消息隊列中,直至一級緩存數(shù)據(jù)滿無法再插入。
通過上述過程完成了指令的組織和存儲,當(dāng)特定的定時器消息到達后,應(yīng)用會掃描一級緩存各個隊列,找到待執(zhí)行的隊列單元,根據(jù)單元中保存的下標信息,將二級緩存中對應(yīng)的指令消息發(fā)送至核心網(wǎng)元,然后置該隊列為等待回應(yīng)狀態(tài),然后繼續(xù)掃描下一隊列繼續(xù)處理。
當(dāng)核心網(wǎng)元返回一條用戶指令的回應(yīng)消息到達時,找到對應(yīng)的一級緩存隊列單元,并釋放該單元,通過指針指向下一待執(zhí)行單元。如該隊列全部單元均已經(jīng)執(zhí)行完畢,則清除相應(yīng)一級緩存、寄存器、控制單元中對應(yīng)的數(shù)據(jù),繼續(xù)加載二級緩存中的指令數(shù)據(jù)。
以上這些處理均是在不同定時器下協(xié)同下完成,該方式既完成了多指令并行處理和單用戶指令的串行執(zhí)行,又保證了核單元中的控制單元+寄存器+一級緩存最?。s940字節(jié)),但卻能保存整個應(yīng)用的各種狀態(tài)以及指令處理任務(wù)進展信息。對核單元的每一次數(shù)據(jù)變更,均可通過一個TCP/IP消息同步
至備用節(jié)點,確保主備狀態(tài)一致。
主備節(jié)點運行相同的應(yīng)用程序,并都處于運行態(tài),主用節(jié)點運行于工作運行態(tài),備用節(jié)點運行于工作備用態(tài),相互之間通過特定的心跳消息,偵測對方存活狀態(tài)。當(dāng)主用節(jié)點因故障引起切換,或是心跳消息久無回應(yīng)時,則開始切換,備用節(jié)點由工作備用態(tài)轉(zhuǎn)為工作運行態(tài),通過同步的核單元信息恢復(fù)主用節(jié)點各狀態(tài),即時接管主用節(jié)點應(yīng)用。
具體過程為:備用節(jié)點依靠上次同步的核單元信息,加載共享磁陣上指定的指令文件,根據(jù)保存的偏移信息,重新構(gòu)造二級緩存,并根據(jù)當(dāng)前核單元中的一級緩存、控制單元、寄存器記錄,進行任務(wù)接續(xù)執(zhí)行。主備節(jié)點架構(gòu)以及各資源示意圖如圖4所示。
圖4 主備節(jié)點以及各資源架構(gòu)示意圖
本實踐由C語言實現(xiàn),擁有較高的執(zhí)行效率。同時通過最小化“核”控制單元,依靠一二級緩存,結(jié)合共享內(nèi)存和雙向隊列,實現(xiàn)串并行結(jié)合的執(zhí)行方式。以周期定時器消息和核心網(wǎng)網(wǎng)元的應(yīng)答消息為觸發(fā)條件,統(tǒng)一進行消息組織、狀態(tài)維護、指令執(zhí)行,保障數(shù)據(jù)一致性和事務(wù)性的同時,又通過一個TCP/IP報文完成主備之間的狀態(tài)、信息同步,實現(xiàn)了系統(tǒng)的高可靠性。
經(jīng)實際驗證,性能高達970CPS/秒,實現(xiàn)每秒近65MB指令消息發(fā)送至核心網(wǎng)網(wǎng)元側(cè)。故障切換可在0.7秒內(nèi)完成,千時無失效概率達99.999%,且任務(wù)能從斷點處接續(xù)執(zhí)行,保障了業(yè)務(wù)的高可用性和處理高效性。該實踐不需部署雙機輔助設(shè)備及商用雙機軟件等,完全以軟方式實現(xiàn),具有低成本、高效率以及高可靠性等特點。