技術(shù)揭秘12306改造(二):探討12306兩地三中心混合云架構(gòu)
注:本文首發(fā)于CSDN,轉(zhuǎn)載請標明出處。
【編者按】在年前的「技術(shù)揭秘12306改造」專題中,一位對12306改造非常關(guān)注的技術(shù)架構(gòu)師,他從技術(shù)的角度,用科學(xué)論證的方式說明12306是如何實現(xiàn)高流量高并發(fā)的關(guān)鍵技術(shù)。今天,他繼續(xù)為大家?guī)淼诙拢航馕?2306兩地三中心混合云架構(gòu)。
以下為正文》》
前言
2015年春節(jié)最大的特色就是“搖一搖”,微信紅包在春晚搖一搖互動總量超過110億次,峰值達8.1億次/分鐘,有185個國家傳遞微信祝福。支付寶錢包在除夕晚上8點達峰值,首頁被點擊的次數(shù)為8.832億次/分鐘。表面上來看“搖一搖”是在送紅包,但從深層次的互聯(lián)網(wǎng)思維來看,搖一搖的目的是要創(chuàng)造和凸顯“移動支付”在互聯(lián)網(wǎng)金融的價值鏈,甚至一帶一路,將“移動支付”模式的業(yè)務(wù),帶出國門推向全球,此舉對金融行業(yè)未來的生態(tài)影響意義重大。
搖一搖隱含的商業(yè)模式不是此篇文章討論重點,在此要強調(diào)的是在云計算和大數(shù)據(jù)時代,任何一個商業(yè)模式的創(chuàng)新都需要有最先進的技術(shù)配合和支撐。從技術(shù)角度來看,這些看似業(yè)務(wù)邏輯簡單的“搖一搖”在面對高流量和高并發(fā)情況下,承載天量的訪問量對系統(tǒng)框架設(shè)計師來說是巨大的挑戰(zhàn)。當(dāng)面臨“有計劃、難預(yù)測、暫時性”的巨大訪問量,該如何解決此問題?是花巨資建設(shè)系統(tǒng)呢? 還是將需要“短暫”巨大資源的業(yè)務(wù)托管在云計算數(shù)據(jù)中心,讓它們提供快速靈活可調(diào)度的資源呢?
本文作者從互聯(lián)網(wǎng)收集大量有關(guān)12306的信息,首先描述12306系統(tǒng)與大型電商交易系統(tǒng)的主要差異和說明此差異為何需要巨大的計算資源來支撐; 再進一步探討12306混合云設(shè)計的考量 - 安全性和系統(tǒng)資源擴展性,并說明為何只將“余票查詢業(yè)務(wù)”放在阿里云提供服務(wù)。最后以論證的方式“推測”12306兩地三中心的混合云架構(gòu)設(shè)計(有關(guān)12306混合云的架構(gòu)和解析是作者個人的推測,有誤解地方請求交流和指正)
在此篇文章,不探討火車運能不足,搶不到車票返鄉(xiāng)引起民怨問題,因為鐵路的基礎(chǔ)建設(shè)需要時間解決;以Pivotal Gemfire為例, 是因為2015年12306在兩地三中心部署數(shù)百個Gemfire節(jié)點,這些應(yīng)用節(jié)點(“異于虛機節(jié)點”)可按需以熱部署方式來擴展,體現(xiàn)“云”的伸縮特性和流動性。
一、12306與電商交易系統(tǒng)
很多人喜歡將12306與淘寶網(wǎng)做比較, 認為12306互聯(lián)網(wǎng)售票網(wǎng)站從屬性來說是電子商務(wù)B2C的一支;用戶必須登錄,瀏覽,選擇商品,下訂單, 訂單確認,支付和物流。如果只看整個交易流程,它們確實是一樣的。 但從深層次的細節(jié)探討,12306背后所隱藏的業(yè)務(wù)邏輯是非常復(fù)雜,遠遠超過一般人的想象。
12306網(wǎng)站與電商交易系統(tǒng)業(yè)務(wù)邏輯的差異
如何解決大型網(wǎng)站所面對的高負載流量和高并發(fā)訪問,一直以來都是全世界公認的技術(shù)難題。對于任何一個交易系統(tǒng)來說不外乎做兩件事,一是提供查詢,二是數(shù)據(jù)計算;任何查詢業(yè)務(wù)都有響應(yīng)時間的要求,從用戶體驗最好不要超過5秒鐘;而數(shù)據(jù)計算(實時計算或非實時批量計算)與實際業(yè)務(wù)邏輯有密切的關(guān)系。
對于電子商務(wù)網(wǎng)站的交易系統(tǒng),例如淘寶網(wǎng),當(dāng)?shù)昙页鍪垡患唐?,庫存減一,客戶退貨,庫存加一,當(dāng)庫存為零,商品下架,有問題線下討論。此類交易系統(tǒng)提供簡單快速的計算。因為不同品牌商品的銷售彼此之間沒有關(guān)聯(lián)性,不會因為某件品牌商品的出售關(guān)聯(lián)到其他品牌商品的庫存量,它們的商品庫存是屬于“靜態(tài)庫存”;所以電商交易系統(tǒng)的主要設(shè)計重點是提供快速響應(yīng)時間,高可用性(容災(zāi)和備份)和系統(tǒng)擴展性,避免在高峰交易期間,因為響應(yīng)時間慢或是系統(tǒng)當(dāng)機而失去龐大的商機。
12306互聯(lián)網(wǎng)售票系統(tǒng)是業(yè)務(wù)邏輯很復(fù)雜的系統(tǒng),如果將每張可出售的火車票當(dāng)成一件商品來看,每張票的銷售都會關(guān)聯(lián)到整條路線每個站點可銷售的余票量,有些站點的余票量會產(chǎn)生變化, 有些站點余票量不會有變化。由另外一個角度來看,當(dāng)銷售一張票, 改簽,或退票時,整條路線每個站點的余票量都需要重新計算,也就是說每個站點的余票庫存是個“動態(tài)變化庫存”的概念。站點與站點之間的余票庫存有巨大的關(guān)聯(lián)性,此“動態(tài)庫存”概念的業(yè)務(wù)邏輯是12306與電商網(wǎng)站最大的差異。12306的設(shè)計重點不但要具有大型電商網(wǎng)站所具備的特性外 (要提供快速響應(yīng)時間,高可用性(容災(zāi)和備份)和系統(tǒng)的擴展性),還需要有強大的CPU計算資源來支撐。
12306 系統(tǒng)主要瓶頸 - 余票計算與配票規(guī)則
由上面所述,每張火車票的銷售狀態(tài)變化(買票,退票,改簽),都會影響到整條路線火車站點可銷售的余票量;例如,某條火車路線有100個車次,每個車次可承載1000人,有100個一等座, 900個2等座,另外還有50個火車??空荆@有多少個排列組合? 從理論上來說,余票計算是在解答數(shù)學(xué)模型的難題。
在整個客票系統(tǒng)里,有數(shù)十條行車路線,有3000多個車次(G,D,K,Z,C,..),5000多個火車站點,有不同的席次(硬座,硬臥, 軟座, 軟臥,無座),座位等級(商務(wù), 一等, 二等),和車票等級(一般,軍人, 學(xué)生,殘障,小孩)等因素,將這些參數(shù)放在數(shù)學(xué)模型上,至少有數(shù)千億條的排列組合。而目前的客車運量有限,每天不超過1000萬名旅客。 如何將1000萬張車票分配到數(shù)千億條的排列組合里面呢?并且還要考慮公正,公平的合理分配。
如果將整條路線的所有車票都放在起始站出售的話,乘車距離最遠的先購票,創(chuàng)造的利潤最大,但是下游站點就買不到票,失去公正和公平的分配原則。所以,每個站點的余票計算并不是簡單的兩站之間算好的票數(shù),做加加減減的計算。
鐵路運輸為民眾提供便捷的出行, 如何將有限資源公正公平的合理分配,讓大眾滿意是需要靠智慧解決的。 參考國內(nèi)外的售票原則,運輸部門一定要制定一套復(fù)雜的分配規(guī)則,這些規(guī)則是與車次,路線,加班車,席次,座位等級,車票等級,乘車區(qū)間,x天預(yù)售期和搭乘時間等都有密切關(guān)系。 每一個特定的余票查詢,都會觸發(fā)余票計算,每班車次的余票計算都有上萬條規(guī)則需要匹配,所有經(jīng)過“乘車區(qū)間”的車次都需要做余票計算;全國有3000多個車次,5000多個站點,這些分配規(guī)則總數(shù)可能達千萬條級別。例如,以滬寧線為例,在春運尖峰期間,經(jīng)過“上海到南京”區(qū)間的車次達300多班次,每次查詢需要計算300多班車次的余票量。
這意味著余票查詢/計算需要使用大量的CPU計算資源,同時必須快速反應(yīng)余票查詢的結(jié)果給用戶。在春運售票高峰期間,每分鐘都有數(shù)萬張車票的銷售,假如余票查詢的響應(yīng)時間緩慢,這些信息就失去價值,會發(fā)生看得到票,但實際上買不到票的情況發(fā)生。
二、12306 混合云考慮因素和規(guī)劃
一般的商業(yè)活動都有季節(jié)性的旺季和淡季之分,在旺季時煩惱是否有足夠的庫存,以免失在商機,在淡季時就要想辦法促銷,降低庫存。 使成本最小化,利潤最大化,是市場經(jīng)濟的商業(yè)法則。 12306互聯(lián)網(wǎng)售票系統(tǒng),也面臨節(jié)假日和非節(jié)假日高高低低的需求,12306在春運售票高峰期間的訪問流量(PV值)和平時訪問流量高達上千倍的差異;如果按原來的系統(tǒng)架構(gòu),要解決春運時高流量高并發(fā)的問題,可能需要擴充“數(shù)十倍”或數(shù)百部的Unix服務(wù)器才能滿足需求。 如果12306自建系統(tǒng),但在春運以后,又該如何處理服務(wù)器過剩的問題,才不會造成資源浪費呢?
根據(jù)百度百科對混合云的定義,“混合云是融合公有云和私有云,是近年來云計算的主要模式和發(fā)展方向。企業(yè)用戶出于安全考慮,更愿意將數(shù)據(jù)存放在私有云中,但是同時又希望可以獲得公有云的計算資源,在這種情況下混合云被越來越多的采用,它將公有云和私有云進行混合和匹配,以獲得最佳的效果,這種個性化的解決方案,達到既省錢又安全的目的”。
混合云托管考慮因素
由上面的定義,混合云服務(wù)模式應(yīng)該是12306最佳的選項,可以將“有計劃,難預(yù)測,暫時性”需要巨大資源的業(yè)務(wù)放在公有云提供服務(wù)。如果12306采用混合云的服務(wù)模式,有哪些重要因素需要考慮?
-
托管方式:整個業(yè)務(wù)托管還是部分業(yè)務(wù)托管?
-
安全性的考量:敏感性資料該如何存放和保護呢?如何規(guī)避風(fēng)險?
-
業(yè)務(wù)子系統(tǒng)的獨立性:如果是部分業(yè)務(wù)托管,被指定托管業(yè)務(wù)的子系統(tǒng)是否能獨立剝離原先系統(tǒng)的業(yè)務(wù)流程?
-
協(xié)同合作:在公有云的業(yè)務(wù)子系統(tǒng)的數(shù)據(jù)又如何回流與私有云的原來系統(tǒng)在業(yè)務(wù)上配合,協(xié)同合作呢?
-
數(shù)據(jù)源的傳輸和復(fù)制/同步:如何復(fù)制/同步私有云和公有云的數(shù)據(jù)?
-
資源的彈性擴展:遷移到公有云的業(yè)務(wù)子系統(tǒng)是否能實現(xiàn)按需彈性擴展,利用云計算數(shù)據(jù)中心的網(wǎng)絡(luò)和服務(wù)器資源來提供服務(wù)?
混合云的規(guī)劃——按需彈性擴展改造
在 前面一篇文章提到,要解決12306面對“高流量,高并發(fā)“的難題是需要從軟件平臺和應(yīng)用系統(tǒng)層面出發(fā),要實現(xiàn)“可擴展的應(yīng)用云平臺架構(gòu)”,靈活和快速熱部署的機制,才是真正解決高并發(fā)訪問的根本。 12306承建單位-鐵科院在此方面做很多改進,使用Pivotal Gemfire內(nèi)存數(shù)據(jù)管理平臺,重新設(shè)計和改造核心子系統(tǒng),從用戶登錄,余票計算,票價計算,實名身份認證,到訂單查詢;這些改造后的業(yè)務(wù)子系統(tǒng)都能支持“按需彈性擴展”, 不再受限于原來關(guān)系型數(shù)據(jù)庫無法做分布式擴展的問題。這些一連串的改造,打通各個環(huán)節(jié),實現(xiàn)“質(zhì)”的大躍進, 也為未來使用混合云服務(wù)模式的架構(gòu)打下良好的基礎(chǔ)。
信息安全和業(yè)務(wù)子系統(tǒng)托管的選擇原則
下列進一步探討如何選擇“業(yè)務(wù)子系統(tǒng)”放在公有云提供服務(wù),主要有兩點考慮因素,一為個人信息保護, 二為需要“短暫”且強大計算機資源支持的子系統(tǒng)業(yè)務(wù)。
1. 購票流程和個人信息:
-
登錄:含個人信息
-
余票查詢/計算:不含個人信息
-
訂單確認和訂單查詢:含購票人信息和身份確認
-
付款:含個人的支付信息
2. 主要服務(wù)器集群和個人信息:
-
Web服務(wù)器 - 不含個人信息
-
應(yīng)用服務(wù)器緩存服務(wù)器 - 不含個人信息
-
登錄服務(wù)器 - 含個人信息
-
余票查詢/計算服務(wù)器- 不含個人信息
-
訂單確認和訂單查詢服務(wù)器 - 含個人信息
-
實名制身份確認服務(wù)器 - 含個人信息
-
…
3. 最耗用網(wǎng)絡(luò)資源
-
Web服務(wù)器
-
應(yīng)用服務(wù)器緩存服務(wù)器
-
余票查詢/計算服務(wù)器
4. 最耗用服務(wù)器資源
-
Web服務(wù)器集群
-
應(yīng)用服務(wù)器緩存集群
-
余票查詢/計算集群
5.售票高峰期訪問量振幅最大業(yè)務(wù)
-
Web服務(wù)器
-
應(yīng)用緩存服務(wù)器
-
余票查詢/計算服務(wù)器
綜合以上的分析,余票查詢/計算業(yè)務(wù)符合安全性考慮和售票高峰期訪問量振幅最大,最耗系統(tǒng)資源;其他適合放在公有云提供服務(wù)有三大服務(wù)器集群,Web服務(wù)器集群, 應(yīng)用服務(wù)器緩存集群, 和余票查詢/計算集群。
三、12306混合云架構(gòu)推測和解析
互聯(lián)網(wǎng)有一篇關(guān)于2015年春運12306用戶體驗報導(dǎo),在此篇采訪提到12306網(wǎng)站采取5項措施,制定多套應(yīng)急預(yù)案,以應(yīng)對突發(fā)情況,來提高用戶體驗。
12306用戶體驗有改善,“為了保障春運期間正常訂票,12306網(wǎng)站建設(shè)了兩個生產(chǎn)中心。在中國鐵路總公司又增加了一套設(shè)備。這樣就增加了一倍的網(wǎng)絡(luò)內(nèi)部處理能力……多建中心的同時,也增加了網(wǎng)絡(luò)的帶寬,帶寬從5G擴容至12G。增加帶寬就等于我們多開了幾個門,能讓更多的用戶同時進來……還不只這些,我們在春運高峰期租了個”云”……在網(wǎng)絡(luò)高峰期間,12306網(wǎng)站的查詢量最大,占到整個網(wǎng)站的85%,就把75%的查詢業(yè)務(wù)都放在租來的“云”上…“春運高峰期的點擊量、瀏覽量是平時的幾倍,甚至十幾倍。從經(jīng)濟角度考慮,一個網(wǎng)站不太可能以最高峰值的承受力為標準來建設(shè)。我們只能在滿足日常需求與高峰期售票需求之間尋求一個最佳點,合理進行硬件配置?!爆F(xiàn)在云技術(shù)成熟,高峰期租個云用幾天,價格合理,安全也有保障。
有這些新設(shè)備、新技術(shù),今年的用戶體驗大為改善。據(jù)測算,今年12306網(wǎng)站的點擊速度和頁面打開速度比去年縮短了一半。
由上面對話透露的信息,再以專業(yè)IT經(jīng)驗來分析并推測12306 混合云的架構(gòu)設(shè)計。
1. 兩個生產(chǎn)中心和租了個“云”:
兩個生產(chǎn)中心應(yīng)該是指鐵路總公司數(shù)據(jù)中心和鐵科院數(shù)據(jù)中心,“云”是指阿里云
2. 75%的查詢業(yè)務(wù)都放在租來的“云”上:
意謂著12306只將75%流量的查詢業(yè)務(wù)交給阿里云托管,阿里云只提供租賃查詢服務(wù),不涉及任何系統(tǒng)功能的改造。
3. 兩地三中心 高可用性和容災(zāi)設(shè)計:
以專業(yè)的IT來看,12306提供全國的網(wǎng)上售票服務(wù),在系統(tǒng)設(shè)計上一定有高可用性和容災(zāi)的設(shè)計。
Gemfire平臺已具備高可用性的設(shè)計, 所以,兩個生產(chǎn)中心一定運行整套業(yè)務(wù)流程服務(wù),彼此作為異地容災(zāi)備份的準備,而阿里云只提供部分業(yè)務(wù)查詢的服務(wù)。
4. 業(yè)務(wù)連續(xù)性,應(yīng)用不中斷,操作可持續(xù)的設(shè)計:
在2012年12月24號下午,由于空調(diào)設(shè)備故障,12306中斷服務(wù)數(shù)小時。這可以看出12306是單數(shù)據(jù)中心的設(shè)計, 沒有考慮容災(zāi)的設(shè)計。
為了吸取以前的經(jīng)驗,假設(shè)12306已經(jīng)考慮業(yè)務(wù)連續(xù)性,應(yīng)用不中斷,操作可持續(xù)的設(shè)計,這意味著雙生產(chǎn)中心是需要并行作業(yè)提供服務(wù);萬一有一個生產(chǎn)中心系統(tǒng)出故障,可以在瞬間將流量導(dǎo)至運行良好的數(shù)據(jù)中心,保持服務(wù)的連續(xù)性。
5. 數(shù)據(jù)源的傳輸和數(shù)據(jù)庫的復(fù)制:
過去數(shù)據(jù)源的傳輸和數(shù)據(jù)庫的復(fù)制機制已經(jīng)證明此技術(shù)是穩(wěn)定和成熟的,所以會沿用以前的設(shè)計。
6. 阿里云的余票查詢業(yè)務(wù)托管:
在前一節(jié)已經(jīng)詳述,考慮個人資料的敏感度和安全性,12306不會將這些資料放在阿里云,但會將需要耗費巨大資源的余票查詢業(yè)務(wù)放在阿里云提供服務(wù)。另外符合此條件的有3大服務(wù)器集群,Web服務(wù)器集群, 應(yīng)用服務(wù)器緩存集群, 和余票查詢/計算集群。
綜合上述的分析,推測和描繪12306混合云的架構(gòu)如下圖:

