朱建生,王明哲,楊立鵬,閻志遠,張志強
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
12306互聯網售票系統的架構優化及演進
朱建生,王明哲,楊立鵬,閻志遠,張志強
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
12306互聯網售票系統是中國鐵路最重要的售票渠道。本文介紹系統的體系架構及其在上線初期遇到的性能問題,以及為解決相關問題,改善用戶體驗進行的幾次重大架構優化的思路和實踐,同時簡要介紹12306在架構優化方面下一步的工作設想。
12306;互聯網;售票;架構
12306 互聯網售票系統是基于中國鐵路客票發售和預訂系統(簡稱:客票系統)這一核心系統構建的。2011年6月12日,系統投入試運行,發售京津城際列車車票;2011年9月30日,發售全路動車組車票;2011年底,發售全路列車車票,互聯網正式成為鐵路新的售票渠道。
2012年春運期間,由于訪問量超出設計預期,12306網站在高峰期出現了頁面打開緩慢、查詢和下單報錯、后臺系統過載等一系列問題,用戶體驗不佳。春運結束后,研發團隊基于新一代客票系統多個科研項目,對系統架構、應用功能以及業務規則進行了持續優化和改進,逐步解決了售票高峰期海量并發訪問請求及處理等一系列關鍵技術問題,大幅提高了系統的處理能力、穩定性以及用戶體驗。本文將重點介紹12306網站自建設之初至今針對系統性能優化的研究與實踐工作,以及系統架構的演進過程。
互聯網售票系統作為客票系統一個新的售票渠道,建設之初,在借鑒和參考客票核心系統架構的基礎上,根據互聯網應用的特點,為系統設計了緩存服務、用戶管理、車票查詢、訂單及電子客票處理等多個相對獨立的業務分區,以及三級網絡安全域,分別是外網、內網和客票網,系統的體系架構如圖1所示。
具體實現時,用戶管理、車票查詢及訂單/電子客票處理均采用了傳統的關系型數據庫,其中車票查詢業務部署了多套負載均衡工作模式的數據庫,訂單/電子客票處理業務采用了雙機熱備模式的數據庫,上述數據庫均運行在小型機平臺上。外網的車次、余票等緩存服務采用了基于內存計算的NoSQL數據庫,運行在X86平臺上。上線前的壓力測試,一筆流程包含用戶登錄、車票查詢、下單及支付等業務操作,系統極限交易能力為34張/s,按高峰期10 h計算,售票量可達到120萬張/天的設計能力。

圖1 12306建設初期體系架構示意圖
2012年春運期間,持續的高并發訪問使系統在多個方面出現性能瓶頸,如圖2所示。

