李貝貝,朱建生,閻志遠,朱建軍,戴琳琳
(1.中國鐵道科學研究院 研究生部,北京 100081;2.中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081)
2012年春運期間,12306互聯網售票網站上線,支持全路列車車票發售,自此,火車票不僅可以通過電話訂票、車站與代售點窗口等方式進行購買,還可以通過12306網站進行購票。隨著12306網站的推廣應用,鐵路互聯網售票量在各售票渠道中的占比逐步達到80%以上,已經成為旅客最主要的購票方式。2020年春運期間,12306網站在售票高峰日的網絡點擊量達到1 495億次,意味著每秒接受170多萬的訪問量,而巨大的訪問量并非全部來源于旅客點擊,更多的訪問量來源于搶票軟件的自動提交。因此,以面向鐵路旅客售票為基礎的鐵路客票系統的建設,不僅需要滿足旅客的基本購票需要,還面臨著第三方搶票軟件帶來的高并發運行壓力。近年來,隨著響應式理念在網頁設計[1]、網絡路由[2]、公交調度[3-4]、汽車交互設計等方面的設計與應用[5],基于響應式理念探索改造鐵路客票系統業務,建立客票系統后端資源組織決策模式,進而控制鐵路客票系統的業務流量等,成為旅客購票環境公平性、內部資源集約性、業務流量均衡性的關鍵。
鐵路客票系統目前采用集中+分布式的體系架構,鐵路客票系統由中國國家鐵路集團有限公司(以下簡稱“國鐵集團”)、鐵路局集團公司和車站三級組成,其中互聯網售票與手機售票等業務集中部署在國鐵集團,全路客票席位及驗檢票業務等部署于18個鐵路局集團公司,車站級一般部署終端設備與輕業務。鐵路客票系統總體架構如圖1所示。

圖1 鐵路客票系統總體架構Fig.1 Overall architecture of railway ticketing system
國鐵集團級客票系統,已建成同城客票第一生產中心和第二生產中心,采用雙中心雙活的系統架構,保障客票系統在國鐵集團級的高可用性。同時為保障鐵路客票系統的安全,內部采用三級網絡架構,包括客服外網、客服內網和客票網[6],各層級網絡的邊界均設有安全防護措施。在業務實現上,內容分發網絡(Content Delivery Network,CDN)與源站聯動,實現各專線接入時的流量配比;客服外網層主要通過負載均衡和網站應用級入侵防御系統(Web Application Firewall,WAF)攔截大部分的攻擊流量,作為各應用服務的入口,實現基本的交易排隊、余票緩存、驗證碼、監控、消息通知等相關服務;客服內網層實現基本的用戶登陸、常用聯系人查詢、接續換乘及候補兌現等服務;客票網作為鐵路客票系統的核心交易層,不僅支持高并發業務查詢(訂單查詢、實名制查詢、歷史訂單查詢)等,還提供客票席位計算、余票計算、各鐵路局集團公司中心席位的中間件路由與尋址,以及客票基礎數據與電子票庫等的存儲等。國鐵集團二中心同時支持電話訂票、營銷分析與常旅客等服務。
鐵路局集團公司級客票系統部署在18個鐵路局集團公司的中心機房,具備席位管理、自動售票、自助驗票檢票、收入統計和鐵路局集團公司級營銷分析等系統功能;鐵路局集團公司按照售票高峰量、售票情況配置硬件資源,席位數據庫主要采用Sybase ASE SQL Server+小型機的部署方式,數據存儲資源以集中式共享存儲為主;18個鐵路局集團公司的數據庫節點共計200多個,存儲數據除了席位、交易存根等信息外,還包括線上和其他鐵路局集團公司售出該局票后,回傳到鐵路局集團公司的存根、電子票等數據。鐵路局集團公司級的其他硬件資源還包括驗票檢票、交易中間件、數據傳輸等應用服務器。
車站級客票系統主要部署在作業終端,包括窗口售票、窗口退票、自助驗票檢票、自動售取票等終端設備,窗口終端大多部署客票專用應用軟件,采用C/S架構訪問后臺服務。目前大部分車站已取消車站級數據庫服務器;少數車站仍然存在數據庫服務器存儲交易數據,交易信息需要上傳至鐵路局集團公司中心數據庫和其他席位歸屬中心數據庫中。
2021年春運期間,鐵路客票系統日高峰訪問量超過2 000億次,其中多集中在余票查詢、訂單查詢及實名制查詢上。
(1)余票查詢。全路席位及余票信息分布于各鐵路局集團公司客票網,每個鐵路局集團公司的席位數據以多節點方式存儲。當席位數據發生變化時,余票信息需要實時計算與更新,隨著電子客票、全路通退與通改簽、線上線下預售期統一等業務的不斷發展,余票查詢的業務組織方式逐漸轉變為鐵路全渠道都可以查詢全國范圍預售期內的余票信息。余票信息被計算后,將通過數據庫復制技術,同步到國鐵集團級的線下余票集群和線上余票集群,再將余票數據緩存到客服外網的余票緩存數據庫或者公有云。線下業務查詢余票數據時,在線下余票集群進行查詢;互聯網查詢余票時,可以根據并發情況,在余票緩存集群或公有云上查詢余票信息。余票數據組織如圖2所示。

