楊立鵬,王富章,梅巧玲,朱建軍
(中國鐵道科學研究院,北京 100081)
互聯(lián)網(wǎng)售票中的海量請求處理技術研究
楊立鵬,王富章,梅巧玲,朱建軍
(中國鐵道科學研究院,北京 100081)
鐵路互聯(lián)網(wǎng)售票已成為售票的主要渠道之一。本文介紹了鐵路互聯(lián)網(wǎng)售票系統(tǒng)的發(fā)展歷程及特點,分析了互聯(lián)網(wǎng)應對海量請求的常用技術,進一步介紹了鐵路互聯(lián)網(wǎng)售票系統(tǒng)在應對海量請求所進行的優(yōu)化及所取得的成效。
鐵路互聯(lián)網(wǎng)售票;12306網(wǎng)站;海量請求處理
鐵路互聯(lián)網(wǎng)售票系統(tǒng)(以下簡稱:互聯(lián)網(wǎng)售票系統(tǒng))實現(xiàn)了旅客在網(wǎng)上自助辦理購票、改簽、退票等業(yè)務,同時提供短信通知服務、網(wǎng)銀支付服務、電子客票服務、窗口配套服務、車站檢票服務、列車驗票服務、投訴及咨詢服務[1]。相比于其他電子商務系統(tǒng),鐵路互聯(lián)網(wǎng)售票系統(tǒng)面臨著更加復雜的情況。
(1)業(yè)務規(guī)則復雜。與普通電商的靜態(tài)庫存相比,互聯(lián)網(wǎng)售票系統(tǒng)每發(fā)售一張車票,均會根據(jù)預先設置的發(fā)售策略對該車次所有停靠站兩兩組合之間的剩余席位數(shù)量進行調整,存在較大的計算量。
(2)交易型系統(tǒng),對事務要求強一致性。與門戶網(wǎng)站及其他電商相比,互聯(lián)網(wǎng)售票系統(tǒng)90%以上請求均為動態(tài)請求,處理復雜度更高。部分電商在庫存處理上可允許進行一定的超售,互聯(lián)網(wǎng)售票系統(tǒng)對事務要求嚴格,不允許出現(xiàn)此情況,對并發(fā)處理能力提出了更高要求。
(3)多維業(yè)務訪問需求。鐵路互聯(lián)網(wǎng)售票系統(tǒng)并不是孤立存在的電商平臺,其需要與鐵路客運線下相關業(yè)務進行無縫結合。互聯(lián)網(wǎng)發(fā)售的車票,需滿足旅客持身份證取票或閘機進站等需求。線下業(yè)務的相關操作,也需要實時反饋至互聯(lián)網(wǎng)售票系統(tǒng)。
(4)系統(tǒng)訪問峰谷壓力差異巨大。目前鐵路運能仍嚴重不足,車票為稀缺資源,同時也為剛性需求,業(yè)務上存在訪問高度集中的秒殺行為。
針對海量請求,不同行業(yè)不同企業(yè)不同業(yè)務采用了不同的解決方案。但大型電商、門戶網(wǎng)站解決思路均應涉及到以下幾個概念。
1.1 CDN加速
內容分發(fā)網(wǎng)絡(CDN,Content Delivery Network),是構筑在現(xiàn)有的互聯(lián)網(wǎng)基礎上的一種先進的流量分配網(wǎng)絡。結合緩存技術可將源站內容分發(fā)至全國所有節(jié)點,通過先進的內容智能路由技術,在互聯(lián)網(wǎng)用戶訪問網(wǎng)站時,將請求自動指向到分布于各地的離用戶最近的緩存服務器上直接訪問,縮短用戶查看對象的延遲,提高用戶訪問網(wǎng)站的響應速度與網(wǎng)站的可用性。
1.2 負載均衡
負載均衡是一種動態(tài)均衡技術,通過分析數(shù)據(jù)包,掌握網(wǎng)絡中的數(shù)據(jù)流量狀況,把任務按指定算法策略合理均衡地分配出去。這種技術基于現(xiàn)有網(wǎng)絡結構,提供了一種擴展服務器帶寬和增加服務器吞吐量的廉價有效的方法,加強了網(wǎng)絡數(shù)據(jù)處理能力,提高了網(wǎng)絡的靈活性和可用性??蓪⒇撦d壓力根據(jù)某種算法合理分配到集群中的每一臺計算機上,從而提高系統(tǒng)的服務能力,達到高可靠性目的。
1.3 數(shù)據(jù)庫拆分
隨著數(shù)據(jù)庫事務量的大幅增長和數(shù)據(jù)庫體積的增大,數(shù)據(jù)層的大小和事務規(guī)模呈線性增長,響應時間往往呈對數(shù)增長。需要采取高擴展性的方法,用以提高數(shù)據(jù)庫的吞吐和整體性能。
數(shù)據(jù)庫拆分即將一個大的數(shù)據(jù)庫,跨服務器分解成許多更小的數(shù)據(jù)庫??山档蛯PU、內存、磁盤的競爭,解決性能瓶頸。同時拆分后數(shù)據(jù)庫更易于管理、數(shù)據(jù)庫速度更快、降低成本的優(yōu)點。
互聯(lián)網(wǎng)售票系統(tǒng)在設計研發(fā)過程中,全面吸納國內外知名網(wǎng)站的技術經(jīng)驗,針對鐵路售票業(yè)務復雜、峰谷壓力差異巨大等特點,提出了一系列的模型、理論和方法,綜合運用緩存、虛擬化、云計算、大數(shù)據(jù)、數(shù)據(jù)切片、流量控制、信息安全防護等技術,保障在超大規(guī)模并發(fā)的壓力下安全、平穩(wěn)、準確、高效運行。部分解決策略如下。
2.1 交易排隊機制
春運售票高峰時網(wǎng)站壓力近乎日常售票的百倍,如按照春運高峰需求進行資源配置,將造成日常資源閑置。為保證在一定資源情況下穩(wěn)定運行,同時旅客具有良好的用戶體驗,互聯(lián)網(wǎng)售票系統(tǒng)研究實現(xiàn)了交易排隊機制,通過該架構對旅客發(fā)起的超高并發(fā)購票請求進行緩沖,保證對核心數(shù)據(jù)庫請求壓力可控。異步化模塊首先將接收到的購票請求根據(jù)相應算法放入隊列集群和高速緩存中,隊列設計考慮不同資源間隔離,減少用戶的等待,細化隊列劃分粒度,以鐵路局負載中心為基本單位,按日進行排隊,保證了公平公正的處理原則。處理模塊采用多線程模式進行設計,其中一個線程對后臺服務負載進行監(jiān)控,根據(jù)負載情況對處理能力進行調度,當后臺所有處理資源繁忙時,處理模塊將自動堵塞,避免后臺服務過載;當后臺具有空閑資源時,處理模塊將自動喚醒,立刻從隊列中獲取購票請求進行處理;當某鐵路局中心的購票請求處理異常緩慢時,處理模塊將自動降低對該鐵路局中心請求所在隊列的處理速度,避免資源的長時間占用,達到處理能力最大化,具有智能化、自動化的特點。購票請求處理完成后,將自動回寫處理狀態(tài)到高速緩存。旅客在整個處理過程中可隨時查詢請求的處理狀態(tài)。通過異步化的處理,使得系統(tǒng)接收應對旅客并發(fā)請求的能力得到了質的提升,提高了系統(tǒng)的穩(wěn)定性和高可用性,也極大改善了用戶的購票體驗。
2.2 分布式計算余票
互聯(lián)網(wǎng)渠道發(fā)售的車票目前已占到全鐵路售票量的50%以上,遠超窗口、代售點等傳統(tǒng)售票渠道的客票發(fā)售量。用戶在使用互聯(lián)網(wǎng)購票時,查詢需要購買車次的剩余車票(余票)數(shù)量是一個不可或缺的環(huán)節(jié),在余票查詢交互過程中,用戶需要指定日期,發(fā)站和到站,以查詢具體車次及其車票剩余數(shù)量,并根據(jù)查詢結果選擇車次,完成后續(xù)的購票操作。余票查詢服務的性能與整個互聯(lián)網(wǎng)售票系統(tǒng)的運行效率及用戶的購票體驗關系密切。
針對鐵路互聯(lián)網(wǎng)售票中余票查詢服務的業(yè)務和性能需求,設計融合了內存數(shù)據(jù)庫、分布式系統(tǒng)框架、消息隊列等技術,設計實現(xiàn)了余票查詢集群系統(tǒng),為余票查詢業(yè)務提供切實可行的解決方案。余票集群系統(tǒng)體系架構如圖1所示。
余票查詢集群系統(tǒng)主要分為以下3部分:
(1)數(shù)據(jù)產生。傳統(tǒng)關系型數(shù)據(jù)中的售票業(yè)務帶來余票數(shù)據(jù)的變化,通過偵聽數(shù)據(jù)庫數(shù)據(jù)變化,全量捕獲并處理余票數(shù)據(jù)變動信息。
(2)數(shù)據(jù)同步。通過消息隊列機制,接收到變化的余票數(shù)據(jù)時,進行業(yè)務解析,并將數(shù)據(jù)同步至余票查詢集群中。
(3)數(shù)據(jù)運算。內存數(shù)據(jù)庫分布式集群由分布在不同物理服務器上的多個節(jié)點組成,每個節(jié)點內含有若干個數(shù)據(jù)區(qū)域,每個數(shù)據(jù)區(qū)域內含有若干個數(shù)據(jù)單元。數(shù)據(jù)按照一致性Hash理論分散存儲在不同的數(shù)據(jù)單元中。
圖1 余票集群系統(tǒng)體系架構圖
當執(zhí)行余票查詢業(yè)務時,CPU直接從內存中讀取相關數(shù)據(jù)傳送至完成運算操作, 避免了磁盤IO瓶頸。當用戶從頁面輸入查詢車次的發(fā)到站時,集群利用分布式系統(tǒng)中的資源定位技術來快速檢索數(shù)據(jù),定位到包含該車次的所有數(shù)據(jù)內存單元。集群并行調度多個節(jié)點參與運算,每個節(jié)點只進行與自己內存單元中關聯(lián)數(shù)據(jù)的運算,避免跨網(wǎng)絡的讀取大量數(shù)據(jù),最終將所有參與運算節(jié)點的運算結果數(shù)據(jù)匯總,完成余票計算。
2.3 數(shù)據(jù)拆分/讀寫分離/售取分離
互聯(lián)網(wǎng)售票系統(tǒng)上線以來,隨著業(yè)務的不斷擴展,數(shù)據(jù)量快速增長,核心數(shù)據(jù)庫的讀寫壓力越來越大,對單一數(shù)據(jù)庫進行性能調優(yōu)或對SQL的基本優(yōu)化空間提升也不能滿足系統(tǒng)的性能需求。為此,互聯(lián)網(wǎng)售票系統(tǒng)結合業(yè)務特征對數(shù)據(jù)存儲層進行調整,基于性能考慮,系統(tǒng)對核心數(shù)據(jù)庫進行水平及垂直二維切分,進行分庫分表,支持水平擴展,讀寫分離及業(yè)務上售取分離?;ヂ?lián)網(wǎng)售票系統(tǒng)劃分不同的物理服務器節(jié)點的同時劃分了更多的邏輯子庫。增加處理資源,減少對磁盤IO的競爭,提高了系統(tǒng)的處理性能,提升了系統(tǒng)的可擴展性。
基于上述的設計實現(xiàn)及應用場景,同一位出行旅客存在購買的多張車票,其電子票分布在不同數(shù)據(jù)庫節(jié)點的情況。此時存在旅客線下使用身份證取票時,如何快速定位旅客車票的難題。針對此問題,系統(tǒng)設計了基于內存的快速索引,為了將多個分布式數(shù)據(jù)庫中的數(shù)據(jù)變化更新到內存索引中,系統(tǒng)無法單程的依靠數(shù)據(jù)庫自帶的復制功能,因此自主實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)變化的監(jiān)聽,將數(shù)據(jù)變化經(jīng)過格式轉換,傳遞到索引服務器,實時更新索引信息。為了避免數(shù)據(jù)傳遞過程中數(shù)據(jù)的丟失,系統(tǒng)實現(xiàn)了重試機制及隊列機制,同時充分考慮信息間的邏輯關系,避免出現(xiàn)時序問題,造成數(shù)據(jù)混亂。數(shù)據(jù)傳輸過程中由于網(wǎng)絡等異??赡芤l(fā)堵塞問題,數(shù)據(jù)堵塞,會導致數(shù)據(jù)的實時性受到影響,針對此問題,互聯(lián)網(wǎng)售票系統(tǒng)設計了實時監(jiān)控告警機制,通過線上運行積累數(shù)據(jù),調配參數(shù)設置監(jiān)控的敏感性,當發(fā)生問題時系統(tǒng)第一時間進行自檢并進行告警,達到快速處理的目標。
互聯(lián)網(wǎng)售票系統(tǒng)上線運營以來,高峰日售票量636.8萬張,占客票系統(tǒng)交易總額的68%以上,累計銷售客票約18.1億張。日PV峰值80億次、余票查詢峰值請求100 000筆/s、購票請求峰值20 000筆/s。結合鐵路業(yè)務特點,互聯(lián)網(wǎng)售票系統(tǒng)中綜合應用了本文中探討的多種技術策略,在上述海量請求壓力下運行平穩(wěn)。相關技術的成功應用,未來可推廣至鐵路客運或鐵路行業(yè)的其他系統(tǒng)中。
[1]王明哲,張振利,徐 彥,等.鐵路互聯(lián)網(wǎng)售票系統(tǒng)的研究與實現(xiàn)[J].鐵路計算機應用,2012,21(4).
責任編輯 方 圓
Mass request processing in Railway Internet Ticketing
YANG Lipeng, WANG Fuzhang, MEI Qiaoling, ZHU Jianjun
( China Academy of Railway Sciences, Beijing 100081, China )
The Railway Internet Ticketing was one of the main channels of railway ticket booking. This paper introduced the development and characteristics of Railway Internet Ticketing System, analyzed the common technologies of dealing with mass request, further introduced the optimization and achievement of the Railway Internet Ticketing System in response to the mass request.
Railway Internet Ticketing; 12306 Website; mass request processing
U239.22∶TP39
A
1005-8451(2015)07-0025-03
2014-11-27
楊立鵬,在讀碩士研究生;王富章,研究員。