林 克,羅 喧,李 凌,李 豫
(1.中國電信股份有限公司廣州研究院 廣州510630;2.中國電信股份有限公司廣東分公司 廣州510180)
隨著移動互聯網的發展,登錄網絡線上買票線下消費的O2O(online to offline,線上到線下)型電子商務已逐漸成為新的移動互聯網應用熱點。此類移動電子票務應用向用戶提供票務相關信息查詢、提前選座訂票、遠程在線支付和便捷取票驗票等功能,同時實現運營管理的信息化、確保用戶信息及票據的安全性。其覆蓋面廣,從旅游景點門票、影戲門票、音樂演出票、體育賽票、展覽會票、博物館票等各種入場券票,到汽車票、火車票、飛機票、船票等各類電子客票,均可衍生出相應的定制化應用服務和商務模式。比如,對于汽車票的票務應用服務,用戶可通過應用的網站或手機客戶端瀏覽查詢某個車站到某地的車次信息、票價信息,根據系統提示挑選車廂中的座位形成訂單,再使用銀聯等支付方式完成網絡在線或移動支付;系統確認支付成功后,將以短信、彩信或電子訂單的形式將各種形態的電子票發送給用戶;用戶可持電子票,以相應的驗證形式在自助取票終端打印紙質車票,或直接驗票乘車。
基于移動互聯網的票務應用服務主要具有以下特征。
·服務渠道多樣化,支持手機客戶端、Web/WAP網站、語音服務和自助訂票終端等服務渠道。
·提供透明的票務信息和豐富的資訊,用戶可隨時隨需查詢信息,提前選定時間排期及座位。
·可擴展地接入銀聯、支付寶等第三方支付能力,使用戶便捷靈活地完成在線訂單支付。
·支持新型電子票(短信、彩信或系統訂單)的自助取票與現場驗票,偽識別安全性高。
·提供強大可靠的運營管理后臺,實現高效運營管理,具有管理一體化、核算嚴密等特點。
票務應用系統,或稱為票務代理系統,是基于移動互聯網的票務應用服務中的核心平臺,通過與票務公司的原生專業票務系統相連來完成相關的票務功能。該代理系統側重售票代理應用,而不包括原生專業票務系統面向機構內部的內容管理、計劃管理等功能。整個票務應用系統包括業務邏輯模塊、核心數據庫、運營管理后臺、前向應用管理模塊、票務票源接入服務、憑證生成與驗證模塊、終端管理系統、能力接入網關等部分。對外主要與專業票務系統對接,實現與票務公司的數據交換、票務訂購等服務;對內則實現了豐富的應用服務渠道接入、健全的第三方能力接入以及核心的邏輯、運營及管理功能,如圖1所示。
在整個票務應用服務體系中,首先必須由原始的業務公司將門票電子化,然后通常會以某種程序API將門票售賣功能開放給下游的代理商。對一個大型的在線票務代理商的票務應用系統而言,系統將連接多個原生票務系統的票源,將其中的票務信息同步到本地代理系統中,代理的票務應用系統與原生的票務系統之間存在復雜的交互。
關于原生專業票務系統與代理票務應用系統之間的運作流程,本文將以電影票訂購業務為例來分析。
首先,在線電影票的購票代理系統必須將原生票務系統的電影院的名稱、地址以及各個影廳信息同步到代理票務系統,然后增加必要的影院簡介、影院推薦信息。其次,原生票務系統當前的播放電影的排期、檔期等播放信息需要以較高的頻率更新,例如,每個小時同步到代理票務系統,然后增加對電影的海報、影評等附加信息。在用戶登錄系統的時候,瀏覽正在熱映的相關電影海報、影評等,然后點擊進入購票,此時電影票的代理系統需要去原生系統獲取最新的可售的座位信息,然后在本系統展示一個座位圖的操作界面供用戶進行選座并購買電影票。一旦用戶選擇訂購電影票,代理系統將去原生系統將座位鎖定,鎖定座位后,用戶在代理業務系統中完成電影票票款支付的過程。完成支付后和原生系統進行對單操作,完成對單后雙方均確認了此次用戶的購買行為,進行正式的出票過程。