圖2 余票數據組織Fig.2 Organization of remaining tickets
(2)實名制與訂單查詢。隨著電子客票在各高速鐵路、普速鐵路的推廣與應用,客票實名制信息與訂單信息已實現國鐵集團級的集中存儲,實名制與訂單數據組織如圖3所示。線上、線下業務產生的實名制信息與訂單信息,分別記錄到一中心和二中心的A層電子票庫,通過數據庫復制技術,再將A層數據同步到T層電子票庫。一般A層電子票庫主要實現售票交易,T層電子票庫主要實現退票、改簽等交易。A層與T層數據,通過數據庫復制技術,分別被最終同步到客服內網的實名制集群與訂單集群。

圖3 實名制與訂單數據組織Fig.3 Organization of the real-name system and order data
(1)CDN與源站聯動。CDN為互聯網請求的流量配比中心,可以接受來自不同通信運營區域的客戶IP業務請求,并設置不同的專線配比轉發給服務端。客戶端流量調度模塊可以解析不同區域的客戶請求,當某區域節點宕機時,客戶端流量調度模塊能夠計算配比并更改配比設置。服務端流量調度模塊可以監測客戶端流量變化,根據流量的變化優化調整CDN流量配比,最大化利用專線帶寬。
(2)WAF數據風控。WAF數據風控多以重復IP提交、賬戶風險等級等多種方式,攔截大部分的高并發作弊請求,在訂單查詢、支付等環節,減少撞庫、黃牛倒賣、網頁篡改、DDoS攻擊、賬號泄露、木馬植入等風險,以數據安全為核心,減少無效流量入侵鐵路客票系統。
(3)負載均衡。鐵路客票系統內部的多個子業務系統,多采用分布式、高可用架構進行部署,多應用實例之間一般通過軟負載或硬負載實現服務的反向代理,負載均衡模塊可以實現業務流量調度,其中流量調度多采用加權輪詢或加權最小連接調度等算法實現。
(4)線上與線下業務流量分離。鐵路客票系統余票信息通過復制與緩存等技術,在國鐵集團級實現面向線上與線下不同業務應用的余票集群,使得不同業務交易在余票信息的使用上加以區分,獨立線下與線上的業務流量。
(5)數據庫承載核心業務流量。無論是A層還是T層的電子票庫節點,部分業務邏輯的實現,均通過數據庫存儲過程完成,減少數據庫的外部訪問流量,提升數據訪問性能,但增加了業務與數據之間的高耦合度。
響應式方法能夠結合不同的業務,為用戶提供更加便捷、靈活的用戶體驗。為實現響應式流量控制,鐵路客票系統通過業務模式的更新與改造,建立后臺資源組織決策模式,基于服務端的能力輸出方式,在準實時業務、預約性業務及交易類業務等環節進行設計與優化,在滿足線上與線下不同用戶的購票需求的同時,實現對鐵路客票系統的業務流量控制。
鐵路客票系統響應式流量控制采用集中式架構,主要應用于國鐵集團級,內部分別部署于客服外網、客服內網和客票網。為保證系統安全可靠運行,在國鐵集團級客票系統中,嚴格進行分區分域管理。鐵路客票系統響應式流量控制應用架構如圖4所示。