圖2 12306架構在高峰期出現的瓶頸示意圖
出現的主要問題包括:
(1)高并發的查詢請求造成車票查詢業務分區負載過高,查詢響應時間過長,用戶進而反復重試,造成AS(Application Server)的查詢線程池擁堵。
(2)放票時高并發的下單請求導致訂單/電子客票數據庫負載過高,引起交易響應時間過長,造成AS以及inetis的交易線程池擁堵,下單失敗后用戶反復重試,從而加劇擁堵。
(3)AS線程池的擁堵進一步造成Web對外服務線程的擁堵,影響頁面打開及業務邏輯處理,造成頁面打開速度緩慢和超時錯誤。
(4)內外網安全平臺上在活動及新建連接過多時性能下降,也導致Web訪問AS出錯。
(5)訂單/電子客票數據庫負載過高時,對線下車站的換票業務產生影響。
(6)為減輕網站壓力,降低查詢和下單的請求量,網站被迫降級運行,限制在線的登錄用戶數量,造成部分用戶不能登錄網站。
春運過后,互聯網上也出現了關于12306架構的討論和建議熱潮,通過認真聽取各方意見,梳理上述主要問題的原因和關聯關系,結合系統監控數據,總結出主要是由于車票查詢以及訂單/電子客票業務分區處理能力不足,造成高峰期高并發訪問請求下響應時間過長,加之各個業務分區未能很好進行隔離,導致系統由內至外產生“雪崩”效應,造成網站擁堵,影響用戶的購票體驗。
針對上述問題及原因,我們將架構優化及重構思路重點放在提升車票查詢和交易處理的響應速度,以降低查詢和交易的延遲。同時盡可能分離核心業務,減少業務環節間的強關聯,具體內容包括:
(1)使用內存計算NoSQL數據庫取代傳統數據庫,大幅提升車票并發查詢能力,車票查詢的TPS/ QPS(Transaction/Query per Second)由不足1 000次/s提升至超過20 000次/s,RT(Response Time)由原來的1 s縮減至10 ms,使用戶可以快速獲取到車次及余票情況。
(2)構建交易處理排隊系統,系統先通過隊列接收用戶的下單請求,再根據后端處理能力異步地處理隊列中的下單請求。隊列的下單請求接收能力超過10萬筆/秒,用戶可以在售票高峰期迅速完成下單操作,等候系統依次處理,等候過程中可以查詢排隊狀態(等候處理的時間)。排隊系統中也采用了內存計算NoSQL數據庫。
(3)對訂單/電子客票進行分節點分庫分表改造,將原有的1個節點1個庫1張表物理拆分為3個節點30個庫30張表,線上相關操作按用戶名HASH的方式被分散到各個節點和庫表中,有效提升了核心交易的處理能力并具備繼續橫向擴充能力,使用戶在隊列中的訂票請求可以得到更快的響應和處理。
(4)對訂票、取票操作進行了業務分離,由不同的業務節點(售票節點和取票節點)承載網上售票和線下取票業務;對訂單/電子客票生成和查詢進行了讀寫分離,使用內存計算NoSQL數據庫集中存儲訂單/電子客票,提供以Key-Value為主的查詢服務,訂單查詢的TPS由200次/s左右提升至5 000次/s以上,大幅提升了訂單/電子客票的查詢效率。
優化和重構后的架構如圖3所示。

圖3 第1次優化后的12306體系架構
在新的架構中,通過高效的車票查詢集群和緩存服務,用戶以較低延遲即可獲取到所需車次的余票情況。隨后的下單操作(訂票請求)直接由排隊系統壓入隊列處理,不同的車次/日期進入不同的隊列,訂票請求不再直接面對內網的AS和客票網的核心交易系統。具體實現時,考慮到車票查詢結果有緩存延時,在訂票請求進入隊列前,還將實時查詢車次余票,確有余票且當前排隊人數不超過余票數量時才最終允許訂票請求進入隊列。排隊系統收到請求后,采用動態流量控制策略,即根據位于客票網各個鐵路局客票中心的席位處理以及訂單/電子客票集群處理的響應時間,向AS提交用戶的訂票請求,處理響應時間放慢,則提交速度放慢,反之則提高訂票請求的提交速度。讀寫分離,避免了高并發、低延時要求的查詢操作影響交易處理;售票和取票分離,使網上售票與線下取票互不干擾。優化架構后的系統在上線前壓力的測試中,極限交易能力為300張/s,可以滿足日售票量500萬的業務需求。
2013年春運,優化架構后的12306網站最高日售票量達到364萬,占全路售票量的40%,售票量為2012年春運最高峰(119萬)的3倍多,各鐵路局客票系統以及12306網站性能穩定,運行平穩,充分證明了架構調整的有效性。
2013年十一黃金周,12306互聯網售票量達到了460萬,再次接近系統處理的上限,且高峰期外網入口帶寬緊張,已不能滿足互聯網售票量進一步提升的需要。此外,作為鐵路售票的主要渠道,互聯網售票系統單中心運行模式已不能滿足業務安全性和可靠性的需求。為此,自2013年底起啟動了12306網站的第2輪架構優化,優化目標旨在提高系統的安全可靠性,以及在高峰期具備處理容量的彈性擴充能力,具體內容包括:
(1)將用戶登錄及常用聯系人查詢等業務遷移至內存數據庫中,提高了相關業務的處理性能和可靠性。
(2)構建中國鐵道科學研究院第2生產中心,與既有的中國鐵路總公司第1生產中心間實現雙活,提升網站的安全性和可靠性,并將訂單/電子客票集群的處理能力提高1倍。
(3)在公有云上部署車票查詢服務,通過策略配置可隨時將車票查詢流量分流至公用云,以緩解在售票高峰期網站的處理資源和帶寬壓力。
優化和調整后的系統架構如圖4所示。

