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