圖4 鐵路客票系統響應式流量控制應用架構Fig.4 Application architecture of responsive traffic control in the railway ticketing system
鐵路客票系統響應式流量控制功能,主要基于鐵路客票系統的準實時響應式、預約性響應式及交易類響應式等相關業務服務進行設計。
(1)準實時響應式。準實時響應式主要面向預售期內余票量不足或者沒有余票時而進行的設計,在客票系統內部,客服外網提供候補入口及候補排隊功能,客服內網通過余票計算集群,對客票網內各鐵路局集團公司的票庫進行實時監控并完成扣票動作,實現候補訂單的兌現,并記錄候補訂單,完成候補訂單對旅客的通知功能。準實時響應式的構建,可以減少高頻的訂單查詢流量、余票查詢流量等。
(2)預約性響應式。針對預售期外的旅客購票需求,客服外網提供預約購票入口、預約排隊及通知等服務,客服內網提供預約單需求分析、預約訂單計算、預約兌現等功能,客票網提供預約購票規則管理等功能,實現與鐵路列車調度圖等的聯動與分析。預約性響應式的設計,可以為高峰期的購票提前分擔流量,使購票的流量在空間分布上更加均衡。
(3)交易類響應式。交易類響應式主要由統一接入平臺、預售期統一和電子客票集群改造3部分構成,主要分布于客票網內,部分分布于客服內外網,如統一接入服務等。統一接入服務在各級網絡中均存在,主要分為客服外網統一接入平臺、客服內網統一接入平臺、客票網統一接入平臺。預售期統一將線上互聯網、手機客戶端等與線下窗口、代售點等的客票銷售預售期保持一致,避免線下預售期提前帶來的可能囤票操作,分流部分線下售票流量。電子客票集群改造主要將既有Sybase數據庫中的存儲過程邏輯外移,并適配PostgreSQL數據庫,通過工作流服務與微服務方式進行改造,均衡內部業務流量。
2.2.1 候補購票
候補購票的流量控制主要通過業務層進行控制,當用戶提交候補訂單后,候補訂單進入排隊隊列,此時用戶再查詢相應車次余票信息時,無需再通過客服外網至客服內網再至客票網層級的較長業務邏輯鏈,而是通過緩存存儲的車次余票信息快速響應,因而可以極大程度減少12306用戶對余票查詢業務請求量。候補購票業務流程如圖5所示。

圖5 候補購票業務流程Fig.5 Business process of alternative tickets
當用戶完成候補訂單支付時,候補訂單數據庫及候補隊列系統中均有記錄,至此一個候補訂單生成。通過輪詢余票查詢,獲取返回的余票實現候補兌現。候補兌現所需要的所有信息查詢與調用,均在候補訂單數據庫中進行,候補訂單數據庫能夠保證數據存儲的安全與準確。
2.2.2 預約購票
預約購票的業務流程,主要包含用戶預約需求匯總、運行圖判定及需求兌現3個流程,預約購票業務流程如圖6所示。預約購票實現過程中如下:①用戶提交模糊的預約需求單(包含乘車日期、上車站、下車站、席別、發時區間、到時區間、歷時等);②系統根據“乘車日期+區間+席別”匯總,劃分成不同的需求隊列;③車次運行圖確定后,觸發系統工作流,先為用戶的預約需求生成系統推薦的匹配車次(如Top10),然后通知引導用戶自行選擇相匹配的車次;④在列車預售期開始的前1 d,系統集中兌現用戶預約需求;⑤兌現成功后,系統通知用戶及時支付、完成訂單;⑥兌現失敗的,判斷用戶是否接受轉為候補訂單,對于未接受的,終止業務流程;對于已接受轉候補訂單的,系統自動為用戶轉為候補訂單。

圖6 預約購票業務流程Fig.6 Business process of booking tickets
2.2.3 交易過程優化
鐵路客票系統交易過程優化的過程,主要將數據庫存儲過程中的業務邏輯與數據庫進行解耦,將沉淀在Sybase數據庫存儲過程中的業務邏輯進行抽離,利用業內主流平臺框架模型和語言重新實現。交易過程優化的響應式改造,主要包括客票全渠道預售期統一、統一接入平臺和交易業務服務化的設計等。交易過程優化業務功能如圖7所示。