圖1 票務應用服務總體架構
通常,在代理方主動進行的營銷活動中,用戶的訂票行為會被異常地集中在極短的時間內。例如,某些熱門場次的首映式門票搶訂、營銷活動中的“1元訂票”等。當用戶的訂票行為被異常地集中時,代理系統和原生系統最關鍵和脆弱的一步在于獲取原生系統的可售座位信息。其原因在于,影院信息、影廳信息以及正在上映的影片排期及場次信息均提前同步到代理售票系統中,然而,電影排期場次的可售的座位信息隨時可能被其他代理商的代理系統或者原生系統的地面訂票行為所改變,需要實時地從原生系統獲取。
因此,在通常的實現中,代理系統搶票的時候集中地獲取可售座位圖的訪問量將直接傳遞給原生系統,由于原生系統與代理系統由不同的公司所開發,兩個系統建設目標和性能指標不一定能夠匹配,例如,代理系統所能承受的最大并發連接數可能會遠大于原生系統,代理系統每秒能處理的請求數很可能將受限于原生系統。一旦代理售票應用系統進行大規模的營銷活動,會承受越來越大的壓力,每個請求都將對原生系統帶來一個新的并發訪問連接,將直接導致原生系統的CPU資源、網絡資源、磁盤I/O資源、數據庫連接資源等快速耗盡,極短時間內實時可售座位圖請求造成的高并發訪問的壓力可能直接把原生票源系統壓垮,導致原生票源系統崩潰,如圖2所示。

圖2 高并發狀態下系統交互示意(無過載保護)
對此,本文提出一種高效可行的解決方案,實現高并發訂票壓力下代理票務應用系統對外部原生票務系統的過載壓力保護;設計出一種新型的票務應用系統,以減少高并發壓力下對外部票務系統的訪問流量沖擊,降低外部票務系統的訪問壓力。
本文提出的系統高并發處理技術方案,實現了在高并發訂票壓力下對原生票務系統的過載壓力保護。通過監控并發訪問壓力,當超過閾值時,自動啟動可售座位數據的緩存機制。在電影排期的可售座位緩存數據超時失效的時候,集群里的多臺服務器、多個線程競爭獲取訪問令牌,獲取令牌成功的唯一線程作為代表去外部票務系統獲取該排期最新的可售座位。本方案減少了高并發壓力下對外部票務系統的訪問流量沖擊,降低了外部票務系統的訪問壓力。高并發票務應用系統實現技術方案中包含幾個模塊:票務應用系統、過載保護模塊、在線座位圖緩存、訪問令牌池。其連接情況如圖3所示。

圖3 高并發票務應用系統技術方案示意
票務應用系統為傳統的售票代理邏輯;過載保護模塊為代理系統與原生票務系統中間的代理模塊,監控售票代理系統與原生票務系統在過去60 s內的連接數,當超過預先設置閾值時,啟動過載保護的模式;在線座位圖緩存模塊維護一份可供顯示的座位圖數據,該座位圖信息是允許時間范圍內的相對較新的座位圖數據。座位圖訪問令牌池提供去原生票務系統獲取座位圖信息所需的訪問令牌,每個座位圖有一個訪問令牌,在過載保護模式下,只有獲得令牌的工作線程才能去訪問原生票務系統獲取座位圖。
針對上述技術方案,本文制定了一種在線選座過程中的高并發處理機制,對代理的票務應用系統進行策略化改造,具體如圖4所示。
圖4中,該實施機制可以包括以下步驟。
(S402)監控各代理票務系統發往原生票務系統的連接請求。
(S404)判斷設定時間內發往同一原生票務系統的連接請求次數是否超過設定閾值,如果超過設定閾值,則轉步驟(S406),否則,轉步驟(S408);具體地,以同一原生票務系統接收到的連接請求為準,計算該請求倒推設定時間內的發往同一原生票務系統的連接次數是否超過設定閾值。

