根據(jù)谷歌搜索的關(guān)鍵詞分析,“搶票插件”、“搶票軟件”兩個關(guān)鍵詞的搜索熱度從2013年1月15日、16日開始上升,并在1月18日達(dá)到頂峰。?熊靖?攝
編者按
在互聯(lián)網(wǎng)從業(yè)者看來,12306購票網(wǎng)站問題的根源在于鐵道部自成一體的積習(xí)與互聯(lián)網(wǎng)開放透明的時代潮流之間的不兼容。盡管與“鐵老大”之間難有對接溝通渠道,“程序員”們還是自發(fā)成立了旨在優(yōu)化和開發(fā)12306的開源項目。我們從項目中邀請數(shù)位專業(yè)人士,測評12306網(wǎng)站,并對“鐵老大”的互聯(lián)網(wǎng)表現(xiàn)做出分析和建議。
南方周末特約撰稿 韓冬梅
風(fēng) 力
像修鐵路一樣建網(wǎng)站
洪水般兇猛的春運(yùn)勢能推動下,作為“鐵路官方唯一購買火車票的網(wǎng)站”,12306確實承受了相當(dāng)大的壓力——數(shù)據(jù)機(jī)構(gòu)Hitwise披露,2013年1月19日,12306頁面瀏覽量(PV)達(dá)到1.2億,平均每個用戶瀏覽14個頁面,這意味著12306當(dāng)日獨(dú)立訪客(UV)接近千萬,這樣的數(shù)據(jù)已經(jīng)超過京東、去哪兒等網(wǎng)站。
在2012年的春運(yùn)期間,全國數(shù)千萬用戶遇到了服務(wù)器宕機(jī)、支付故障、排隊時間冗長等一系列問題。有70%用戶反映無法在30分鐘內(nèi)正常登錄網(wǎng)站,剩余的30%人中分別在查詢-選定-下單-支付這四步過程中隨機(jī)遇到服務(wù)器拒絕訪問、網(wǎng)站停止響應(yīng)、當(dāng)前用戶數(shù)過多的情況。
“問題的實質(zhì)是傳統(tǒng)思維的鐵老大在進(jìn)入互聯(lián)網(wǎng)的過程中準(zhǔn)備不足?!蹦持娚坦炯夹g(shù)副總裁何然認(rèn)為,12306遇到的首先是服務(wù)模式的挑戰(zhàn):互聯(lián)網(wǎng)產(chǎn)品需要“小步快跑”式的微創(chuàng)新,首先快速推出業(yè)務(wù)占領(lǐng)市場空白,然后在最短時間內(nèi)進(jìn)行技術(shù)迭代,在此期間內(nèi)以良好服務(wù)提升用戶體驗,降低流失,這是一個正?;ヂ?lián)網(wǎng)公司所應(yīng)遵循的發(fā)展軌跡。
而12306的建設(shè)與修建一條鐵路的傳統(tǒng)模式?jīng)]有什么分別:承包方簽訂服務(wù)協(xié)議,完工后不再負(fù)責(zé)運(yùn)營、維護(hù)及后續(xù)開發(fā)。這種模式本身就存在隱患,再加上春運(yùn)期間的流量和訪問數(shù)遠(yuǎn)遠(yuǎn)超過想象,直接導(dǎo)致服務(wù)器故障。何然做了一個對比,“12306訪問峰值數(shù)據(jù)相當(dāng)于淘寶的‘雙十一活動期間數(shù)據(jù)量。為了實現(xiàn)穩(wěn)定的數(shù)據(jù)庫結(jié)構(gòu),淘寶用了將近八年,而12306卻只有短短幾個月?!?/p>
缺乏中間層的設(shè)計硬傷
“程序開發(fā)中有一個堤壩理論:修建堤壩為了抵御大浪,一般會做幾層,一層比一層高,這樣可以分批次抵擋波浪。網(wǎng)站流量也是如此,層級越多,分流后壓力就越小,網(wǎng)站也就越安全。12306在設(shè)計上,缺少中間層的緩沖,前端用戶需求直接涌入最后端的數(shù)據(jù)庫,造成了一系列的故障?!?/p>
何然進(jìn)一步解釋,如果按照大型商業(yè)網(wǎng)站的思路來設(shè)計12306,最底層的是車票池(集中式數(shù)據(jù)庫),對接傳統(tǒng)鐵路系統(tǒng)票務(wù)TRS(鐵路客票系統(tǒng))和TBS(高鐵售票系統(tǒng)),“這部分是傳統(tǒng)業(yè)務(wù),有多年的積淀,做得不錯”。
第二層是分布式數(shù)據(jù)庫。從集中式數(shù)據(jù)庫到分布式數(shù)據(jù)庫,其實就是從一個大車票池分流到很多小車票池。比如華北地區(qū)一個池,珠三角一個池,把不同的需求分散出去。
第三層是交易網(wǎng)關(guān),主要是處理訂單信息及支付環(huán)節(jié)。并發(fā)式是這一層的主要特點,同時會有百萬級別的用戶進(jìn)行在線交易。
第四層是安全層,起到防火墻的作用,用于過濾和清除黃牛刷票等惡意流量,及網(wǎng)絡(luò)攻擊防護(hù),保障普通用戶的正常訪問。最上層是服務(wù)網(wǎng)關(guān),基于這一層,可以搭建購票網(wǎng)站(12306)、安卓客戶端、iOS客戶端等,這一層也是直接對接用戶的。
第二層到第四層在開發(fā)中一般叫作引擎,而如果引擎的部分設(shè)計失誤或?qū)崿F(xiàn)不完全,直接表現(xiàn)就是前端服務(wù)不穩(wěn)定,容易發(fā)生出票故障、支付錯誤等問題。
“看起來之前12306的架構(gòu)就是在第五層服務(wù)網(wǎng)關(guān)接受了用戶購票的請求后,直接推到底層的數(shù)據(jù)庫環(huán)節(jié),缺少中間層引擎部分的緩沖和分流,這就使得集中式數(shù)據(jù)庫在瞬時大流量請求面前崩潰了?!?/p>
原始的前端水平
在架構(gòu)之外,12306還存在一系列問題,包括至今仍未更改的簡陋界面。眾多網(wǎng)站的前端工程師在分析后均表示,這樣的前端水平實在過于原始,技術(shù)還停留在三四年前。
一系列12306的漏洞接二連三地被發(fā)現(xiàn)。比如有“技術(shù)宅”通過修改12306提交頁面的代碼,成功定到臥鋪下鋪(正常出票為隨機(jī)鋪位);還有人寫出了提前20天以上購票的腳本;最終則出現(xiàn)了“購票助手”、“瀏覽器購票插件”這類工具。
“打開主頁要建60多個HTTP連接,現(xiàn)在的瀏覽器都是并發(fā)請求的,100萬用戶就是6000多萬個請求,太多了;首頁圖片共計700k左右,如果100萬用戶首次同時訪問,并在120秒之內(nèi)返回,就要下載47Gbps的數(shù)據(jù)。如果網(wǎng)站能減肥,節(jié)約帶寬后訪問速度會大幅提升?!背绦騿T“銀魂最高”建議。
軟件工程師趙會軍認(rèn)為:“即使這個并發(fā)量做到足夠大,結(jié)果只能是所有票瞬間賣完,然后系統(tǒng)全天剩余時間無所事事。所以,首先要解決的是把購票時間規(guī)則改變,進(jìn)行分散,然后才輪到解決并發(fā)量的問題。”
丁香園CTO馮大輝則建議使用通用的數(shù)字證書?!?2306的數(shù)字證書是自己簽發(fā)的而非通用的,需要瀏覽器和其他應(yīng)用來兼容,在某些瀏覽器上甚至根本無法使用,這顯然影響用戶體驗。”
這些建議部分已經(jīng)被實現(xiàn)。比如今年的放票規(guī)則就已經(jīng)修改為8至18時,除14時外每小時均有部分新票發(fā)售。自2013年1月7日開始(提前20天)發(fā)售春運(yùn)客票至今,整個12306只有兩次時間不長的技術(shù)故障。結(jié)合數(shù)據(jù)庫的一系列改進(jìn),2013年絕大多數(shù)人的反饋不再是“登不上”,而是“買不到票”。
有限的網(wǎng)絡(luò)票源
買不到票當(dāng)然并不只是因為客票有限的原因。在這個顯而易見的問題背后,隱藏著的是新老系統(tǒng)的對接問題。
12306并非一套獨(dú)立的購票系統(tǒng)。鐵道部原先用的是一套人工售票系統(tǒng),12306是建立在這個系統(tǒng)之上的互聯(lián)網(wǎng)通用自助購票平臺,兩者共享同一個票池。這就引出一個最現(xiàn)實的問題,一列火車的所有客票,究竟有多少應(yīng)該通過互聯(lián)網(wǎng)發(fā)售?
比如今年春運(yùn)在“購票助手”出現(xiàn)后在互聯(lián)網(wǎng)上曾引發(fā)熱議:既然網(wǎng)絡(luò)客票提前20天發(fā)售而售票窗只提前18天,擁有“購票助手”對排隊買票的農(nóng)民工是否公平?
通過了解整套購票系統(tǒng),答案已經(jīng)很明顯。但我們有理由相信在去年的春運(yùn)時期,鐵道部由于首次設(shè)計客票方案,在兩者的比例上缺乏經(jīng)驗,導(dǎo)致12306可買的票數(shù)實際上并沒有想象的那么多。
“從今年整體情況來看,12306及電話訂票的總出票數(shù)占到客票總量的30%至40%。這個比例比去年高一些,但我們不能因此認(rèn)為這已經(jīng)是最優(yōu)方案。網(wǎng)絡(luò)渠道出票比例多大最合適,還要慢慢摸索”,一位鐵路系統(tǒng)的內(nèi)部人士表示。
?下轉(zhuǎn)第3版
?上接第2版
可以想見在今后很長一段時間內(nèi),這種網(wǎng)絡(luò)+人工售票雙軌并行的銷售方式不會改變,而這也就注定了無論你是使用360瀏覽器、購票助手軟件或是每天堅持自行點擊鼠標(biāo),你爭取的都只是本就為數(shù)不多的車票中比較小的那一部分。
至少在互聯(lián)網(wǎng)上做到 開放和透明
雖然并不明白個中原理,但得知整個12306項目的中標(biāo)金額合計在3億人民幣以上時,公眾還是發(fā)出了憤怒的聲音:3億就換來這么個玩意?
曾負(fù)責(zé)過大型資訊門戶和電商網(wǎng)站技術(shù)架構(gòu)的何然坦言:“12306技術(shù)上的難度很大。3億的數(shù)字肯定含有水分,但差距并不像一般人所想象的那么大?!?/p>
例如把12306與淘寶對比:雖然“雙十一”活動期間淘寶總交易數(shù)1.06億筆,但淘寶商品實際上是靜態(tài)的,只需要做購買隊列,當(dāng)排隊者超過商品數(shù)時即關(guān)閉購買,其間并不需要查詢數(shù)據(jù)庫。而12306的所有查詢都必須實時,尤其是同一條線路上當(dāng)起點站的票狀態(tài)被確定時,沿途各站的車票狀態(tài)都會隨之變化,因此即使試圖做分布式數(shù)據(jù),整條線路上所有支站狀態(tài)表加在一起也是一個相當(dāng)大的數(shù)字。
“通過測算可以看出來,去年可用性太差了,今年技術(shù)和業(yè)務(wù)都有優(yōu)化?!倍∠銏@CTO馮大輝透露,2012年5月鐵道部邀請阿里巴巴等多家互聯(lián)網(wǎng)公司技術(shù)骨干,作為顧問向12306項目提建議,其中部分已被采納。
盡管能得到專業(yè)人士的理解,也有不小進(jìn)步,但12306仍然被千夫所指??梢哉f,鐵道部建設(shè)網(wǎng)站的傳統(tǒng)方式即埋下隱患;在應(yīng)對業(yè)界討論和公眾輿論方面仍然缺乏開放的姿態(tài),則放大了問題。
例如2012年9月,何然看到很多程序員無法在12306訂購火車票,即牽頭成立了12306ng.org社區(qū)。該項目所有開發(fā)過程、開放文檔、源代碼都是開放的,所有互聯(lián)網(wǎng)公司都可免費(fèi)調(diào)用(包括12306)。何然的想法是,12306開源項目能夠部分替代12306在線訂票或分發(fā)、處理數(shù)據(jù),并且能與12306無縫切換。目前這一社區(qū)已經(jīng)聚集了1萬多名開發(fā)者,也做出了一些相關(guān)的產(chǎn)品如瀏覽器搶票插件、手機(jī)客戶端等。
但何然表示前景并不樂觀:“離想象中還很遠(yuǎn),和鐵道部的溝通基本沒有;他們也沒有開放接口,我們走得很艱難?!?/p>
2012年,曾有網(wǎng)友提出鐵道部應(yīng)當(dāng)對12306進(jìn)行公開招標(biāo),亦有人戲言應(yīng)當(dāng)讓淘寶接管這部分業(yè)務(wù)。而以鐵道部自成一體的特殊狀況來看,這些提議都缺乏可行性。但鐵道部若希望減少批評,降低輿論壓力,則應(yīng)當(dāng)公布網(wǎng)站建設(shè)資金去向,并在維護(hù)和后續(xù)開發(fā)上呈現(xiàn)互聯(lián)網(wǎng)時代所應(yīng)有的開放姿態(tài)。至少在以開放和透明為時代潮流的互聯(lián)網(wǎng)上,“鐵老大”的前現(xiàn)代思維應(yīng)該改一改了。
(應(yīng)當(dāng)事人要求,文中何然系化名)