李 楊,戴琳琳,閻志遠(yuǎn),江 琳,,李曉楠,
(1.中鐵程科技有限責(zé)任公司,北京 100081;2.中國鐵道科學(xué)研究院集團(tuán)有限公司 電子計(jì)算技術(shù)研究所,北京 100081)
經(jīng)過20余年的發(fā)展,中國鐵路客票發(fā)售與預(yù)訂系統(tǒng)(簡稱:客票系統(tǒng))形成了覆蓋線上(即12306互聯(lián)網(wǎng)售票系統(tǒng),包括12306網(wǎng)站及移動終端App)和線下全國3 000多個客運(yùn)車站的超大型票務(wù)系統(tǒng)[1]。鐵路客票電子票庫系統(tǒng)(簡稱:電子票庫)作為客票系統(tǒng)的核心業(yè)務(wù)系統(tǒng)之一,承擔(dān)著旅客從購票、支付、退改簽、乘車、進(jìn)出站和換乘等全流程信息化服務(wù)中的交易事務(wù)環(huán)節(jié)。電子票庫通過數(shù)據(jù)庫存儲過程、分布式擴(kuò)展等技術(shù),良好地承擔(dān)了近年來客票系統(tǒng)的巨大業(yè)務(wù)壓力,隨著客票系統(tǒng)交易量的日益增長及復(fù)雜度的日益增加,為進(jìn)一步提高電子票庫的擴(kuò)展能力,實(shí)現(xiàn)業(yè)務(wù)的快速迭代,減少研發(fā)、部署和維護(hù)的復(fù)雜性,基于服務(wù)架構(gòu),對當(dāng)前電子票庫進(jìn)行了改造[2]。本文闡述了改造后的電子票庫架構(gòu)、關(guān)鍵技術(shù)和試運(yùn)行效果。
當(dāng)前,電子票庫支撐線上互聯(lián)網(wǎng)售票、線下終端(包括窗口、代售點(diǎn)、自動售票機(jī)等)售票,是鐵路電子客票的底層核心系統(tǒng),是線上、線下服務(wù)一體化的重要環(huán)節(jié)。當(dāng)前電子票庫架構(gòu)如圖1所示。
圖1 當(dāng)前電子票庫架構(gòu)
1.1.1 客服內(nèi)/外網(wǎng)
客服內(nèi)/外網(wǎng)是支撐12306互聯(lián)網(wǎng)售票系統(tǒng)的獨(dú)立網(wǎng)絡(luò)分區(qū)。旅客的線上購票請求通過客服內(nèi)/外網(wǎng)中的12306網(wǎng)站和移動終端App服務(wù)、排隊(duì)、風(fēng)控等環(huán)節(jié)進(jìn)入客票網(wǎng),經(jīng)過客票網(wǎng)中間件控制層后在電子票庫進(jìn)行交易處理。
1.1.2 客票網(wǎng)
旅客的線下購票請求通過客票網(wǎng)里的鐵路局集團(tuán)公司、車站線下終端接入中國國家鐵路集團(tuán)有限公司(簡稱:國鐵集團(tuán))中間件控制層后,到達(dá)電子票庫進(jìn)行交易處理。
電子票庫分為售票節(jié)點(diǎn)和退改簽節(jié)點(diǎn)。售票節(jié)點(diǎn)主要承擔(dān)售票、支付、候補(bǔ)等業(yè)務(wù)處理和數(shù)據(jù)存儲,并將數(shù)據(jù)實(shí)時同步到退改簽節(jié)點(diǎn);退改簽節(jié)點(diǎn)主要承擔(dān)改簽、退票和檢票等業(yè)務(wù)處理和數(shù)據(jù)存儲,并將數(shù)據(jù)實(shí)時同步到緩存集群,提供大并發(fā)高速查詢服務(wù)。
目前,電子票庫采用商業(yè)數(shù)據(jù)庫Sybase[3],并通過分庫、分表支持橫向擴(kuò)展,可以將業(yè)務(wù)請求均衡地分散到很多個數(shù)據(jù)庫節(jié)點(diǎn)上進(jìn)行處理,提高了電子票庫的處理能力。由于電子票庫仍然采用數(shù)據(jù)庫存儲過程實(shí)現(xiàn)業(yè)務(wù)邏輯,這種數(shù)據(jù)與業(yè)務(wù)緊耦合的方式[4],一定程度上制約了電子票庫的擴(kuò)展靈活性和業(yè)務(wù)治理水平。
為了實(shí)現(xiàn)業(yè)務(wù)與數(shù)據(jù)庫的徹底解耦,將原本在Sybase數(shù)據(jù)庫存儲過程中的業(yè)務(wù)邏輯抽離出來,可提升業(yè)務(wù)功能的快速迭代能力,提高業(yè)務(wù)復(fù)用能力和業(yè)務(wù)治理水平[5]。本文基于業(yè)界主流的業(yè)務(wù)治理模式——服務(wù)架構(gòu),對電子票庫進(jìn)行了架構(gòu)改造設(shè)計(jì),如圖2所示。
圖2 新電子票庫架構(gòu)
將現(xiàn)有Sybase+存儲過程的數(shù)據(jù)庫集群,逐漸改造為電子客票業(yè)務(wù)服務(wù)集群。新電子票庫架構(gòu)主要分為接入層、應(yīng)用層、數(shù)據(jù)層和總體支撐。
(1)接入層:負(fù)責(zé)電子票庫集群內(nèi)各應(yīng)用服務(wù)的導(dǎo)航、路由和管理。
(2)應(yīng)用層:基于領(lǐng)域驅(qū)動設(shè)計(jì)對電子票庫業(yè)務(wù)流程進(jìn)行重構(gòu),提煉并標(biāo)準(zhǔn)化基礎(chǔ)業(yè)務(wù)邏輯,形成可復(fù)用的核心組件,進(jìn)而構(gòu)建了公共基礎(chǔ)服務(wù)和業(yè)務(wù)服務(wù)。
(3)數(shù)據(jù)層:進(jìn)行服務(wù)改造后,數(shù)據(jù)存儲更加靈活,可繼續(xù)采用商業(yè)數(shù)據(jù)庫,也可以根據(jù)實(shí)際需求采用開源或者國產(chǎn)數(shù)據(jù)庫。
(4)總體支撐:主要包括監(jiān)控統(tǒng)計(jì)和服務(wù)治理[6]。為整個電子票庫集群提供了服務(wù)注冊、注冊中心、配置中心、動態(tài)擴(kuò)縮容、熔斷限流、持續(xù)交付與部署等支撐。
服務(wù)架構(gòu)相對于存儲過程模式更為復(fù)雜,電子票庫作為客票系統(tǒng)核心關(guān)鍵系統(tǒng),在改造過程中須保持業(yè)務(wù)的穩(wěn)定和連續(xù),以下針對改造中的若干關(guān)鍵技術(shù)進(jìn)行闡述。
電子票庫作為客票系統(tǒng)的核心業(yè)務(wù)系統(tǒng),通過與眾多上下級系統(tǒng)及同級子系統(tǒng)進(jìn)行交互和協(xié)同共同承擔(dān)客票業(yè)務(wù)。因此電子票庫在進(jìn)行服務(wù)化改造后,需要進(jìn)行適配,繼續(xù)保持與外部系統(tǒng)的交互,達(dá)到電子票庫在客票系統(tǒng)中的業(yè)務(wù)無縫銜接。適配技術(shù)主要分為3個方面,如圖3所示。
圖3 新電子票庫系統(tǒng)適配示意
2.1.1 API適配
應(yīng)用程序編程接口(API,Application Programming Interface)適配。如圖3左上方所示,API接口分超文本傳輸協(xié)議(HTTP,Hypertext Transfer Protocol)和傳輸控制協(xié)議(TCP,Transmission Control Protocol)2類接口,是用于支撐電子票庫的上級系統(tǒng)接入。通過約定報(bào)文規(guī)范,進(jìn)行報(bào)文格式化、序列化完成適配,適配后,線上票務(wù)交易系統(tǒng)、線下票務(wù)交易系統(tǒng)可通過中間件基于多種網(wǎng)絡(luò)協(xié)議進(jìn)行業(yè)務(wù)請求,管理控制也可通過TCP進(jìn)行業(yè)務(wù)管理。
2.1.2 數(shù)據(jù)存儲適配
如圖3左下方所示,數(shù)據(jù)存儲主要為數(shù)據(jù)庫、緩存、文件系統(tǒng)等數(shù)據(jù)資源,通過服務(wù)的內(nèi)置持久化框架或者數(shù)據(jù)接口進(jìn)行研發(fā)適配。實(shí)現(xiàn)對Sybase數(shù)據(jù)庫、其他類型數(shù)據(jù)庫、Redis緩存、其他緩存、文件系統(tǒng)的訪問。
2.1.3 同級關(guān)聯(lián)系統(tǒng)適配
如圖3右半部分所示,同級關(guān)聯(lián)系統(tǒng)主要包括客票系統(tǒng)的智能運(yùn)營維護(hù)、定時任務(wù)、監(jiān)控系統(tǒng)、業(yè)務(wù)審計(jì)、服務(wù)治理、安全掃描等系統(tǒng)。通過對Web適配、運(yùn)營維護(hù)管理適配、報(bào)警通知適配、日志適配和技術(shù)支撐適配等技術(shù)進(jìn)行研發(fā),實(shí)現(xiàn)電子票庫服務(wù)化改造在客票系統(tǒng)中的無縫遷移。
在新電子票庫部署完畢之后,須進(jìn)行數(shù)據(jù)遷移[7],整個數(shù)據(jù)遷移過程包括數(shù)據(jù)遷移評估、結(jié)構(gòu)遷移、數(shù)據(jù)遷移和數(shù)據(jù)校驗(yàn)等過程[8],如圖4所示。
圖4 數(shù)據(jù)庫遷移流程
2.2.1 數(shù)據(jù)遷移評估
如果目標(biāo)數(shù)據(jù)庫與源端數(shù)據(jù)庫為同構(gòu)數(shù)據(jù)庫,則主要對遷移數(shù)據(jù)量、存儲空間、遷移時間和工作量進(jìn)行評估;如果目標(biāo)數(shù)據(jù)庫與源端數(shù)據(jù)庫為異構(gòu)數(shù)據(jù)庫,則在上述評估內(nèi)容的基礎(chǔ)上增加對數(shù)據(jù)庫的函數(shù)、索引、序列,以及數(shù)據(jù)類型、字段長度等對象的兼容性評估,并評估是否存在顯性或隱性的遷移風(fēng)險。
2.2.2 數(shù)據(jù)庫對象遷移
將包括表結(jié)構(gòu)、索引、序列等在內(nèi)的數(shù)據(jù)庫對象進(jìn)行遷移,支持根據(jù)遷移目標(biāo)數(shù)據(jù)庫類型進(jìn)行數(shù)據(jù)庫對象的定義轉(zhuǎn)換。
2.2.3 數(shù)據(jù)遷移
全量數(shù)據(jù)遷移及后續(xù)的增量數(shù)據(jù)遷移,是為保障遷移過程中源端數(shù)據(jù)庫的數(shù)據(jù)變動能夠及時同步到目標(biāo)數(shù)據(jù)庫中,確保兩端數(shù)據(jù)庫的數(shù)據(jù)一致性[9]。由于全量數(shù)據(jù)遷移過程持續(xù)時間較久,期間源端數(shù)據(jù)庫仍有新業(yè)務(wù)數(shù)據(jù)寫入,為保證數(shù)據(jù)遷移的一致性,在全量數(shù)據(jù)遷移之前,將啟動對增量數(shù)據(jù)監(jiān)聽,將增量變動數(shù)據(jù)存儲在本地存儲中。當(dāng)全量數(shù)據(jù)遷移完成后,對增量數(shù)據(jù)回放,將增量數(shù)據(jù)同步到新系統(tǒng)數(shù)據(jù)庫中。
2.2.4 遷移校驗(yàn)
分別對源端數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫進(jìn)行全量數(shù)據(jù)和增量數(shù)據(jù)抽取,按行生成哈希值,對哈希值進(jìn)行比較。如果哈希值一致,則兩端數(shù)據(jù)庫數(shù)據(jù)一致;如果哈希值檢測數(shù)據(jù)不一致,則根據(jù)不一致的哈希值位置,找到相應(yīng)數(shù)據(jù)記錄進(jìn)行修復(fù)和數(shù)據(jù)補(bǔ)償。
為實(shí)現(xiàn)業(yè)務(wù)流量遷移,以及當(dāng)前電子票庫向新電子票庫平滑過渡,將2種架構(gòu)的電子票庫作為同等實(shí)例節(jié)點(diǎn)并行在生產(chǎn)系統(tǒng)中,通過中間件將業(yè)務(wù)請求逐步轉(zhuǎn)發(fā)到新電子票庫上,實(shí)現(xiàn)業(yè)務(wù)流量的遷移。具體業(yè)務(wù)遷移如圖5所示。
圖5 電子票庫服務(wù)化改造流量遷移
業(yè)務(wù)流量遷移技術(shù)實(shí)現(xiàn)多種遷移規(guī)則配置,支持按用戶遷移、按車次遷移等,可支持新老系統(tǒng)的灰度遷移與并行運(yùn)行。同時,數(shù)據(jù)實(shí)時同步備份到當(dāng)前電子票庫,在服務(wù)集群試運(yùn)行驗(yàn)證期遇到故障時,可及時切回當(dāng)前電子票庫,降低風(fēng)險。
改造后的電子票庫充分利用了服務(wù)架構(gòu)的優(yōu)勢,實(shí)現(xiàn)業(yè)務(wù)靈活擴(kuò)展,并有效地提高處理能力,試運(yùn)行的具體效果體現(xiàn)如下。
本文以AKF立方體擴(kuò)展模型作為對電子票庫服務(wù)化改造后的擴(kuò)展性評估,AKF立方體也叫做Scala Cube,它在《The Art of Scalability》一書中被首次提出[10],AKF 把系統(tǒng)擴(kuò)展分為3個擴(kuò)展維度:X軸、Y軸和Z軸。X軸表示無狀態(tài)實(shí)例的水平擴(kuò)展,Y軸表示功能或者服務(wù)的擴(kuò)展,Z軸表示散列塊或者數(shù)據(jù)分片擴(kuò)展。
在服務(wù)改造前,電子票庫由于采用存儲過程實(shí)現(xiàn)業(yè)務(wù)邏輯,業(yè)務(wù)邏輯緊耦合在有狀態(tài)的數(shù)據(jù)庫里,如圖6(a)所示。
圖6 電子票庫AKF立方體擴(kuò)展評估對比
(1)在X軸方向不具備擴(kuò)展能力;
(2)在Y軸具備2層的業(yè)務(wù)劃分(售票層和退改簽層),具備一定的擴(kuò)展能力;
(3)在Z軸上基于客票系統(tǒng)強(qiáng)大的動態(tài)分區(qū)系統(tǒng)具備較強(qiáng)的擴(kuò)展能力。
進(jìn)行服務(wù)化改造后,新電子票庫對業(yè)務(wù)邏輯和數(shù)據(jù)存儲進(jìn)行了解耦。如圖6(b)所示。
(1)在X軸上新增了無狀態(tài)業(yè)務(wù)實(shí)例的橫向擴(kuò)展能力,實(shí)現(xiàn)了一定范圍內(nèi)處理能力的線性增長,提高了系統(tǒng)容量。此外,此種擴(kuò)展方式無額外開發(fā)成本,實(shí)施簡單,使得新電子票庫擴(kuò)展高效便捷;
(2)在Y軸上,增加了多層業(yè)務(wù)職責(zé)劃分,將新電子票庫拆分為更細(xì)粒度的多個服務(wù)。每個服務(wù)都負(fù)責(zé)特定的業(yè)務(wù)領(lǐng)域,如購票、退票、改簽等,降低了復(fù)雜性,提高了可維護(hù)性和可擴(kuò)展性;
(3)在Z軸上,保持不變,仍然保持客票系統(tǒng)強(qiáng)大的數(shù)據(jù)分區(qū)擴(kuò)展能力。
綜上所述,服務(wù)化后的新電子票庫具備了豐富而強(qiáng)大的擴(kuò)展能力。
對電子票庫當(dāng)前架構(gòu)和服務(wù)化架構(gòu)的單數(shù)據(jù)節(jié)點(diǎn)上進(jìn)行提交訂單業(yè)務(wù)、支付業(yè)務(wù)壓測。性能對比如圖7所示。
圖7 電子票庫服務(wù)化改造前后性能對比
從圖7中可以看出,服務(wù)化架構(gòu)在請求并發(fā)較小時,響應(yīng)時間高于當(dāng)前架構(gòu)下存儲過程模式,這是由服務(wù)在模塊之間及與數(shù)據(jù)庫之間網(wǎng)絡(luò)交互多于存儲過程導(dǎo)致的,是服務(wù)化改造需要認(rèn)知到的一個事情。但是隨著并發(fā)量增加,當(dāng)并發(fā)超過50 TPS的時候,服務(wù)響應(yīng)比較穩(wěn)定,而存儲過程響應(yīng)時間迅速增長。從而可以判斷出,服務(wù)化的電子票庫在大并發(fā)和高負(fù)載的場景下處理能力優(yōu)于存儲過程模式。
本文基于服務(wù)架構(gòu),對電子票庫系統(tǒng)進(jìn)行了遷移改造。試運(yùn)行的效果表明,改造后的系統(tǒng)不僅實(shí)現(xiàn)了原架構(gòu)中業(yè)務(wù)和數(shù)據(jù)的相分離,提高了業(yè)務(wù)擴(kuò)展能力和處理能力,同時,提高了客票系統(tǒng)業(yè)務(wù)復(fù)用能力和業(yè)務(wù)治理水平,為未來客票系統(tǒng)應(yīng)用服務(wù)的標(biāo)準(zhǔn)化、敏捷化建設(shè)提供了經(jīng)驗(yàn)。