圖4 在線選座過程的高并發處理操作機制示意
(S406)攔截發往原生票務系統的連接請求,并啟動過載保護模式;具體地,如果超過設定閾值,則認為現在對同一原生票務系統的訪問過于密集,可能會造成原生票務系統的癱瘓,因此需要啟動過載保護模式,即不能直接將連接請求透傳至原生票務系統,而是根據下述情形分別進行處理。
(S408)將連接請求透傳至原生票務系統。
(S410)響應于對連接請求的攔截,查詢在線座位圖緩存內是否存在所請求的座位圖,如果存在,則轉步驟(S412),否則,轉步驟(S416)。
(S412)根據所請求的座位圖的存活時間判斷所請求的座位圖是否可用,如果可用,則轉步驟(S414),否則,轉步驟(S416)。具體地,該存活時間是個大于零的數,具體數值可以由用戶設置。如果查詢到的存活時間大于零,則表明緩存內所請求的座位圖可用,否則表明緩存內所請求的座位圖不可用。
(S414)將在線座位圖緩存內存儲的所請求的座位圖反饋給發起該連接請求的用戶。
(S416)申請獲取訪問原生票務系統的令牌。
(S418)響應于對令牌的獲取,從原生票務系統獲取所請求的座位圖,以基于所獲取的座位圖進行座位的選取;具體地,當多個連接請求均申請訪問同一個原生票務系統內針對同一座位圖的令牌時,只有一個連接能夠獲取到訪問令牌,例如,可以根據各個連接請求訪問時間的先后順序確定能夠獲取訪問令牌的連接請求。
在該實施案例中,在設定時間內如果訪問同一個原生票務系統的連接請求數過高(如超過設定閾值),則由過載保護裝置對這些連接請求進行攔截,根據在線座位圖緩存內存儲的所請求的座位圖的存活時間或者直接獲取該緩存的座位圖,或者獲取/等待令牌以自原生票務系統獲取相應的座位圖。這樣既保證了用戶能夠及時獲取最新的座位圖,同時也降低了對原生票務系統的訪問壓力。
在步驟(S418)之后,響應于對令牌的獲取,在從原生票務系統獲取所請求的座位圖后,將獲取的座位圖更新到在線座位圖緩存中,設置存活時間,并啟動倒計時。這樣,如果在過載保護模式下且相應座位圖的存活時間大于0,則其他請求同一座位圖的連接請求可以直接從在線座位圖緩存中獲取相應的座位圖。
進一步地,在步驟(S416)之后,如果連接請求未獲取到訪問原生票務系統的令牌,則未獲取到令牌的連接請求進入休眠狀態,等待在線座位圖緩存內所請求的座位圖的更新或等待獲取令牌。此時,未獲取到訪問原生票務系統令牌的連接可以同時檢測是否獲取令牌以及在線座位圖緩存內所請求的座位圖是否更新,如果先獲取令牌則直接到原生票務系統獲取實時的座位圖,如果先檢測到緩存的更新,則直接到在線座位圖緩存中讀取所請求的座位圖,這樣可以顯著提高在線預訂座位的實時性。
在步驟(S408)中,連接請求被透傳至原生票務系統,在選定座位后,將所請求的座位圖更新至在線座位圖緩存中。這樣,如果后續連接請求被過載保護,在存活時間有效的前提下,這些連接請求可以直接到在線座位圖緩存內讀取所請求的座位圖,既提高了預訂座位的實時性,又避免了對原生票務系統造成較大的沖擊。
在步驟(S406)中,過載保護模式啟動,設置在線座位圖緩存內被過載保護的原生票務系統的各座位圖的存活時間,并啟動倒計時。由于在連接請求不被攔截時,每次訪問完原生票務系統都將所請求的座位圖更新到在線座位圖緩存內,因此,在線座位圖緩存內存儲被過載保護的原生票務系統的各個座位圖均為最新狀態的座位圖,可以直接啟動對相應座位圖的存活時間的倒計時。
在步驟(S416)之后,對令牌進行獲取,同時生成該令牌的超時時間,以便在該令牌超時時釋放該令牌。
該機制實施的核心點,在于過載保護模塊的正常運行以及與周邊相關模塊或系統的協作。接下來,仍以電影票訂購業務為例,通過具體實例對系統高并發處理的技術方案進行進一步說明。
正常壓力狀態下售票代理票務系統連往原生票務系統的連接在閾值的范圍內,過載保護模塊處在請求透傳的狀態,將從業務代理票務系統的請求直接發往目標的外部原生票源系統,此時相當于座位圖緩存數據的存活時間為0。
當并發用戶集中發起訂票致使售票代理票務系統連往原生票務系統的連接超出了閾值范圍,過載保護模塊啟動工作,以電影票售票代理系統為例,其流程如圖5所示。
步驟1用戶發起的查看座位圖的請求發送給售票代理票務系統,在并發訪問過程中,每個用戶對應一個工作線程,每個工作線程均企圖發起對原生票務系統的獲取座位圖的連接請求,這些連接請求被過載保護模塊攔截。