圖7 交易過程優化業務功能Fig.7 Business function on optimization of the transaction process
(1)全渠道預售期統一。改造線下程序,主要包括窗口程序(包括車站窗口、代售點等),自動售票(包括自動售票機、驗檢票等)程序與票務管理(包括票務計劃、票價等),實現相關扣票命令指向國鐵集團終端服務,完成線下余票集群對統一預售功能的支持,并實現線下業務行為分析與請求排隊,同時完善交易中間件導航各類服務集群。
(2)統一接入平臺。部署于國鐵集團級,以面向業務服務為主,主要包括支持多種協議接入、結合客票應用的安全風險控制、業務訪問的鑒權認證、業務訪問的導航管控及管理等5個方面,其中管理功能實現對接入請求和連接的管理,包括請求超限時的熔斷和限流、接口管理、流量監控、流量分析等。
(3)交易業務服務化。針對既有鐵路電子票庫,抽離Sybase數據庫中的存儲過程邏輯,通過微服務方式進行改造,從業務角度進行服務拆分,抽離出接入層、編排層、基礎服務、業務服務和數據服務等,降低應用模塊的耦合性,進一步提升交易類響應式的流量調度和微服務治理,實現數據的統一訪問控制和權限管理。
鐵路客票系統業務響應式流量控制的研究,為鐵路旅客運輸帶來極大的便利。目前,以候補購票為代表的準實時響應式已全路上線;以預約購票為代表的預約性響應式處于研發過程中;新建的交易類響應式已經部分上線,并逐步擴大應用范圍。
鐵路客票系統的預售期天數不固定,但目前為30 d,預售期內的車票存在有票和無票2種情況。有票情況下,旅客無論從線上網站、12306客戶端等,還是從線下代售點、車站窗口等途徑購票時,均可以實時滿足需求;無票情況下,候補購票的應用與全面推廣[7],準實時地解決旅客需要不斷關注余票變化的問題,降低用戶時間成本,提升用戶體驗。
2019年5月22日起,鐵路候補購票服務已擴大應用到所有旅客列車。候補購票為旅客提供了更加方便快捷的購票服務,同時有利于客運組織管理者及時掌握旅客出行需求,科學組織列車開行,讓運力安排更加精準、旅客購票體驗更佳[8]。
候補購票服務的推出,一定程度上也可以提升用戶信息安全,降低用戶使用第三方搶票軟件而導致的用戶隱私信息泄露的風險,減少旅客購票過程中額外經濟支出的問題。同時,第三方搶票軟件的請求量的降低,可以減少對客票系統的無效請求,降低鐵路客票系統的外部訪問流量,將預售期內無余票情況下的旅客購票流量,最大程度地約束在鐵路客票系統內部進行均衡,提升鐵路客票系統的魯棒性。
既有鐵路客票系統中,30 d預售期以外未到起售時間時,旅客如果有購票需求,仍然需要等到預售期30 d當日的指定起售時間再進行購買,使用上仍然不便利。
在結合計劃管理、票額預分、預約業務規則制定等售票組織策略的基礎上,考慮預約購票服務,淡化車票預售期,事先了解旅客的出行需求,按照出行需求的時間、出發到達城市、數量等信息,安排并優化開行方案、席位復用、席位共用、票額預分等售票組織策略,促進“一日一圖”策略的實現,實現鐵路運力資源的最大集約化利用,提升用戶出行效率和出行體驗。一旦進入鐵路規定的預售期,預約購票服務自動終止[9]。預約購票一定程度上可以減少新票發售時的搶票現象,緩解系統和網絡壓力,同時可以減少余票查詢消耗的大量資源,在進一步提升旅客購票體驗的同時,平衡高峰期的客票系統網絡流量。
(1)全渠道預售期統一。既有電話訂票、互聯網、手機客戶端等線上售票渠道預售期為30 d,車站窗口、自動售票機、代售點等線下銷售渠道的預售期為28 d,該舉措的目標為引導旅客優先線上購票,針對遏止線下囤票、倒票等問題起到明顯作用,但未能滿足不同旅客的購票需求。全渠道的預售期統一,可以分擔部分互聯網售票的業務流量并引導至線下,一定程度上控制業務流量的均衡性。2020年11月,全渠道預售期統一上線運行。全渠道預售期的統一,控制線下售票的高頻異常,實現線上、線下購票速度的協調調度,實現對席位庫的有序安全訪問。功能上滿足交易邏輯控制、線下余票查詢、線下業務行為分析和線下排隊系統等4部分,有序地確保客票系統核心交易的平穩、安全和高效運行。
(2)交易業務服務化。鐵路客票系統內部的售票業務邏輯組織,一般通過訪問中間件,實現各鐵路局集團公司中心的席位操作。內部業務實現以Sybase數據庫的存儲過程為主,與數據庫本身綁定緊密。將數據庫中的業務邏輯通過拆分并以微服務方式重新實現,可以滿足分布式、高可用等特點,實現業務流量的均衡性。交易業務微服務化改造,實現客票系統業務與數據存儲松耦合,促進客票系統架構轉型,實現業務分布式擴展和云化能力。目前新增電子票庫微服務化集群節點,支撐80萬用戶線上購票、支付、乘意險、候補購票等業務,每天支撐售票1.1萬張、候補購票150張。與此同時,交易業務服務化將業務流量從數據庫中進行分離,提供集成化、標準化的技術組件能力,實現應用從開發、編譯、部署、測試、發布到運行的全生命周期的自動管理和標準發布流程管理,支撐系統7×24 h不間斷服務和自動化運維,降低系統運維成本,并支撐業務快速迭代,降低開發周期,為業務應用的持續創新和穩定運行提供有力保障。
我國鐵路客票系統經過20多年的發展,目前已成為世界上規模最大的實時交易系統之一,面對每日如此巨大的請求量,確保各業務系統模塊的健壯,有助于保障系統的穩定、持續運行。研究從響應式流量控制的角度,設計優化鐵路客票系統,推動鐵路客票系統內部應用各模塊的業務流量更加趨向均衡。但是,鐵路客票系統業務功能豐富、系統架構復雜,可以進行流量控制與均衡的關鍵點較多,僅從響應式理念的角度進行分析還不夠,還需要進一步擴大研究范圍,從系統架構、業務功能及安全防御等多個角度廣泛優化鐵路客票系統的流量控制機制。