网购到火车票 浅析淘宝和12306网站架构
???? 12306火車票購票系統(tǒng),逢假日必癱瘓,引發(fā)了強烈反響。國慶前后,“問診12306”的時候,鐵道系統(tǒng)的答復(fù)是,購票人數(shù)太多,數(shù)據(jù)量過大。但 是,在前不久淘寶雙11大促活動中,淘寶雙十一總交易金額191億,訂單1億零580萬筆,其中無線支付近900萬筆,支付寶核心數(shù)據(jù)庫集群處理了41億 個事務(wù),執(zhí)行285億次SQL,生成15TB日志,訪問1931億次內(nèi)存數(shù)據(jù)塊,13億個物理讀,核心MySQL集群一天支持了20億個事務(wù)。12306火車票系統(tǒng)和其相比,真是天上地下。12306為何如此爛?
1. 淘寶技術(shù)被人稱贊
在剛剛過去的淘寶雙11大促活動中,淘寶的技術(shù)支撐受到了網(wǎng)民的追捧。據(jù)來自支付寶DBA@dbatools的透露:淘寶雙十一總交易金額191億,訂 單1億零580萬筆,其中無線支付近900萬筆,支付寶核心數(shù)據(jù)庫集群處理了41億個事務(wù),執(zhí)行285億次SQL,生成15TB日志,訪問1931億次內(nèi)存數(shù)據(jù)塊,13億個物理讀,核心MySQL集群一天支持了20億個事務(wù)。
淘寶的技術(shù)人員以實際行動讓網(wǎng)民折服,雖然在淘寶雙十一活動剛開始的10分鐘內(nèi)的訪問高峰期內(nèi),購物車和支付寶都出現(xiàn)了打不開的情況,但訂單可以生成, 而且白天的系統(tǒng)運行比較正常。雙十一期間,淘寶除了技術(shù)上的保障,還有大量的運維策略的支持,比如在峰值期間下訂單優(yōu)先級最高,支付可以晚點兒,大額度的 訂單優(yōu)先處理等等。
淘寶網(wǎng)采用什么技術(shù)架構(gòu)來實現(xiàn)網(wǎng)站高負載的呢?據(jù)淘寶技術(shù)人員分享,淘寶的整體架構(gòu)使用了如下措施來應(yīng)對:一應(yīng)用無 狀態(tài)(淘寶session框架);二有效使用緩存(Tair);三應(yīng)用拆分(HSF);四數(shù)據(jù)庫拆分(TDDL);五異步通信(Notify);六非結(jié)構(gòu) 化數(shù)據(jù)存儲(TFS,NOSQL);七監(jiān)控、預(yù)警系統(tǒng);八配置統(tǒng)一管理。
2. 12306網(wǎng)站被人詬病
淘寶強大的技術(shù)實力,很容易讓人們聯(lián)想到讓人“一票難求”的訂票網(wǎng)站-12306。12306網(wǎng)站購票難的問題幾乎成了所有人的共識。來自前支付寶架構(gòu)師馮大輝(@Fenng )的這條微博翻出12306這筆賬,別有一番滋味。
以馮大輝的計算方法,支付寶11月11日一天就處理了1億零580萬條交易請求量,而12306一天處理的交易(出票量)僅僅166萬條,這還主要是集 中在8點鐘開始放票之后的5分鐘時間里。從結(jié)果來看,12306弱爆了,處理的交易量比支付寶“低了兩個數(shù)量級”還那么弱不禁風(fēng)。
?
馮大輝的微博馬上得到了@caoz的轉(zhuǎn)發(fā)響應(yīng),后者在9月底對12306的罵戰(zhàn)中一戰(zhàn)成名,由于觀點相似,caoz和Fenng可以稱為統(tǒng)一戰(zhàn)線——當(dāng)然,眾多對12306充滿怨恨的普通購票者也與他們在感情上統(tǒng)一戰(zhàn)線。
簡單分析一下12306的購票系統(tǒng),為避免“黃?!辟I票,購票系統(tǒng)有一個業(yè)務(wù)邏輯:一個有效身份證件同一乘車日期同一車次限購一張車票。因此購買一張車票可以簡化為包含四個操作:
1) 判斷同一乘車日期同一車次是否有未預(yù)訂的空余座位
2) 判斷這個有效身份證是否已購買過同一乘車日期同一車次的車票
3) 車票上標(biāo)注的座位標(biāo)記為已預(yù)訂
4) 如果沒有購買過,則該身份證預(yù)訂一張車票
人們在12306網(wǎng)站上購買一張票的流程如下:
1)用戶通過瀏覽器訪問系統(tǒng)URL
2)界面集群F5將請求轉(zhuǎn)發(fā)至某一節(jié)點,通過比較用戶數(shù)據(jù)庫的內(nèi)容進行身份鑒權(quán)。
3)鑒權(quán)成功后進入訂票,提交訂票訂單(查詢流程暫不討論)界面顯示請等待
4)訂票消息被發(fā)送至總線部件(接口可用webService、RMI、甚至自定義協(xié)議都可以)
5)總線收到訂票消息、去Cache集群查詢相關(guān)車次
6)Cache根據(jù)自身維護的車次余票表,返回查詢結(jié)果,如果有余票,轉(zhuǎn)7)。如果無票了,則總線返回界面集群“沒票了”,界面提示用戶明天再試。
7)若有余票,則總線返回界面集群“正在出票,請等待”,并將訂票請求壓入隊列。且發(fā)消息至Cache,告訴CACHE將訂票請求加入隊列。
8)Cache收到總線隊列增加1個的消息,將自身維護的對應(yīng)車次余票數(shù)減1個。
9)總線另一線程負責(zé)從隊列中取消息,并發(fā)送至出票部件。
10)出票部件產(chǎn)生訂票結(jié)果,并修改數(shù)據(jù)庫,發(fā)送“訂票成功”消息回總線。
11)總線將訂票成功消息直接回傳至界面集群。
12)用戶看到訂票結(jié)果。
?
3. 跟淘寶相比,12306網(wǎng)站的有獨特的技術(shù)難度
1) 火車票屬于競爭性資源。淘寶的交易是相對離散的,分散在成千上萬的賣家當(dāng)中,同時對同一商家同一商品的并發(fā)購買并不是特別高。因此在數(shù)據(jù)訪問上不會有太大 的鎖同一數(shù)據(jù)的瓶頸,買火車票在這方面壓力會更大,最主要的原因還是僧多粥少的?;疖嚻笔菐浊?#xff0c;幾萬人搶一張票,火車票的搶購場景也只有在淘寶秒殺的時 候可以類比,但是網(wǎng)民參與的秒殺也很難成功秒殺到商品。
2) 火車票資源稀缺,需要同線下數(shù)以萬計的購票點、電話訂票等進行互斥。每張火車票都是獨一無二的,網(wǎng)絡(luò)售票只是數(shù)以萬計的購票終端的一個終端而已,需要跟其 他售票系統(tǒng)保持數(shù)據(jù)一致性。淘寶的商品只需要查詢庫存量就可以了。舉個粗略的例子,火車票的供需關(guān)系可能是1:10,淘寶貨品與消費者的供需關(guān)系可能是 10:1,技術(shù)革新解決不了某種商品嚴重供不應(yīng)求的本質(zhì)問題。淘寶上的商品天然沒有全局一致性的問題,做技術(shù)上做分區(qū)優(yōu)化就簡單得多了?;疖嚻辟I賣的每筆 業(yè)務(wù)都要互斥,以檢查有沒有票,一個人是否買了多張票等等。從這個角度可以理解為賣票問題的技術(shù)難度大得多,屬于世界級難題。
3) 火車票的信息是實時更新的。網(wǎng)民的每次操作都必須到后臺查詢,實時生成新的火車票的狀態(tài)信息。淘寶商品庫存信息在促銷期間不準確,這是服務(wù)端為了關(guān)鍵性能 做妥協(xié);但訂火車票,庫存信息必須是實時的。鐵道部2012年春運每天安排大約2000對列車,座位大概400萬個,因為每個座位都可能有不同的購票方式 (火車票代售點、電話訂票等),所以都需要計算,提前10天預(yù)售,應(yīng)該有點類似于taobao同時提供400萬件商品的秒殺活動。
4) 票務(wù)業(yè)務(wù)的復(fù)雜性非商品信息可比。選票最大的問題不是直達,是換車!只要有換車,計算量級都是“次方”往上增加。比如上海-西安,中間在鄭州換。但系統(tǒng)計 算的時候會出現(xiàn)“上海-北京-西安”的路線,這條線路是沒有選的,但會消耗計算資源,2000條線路+臨時車+換乘,還有就是瞬間的并發(fā),這個也是一個問 題。
5) 12306網(wǎng)站后面的票務(wù)系統(tǒng)問題。12306網(wǎng)站不是一個孤立的系統(tǒng),雖然這網(wǎng)站也很多地方可以優(yōu)化,但估計最大的瓶頸是后面那個和全國的代售點火車站 共用的票務(wù)系統(tǒng)。真正的火車票數(shù)據(jù)庫是在鐵路系統(tǒng)中獨立存在的,這個鐵路系統(tǒng)反應(yīng)慢才是制約12306網(wǎng)站慢的主因。所以最大問題可能不是負載并發(fā)問題, 而是老票務(wù)系統(tǒng)的問題。票務(wù)系統(tǒng)采用的是突然放票,而有的票又遠遠不夠大家分,所以,大家才會有搶票這種有中國特色的業(yè)務(wù)的做法。于是當(dāng)票放出來的時候, 就會有幾百萬人甚至上千萬人殺上去,查詢,下單。幾十分鐘內(nèi),一個網(wǎng)站能接受幾千萬的訪問量,這個是很恐怖的事情。據(jù)說12306的高峰訪問是10億 PV,集中在早8點到10點,每秒PV在高峰時上千萬。這需要逐步全面革新。
6) 獨特的車票預(yù)留問題。傳統(tǒng)票務(wù)系統(tǒng)有一個比較復(fù)雜的地方就是各種預(yù)留票規(guī)則,每個城市,每個節(jié)日都有很多的復(fù)雜留票規(guī)則,導(dǎo)致很多時候頭十天一張臥鋪都沒有,但是等到最后就有很多票,這些使本已稀缺的資源更加緊張。
4. 結(jié)論:淘寶的網(wǎng)站優(yōu)化技術(shù)大多不適用于12306網(wǎng)站
淘寶的網(wǎng)站優(yōu)化技術(shù)中采用了大量的緩存技術(shù)和分布式策略,火車票的狀態(tài)是實時計算,實時更新的,緩存只能解決網(wǎng)站前端的一小部分問題,但解決不了人們搶票和出票慢的根本問題。
轉(zhuǎn)載于:https://www.cnblogs.com/sand-tiny/p/3512082.html
總結(jié)
以上是生活随笔為你收集整理的网购到火车票 浅析淘宝和12306网站架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql中查找并删除重复数据的方法
- 下一篇: 程序员如何在大公司做管理