12306 兩地三中心 混合云架構(gòu)
四、12306兩地三中心混合云探討
12306兩地三中心的混合云架構(gòu)是目前國內(nèi)規(guī)模最大,業(yè)務(wù)系統(tǒng)最復(fù)雜的混合云服務(wù)。在12306承辦單位 - 鐵科院的領(lǐng)導(dǎo)下,經(jīng)過精心的設(shè)計,部署和試運行,在2015年春運上線,它的表現(xiàn)是很令人矚目的。此混合云設(shè)計的特點歸納如下:
1. 業(yè)務(wù)托管:
從整個購票流程來說,12306只是將部分流程的環(huán)節(jié)-“余票查詢”業(yè)務(wù)交由阿里云提供服務(wù),并不是“整個系統(tǒng)”按需擴容的托管,這與一般企業(yè)的業(yè)務(wù)托管有最大的差異。如何將“業(yè)務(wù)子系統(tǒng)“剝離整個系統(tǒng)獨立作業(yè), 再將數(shù)據(jù)結(jié)果傳回系統(tǒng),協(xié)同作業(yè),這需要從應(yīng)用系統(tǒng)框架設(shè)計著手。
2. 敏感資料的存放和安全性:
12306是公共服務(wù)平臺,敏感性資料的保護和安全性是首要考慮因素。在混合云設(shè)計上,12306將這些資料存放在私有云的數(shù)據(jù)中心, 確保數(shù)據(jù)安全無慮。
3. 業(yè)務(wù)連續(xù)性,應(yīng)用不中斷的容災(zāi)設(shè)計:
雙數(shù)據(jù)中心并行作業(yè),不但可以分擔(dān)高負載運行,而且可以相互備份, 保證操作不間斷。
4. 資源動態(tài)擴展:
將“難預(yù)測,暫時性”的巨大訪問量-余票查詢業(yè)務(wù)放在阿里云,阿里云可以按需動態(tài)調(diào)整網(wǎng)絡(luò)帶寬和“虛機“資源,保證12306的服務(wù)品質(zhì),并解決網(wǎng)絡(luò)傳輸瓶頸問題。
5. 關(guān)系型數(shù)據(jù)庫(SQL) 和非關(guān)系型數(shù)據(jù)庫(NoSQL)混合應(yīng)用:
12306將熱點數(shù)據(jù)放在NoSQL的Gemfire平臺,提供快速查詢和計算;將關(guān)鍵數(shù)據(jù)持久化到關(guān)系型數(shù)據(jù)庫。
總體而言,目前12306混合云架構(gòu)是很合理的設(shè)計,求穩(wěn),求安全,又省錢。如果追求技術(shù)的完美性來說,有如下四點建議:
-
提供同個車次不同車廂的聯(lián)程票 (例如,在同個車次, 北京到上海沒票, 但北京到天津, 天津到南京, 南京到上海有票),和 不同車次的聯(lián)程票 (中途站點換車),使旅客出行訂票更方便;
-
思考“數(shù)據(jù)大集中”的模式,摒除路局和12306數(shù)據(jù)中心的數(shù)據(jù)交換,提高處理效率,且易于整個售票系統(tǒng)的維護;
-
整合12306售票網(wǎng)站和線下作業(yè)系統(tǒng)(窗口購票,電話訂票,代售點),提供更快速的服務(wù);
-
大膽采用“軟件定義數(shù)據(jù)中心”的技術(shù),可以做更靈活更快速數(shù)據(jù)中心的遷移/復(fù)制,為將來多數(shù)據(jù)中心混合云的部署和服務(wù)(分散網(wǎng)絡(luò)流量)或異地容災(zāi)設(shè)計打基礎(chǔ)。
作者:劉云程 (YC),技術(shù)總監(jiān),任職于資拓宏宇(上海)公司,主要負責(zé)提供客戶應(yīng)用系統(tǒng)升級, 遷移到高性能和高擴展性的“云應(yīng)用平臺”。 劉云程畢業(yè)于臺灣清華大學(xué),在美國拿計算機博士學(xué)位,于1994年由IBM外派到北京。他在IT行業(yè)有近30年工作經(jīng)驗,曾任職于IBM中國研究中心負責(zé)電子商務(wù)和移 動互聯(lián)網(wǎng)方面的研究。