圖5 過載保護模塊的運行流程
步驟2過載保護模塊啟動查詢座位圖緩存,座位圖緩存池中如果存在該電影某影廳某個播放場次(排期)座位圖,并在緩存數據的存活時間T內,直接返回緩存中的座位圖。否則,轉到步驟3。在此,在存活時間內的座位圖可能不是最新的排期座位圖,因此存在一種可能,用戶看到的可選座位實際上已經賣出。然而,這是一種更優的做法。假設排期緩存存活時間為T,緩存生效減少了原生票務系統的訪問壓力,使之保持正常工作狀態。原生票務系統繁忙擁塞,即便是每次調用均去原生票務系統,并不可能得到馬上的反饋,在原生票務系統擁塞訪問的時間T’很可能會大于T;代理系統仍然只能得到T’時間之前的座位圖。更差的一種情況是,由于訪問請求太多,原生的票務系統直接崩潰。
步驟3去排期座位圖訪問令牌池申請訪問令牌,由于該座位圖可能多個用戶同時申請訪問,每個用戶將產生一個工作線程,同一個座位圖的令牌為多臺機器多個工作線程(每個連接一個線程)同時競爭,同一時間僅僅有一個工作線程能夠獲得座位圖的訪問令牌。成功生成該座位圖的令牌的同時,還生成排期座位圖訪問令牌的超時時間,當獲取令牌的工作線程不能在超時時間內完成更新排期座位圖的更新操作時,該令牌將被釋放。
步驟4獲取令牌的唯一線程去原生票務系統獲取該排期的最新可售的座位信息,每個排期僅在座位圖失效時有一個線程能夠獲得令牌作為代表訪問原生票務系統。此時外部票務系統查詢座位圖的最大的請求連接數將是票務系統提供的所有排期總數:例如,原生票務系統當前一共提供100個電影影廳播放場次(排期),在排期座位圖緩存生效的時候,最多一個排期有一個連接去原生票務系統更新座位圖數據,于是原生票務系統最多可能有100個請求連接過來更新排期座位圖數據。
步驟5獲取令牌的唯一線程將座位圖信息更新到代理票務系統緩存之后釋放(刪除)令牌。
步驟6競爭不到令牌的線程進入休眠狀態等待,直到數據被更新或者令牌被釋放。
針對電影票訂購類業務,本文提出的新型系統經過上述優化處理,在可售座位查詢請求中與外部原生票務系統間訪問壓力的關系如圖6、圖7所示。

圖6 座位圖超時時間與售票代理系統用戶并發壓力關系

圖7 原生票務系統并發用戶壓力與售票代理系統的并發用戶壓力關系
并發壓力在閾值以內,座位圖超時時間為0,此時排期座位圖的查詢請求直接轉發給外部票務系統。當并發用戶壓力達到某個閾值時,可售座位信息的超時時間自動置位為T,過載保護的機制開始生效。
每個排期僅在座位圖失效時有一個線程作為代表訪問外部票務系統。此時外部票務系統查詢座位圖的最大的請求連接數將是票務系統提供的排期總數。
在加載過載保護模塊后,原生票務系統并發用戶壓力與售票代理系統的并發用戶壓力關系如圖7所示,隨著用戶并發壓力的增大,原生票務系統的訪問壓力也隨之增大,到了過載保護生效的時候,訪問壓力漸漸趨近于原生票務系統提供的排期總數。
在實際的項目實施中,本文對新型系統的性能進行了全面的壓力測試。從圖8可以看出,經過高并發處理優化后的新型票務應用系統,在0.1 s、1 s和2.5 s這幾檔不同的響應時間約束中,瓶頸接口的并發性能上均得到了巨大的提升。

圖8 系統性能測試結果對比
本文從票務應用服務的系統架構切入,以電影票訂購業務為實例,全面剖析了票務應用系統及服務在業務實施過程中的性能瓶頸;并有針對性地提出了高效可行的解決方案,設計出一種支持高并發處理的新型票務應用系統,實現在高并發訂票壓力下對外部的原生票務系統的過載壓力保護,提高了系統本身的穩定性、頑健性。目前該系統的核心技術已申請專利保護,并在電影票訂購等移動互聯網業務中成功實施,有效支撐了業務多次大規模的全國性營銷活動,為客戶帶來便捷體驗,為企業節約了服務器等成本投入,實現經濟效益與社會效益的雙贏。
1 李軍鋒,何明昕.高并發Web航空票務秒殺系統的設計與實現.計算機工程與設計,2013,34(3):778~782 Li J F,He M X.Design and implementation of Web-based air ticket seckill system with high-concurrency.Computer Engineering and Design,2013,34(3):778~782
2 彭海平.電子商務平臺的性能優化和高可靠性研究與實現(碩士學位論文).上海:上海交通大學,2007.Peng H P.Research and design of performance tunning and high availability in E-commerce web platform(master dissertation).Shanghai:Shanghai Jiao Tong University,2007
3 王紅愛,朱建生,劉文韜等.鐵路客票系統中緩存機制的應用模型研究.鐵路計算機應用,2013(2):30~33 Wang H A,Zhu J S,Liu W T,et al.Research on application model of cache mechanism in railway ticketing reservation system.Railway Computer Application,2013(2):30~33
4 李軍.高并發Web系統的設計與優化(碩士學位論文).北京:北京交通大學,2009 Li J.Design and optimization of high-concurrency web system(master dissertation).Beijing:Beijing Jiaotong University,2009
5 崔強.電子影票系統總體設計構想.現代電影技術,2012(11):43~47 Cui Q.Overall design conception of electronic ticket system.Advanced Motion Picture Technology,2012(11):43~47
6 Shih S F,Huang A J.Electronic ticketing system and application method thereof.U.S.Patent Application,12/766386,2010