圖4 再次優化后的12306體系架構
此次架構優化過程中,完成的主要工作包括:
(1)構建了用戶和常用聯系人內存查詢集群,由用戶數據庫向集群實時同步數據,并實現了讀寫分離,用戶登錄和常用聯系人查詢的TPS提升了50倍以上,消除了業務瓶頸。
(2)構建了第2生產中心,采用虛擬化技術與原有的第1生產中心組成了雙活架構。用戶流量通過CDN在兩中心間進行對等分配(50:50),兩個中心擁有獨立的Web、AS、緩存服務集群、車票查詢集群、用戶及常用聯系人集群以及交易中間件,排隊系統以主備模式運行,用戶數據雙向同步。正常情況下雙中心雙活模式運行,其中任一個中心發生故障時可由另外一個中心承載全部售票業務。
(3)在互聯網公用云上部署了車票查詢集群及查詢服務,由CDN完成車票查詢流量在第1生產中心、第2生產中心以及公有云間的流量分配,流量分配可通過動態調整策略在線完成。
在雙活架構的建設過程中,我們將訂單/電子客票集群完全遷移至X86虛擬化平臺,并擴充至10組節點,100個庫,100張表。上線前的壓力測試驗證了系統可以滿足1 000萬張/天的設計售票能力,在2015年春運高峰時段,實際售票速度超過了1 000張/s(約合360萬張/s)。第1生產中心、第2生產中心間訂單/電子客票集群具備熱切換能力,顯著提高了系統的故障隔離能力和系統的安全及可靠性。公有云在2015年春運期間最高分流了75%的查詢請求,網站對外車票查詢服務能力增加了3倍?;贑DN緩存服務(一級緩存)、雙中心及公有云緩存服務(二級緩存)、雙中心及公用云車票查詢集群(實時計算),12306網站在2015年春運高峰日處理了超過180億次車票查詢服務,平均TPS超過30萬次/s。
回顧12306互聯網售票系統的發展,高峰售票量由2012年春運的119萬張/天,增至2013年春運的364萬張/天,系統架構的優化與調整起到了至關重要的作用。2014和2015年春運售票量再次超過500萬和600萬,最高達到636萬/天,驗證了二次優化后架構的合理性和有效性。
12306 互聯網售票系統在優化架構的同時,還在核心業務中用低成本的X86平臺全面替代了原有的小型機平臺,其架構優化實踐對同類大規模并發訪問的網上交易系統具有重要的借鑒意義。下一步我們將繼續優化訂單/電子客票雙活架構、系統故障感應、隔離以及智能切換技術,同時深入開展網站用戶行為分析和安全管控機制建設,持續提高系統的安全性、可靠性及穩定性,改善用戶購票體驗。
[1]陳 皓.由12306.cn談談網站性能技術[EB/OL]. http:// coolshell.cn/articles/6470.html.
[2]幽云十八.透過12306五大焦點看高性能高并發系統[EB/ OL]. http://storage.it168.com/a2012/0217/1313/000001313424. shtml.
[3]王明哲,張振利,徐 彥,等. 鐵路互聯網售票系統的研究與實現[J]. 鐵路計算機應用,2012,21(4).
[4]趙 光. 鐵路互聯網售票系統網站建設的優化探討[J]. 上海鐵道科技,2012(3).
責任編輯 王 浩
Architecture optimization and evolution of 12306 Internet Ticketing and Reservation System
ZHU Jiansheng, WANG Mingzhe, YANG Lipeng, YAN Zhiyuan, ZHANG Zhiqiang
( Institute of Computing Technologies, China Academy of Railway Sciences, Beijing 100081, China )
12306 Internet Ticketing and Reservation System was the most important ticketing channel for Chinese railway. This paper introduced the system architecture and its performance problems in the beginning, as well as several major architecture optimization ideas and practices to solve the relevant problems, improve the user experience, and brief l y introduced the idea of the architecture optimization of the next step.
12306 Website; Internet; ticketing; architecture
U293.22∶TP39
A
1005-8451(2015)11-0001-05
2015-08-02
中國鐵路總公司科技研究開發計劃重大課題(2013X009-A-1),(2013X009-A-2)。
朱建生,研究員;王明哲,副研究員。