當(dāng)前位置:工程項目OA系統(tǒng) > 學(xué)校OA管理系統(tǒng) > 相關(guān)系統(tǒng) > 學(xué)生管理系統(tǒng)
IT一家言:12306已近技術(shù)極限
聲明:本文原作者“代碼狗”,內(nèi)容有刪剪。12306問題背后,技術(shù)原因究竟占了幾成?不管你信不信,我是通篇讀完了。
資深程序員現(xiàn)身說法
我曾在淘寶寫過一段時間代碼,2012年在一家百強(qiáng)民企做電商副總,當(dāng)時在極為艱苦的條件下帶隊開發(fā)了一個B2C網(wǎng)站,走支付寶和銀聯(lián)支付通道,年營業(yè)額千萬級(當(dāng)然實在太少了,我只是說這個網(wǎng)站投入了實際的運營)。
也就在那個時候,我對“12306”嗤之以鼻,覺得他們做得太爛了,認(rèn)為自己能帶隊花幾百萬元用半年時間做個好的出來。于是我狂妄地想做一個開源的訂票系統(tǒng)給他們。我花了一個星期時間思考建立數(shù)據(jù)模型,思考到庫存這一步的時候,我才發(fā)現(xiàn),“12306”的庫存復(fù)雜性比淘寶、京東高很多倍,運算量也大很多倍。傳統(tǒng)的分布式數(shù)據(jù)庫、緩存、負(fù)載均衡技術(shù)并不能恰好滿足“12306”的需求。
淘寶技術(shù)的確比“12306”強(qiáng)大很多倍,淘寶現(xiàn)在的系統(tǒng)也是花了10倍于“12306”的錢、時間和人力才做起來的。根本原因還是鐵路運力不能滿足春運需求,淘寶也解決不了這個問題。
“12306”這一年來進(jìn)步非常大。從前端動畫驗證碼、分時段搶票,到后端去小型機(jī)、虛擬化、內(nèi)存數(shù)據(jù)庫的運用??梢哉f,這是中國官方部門做得最強(qiáng)大的網(wǎng)站(電商系統(tǒng))。至于“12306”一期工程3個億(含硬件)貴不貴我不評價,我只提供一個數(shù)字供參考:百度一年的研發(fā)費用(不含硬件)是10億元,這來自百度財報。3億元看起來好大一個數(shù)字,真用到超大型的電商系統(tǒng)、搜索引擎系統(tǒng)里面,其實也不算天文數(shù)字了。
你不知道的“秒殺”
為什么秒殺壓力大,為什么“12306”的動態(tài)庫存很復(fù)雜?
先說秒殺。
2013年12月25日前后,天貓搞了一個圣誕季積分兌換活動,持續(xù)幾天。25日上午10時12分,放出了15000個天貓魔盒,從成交記錄上看,19秒內(nèi)全部搶完。
實際上,我也參加秒殺了,那天的題目特別簡單——請輸入×××漢字的拼音首字母,我5秒內(nèi)答題完畢并提交訂單,結(jié)果系統(tǒng)告訴我排隊的人太多,擠不進(jìn)去,并提示14秒后重試。人太多就是因為題目太簡單了,門檻越低,5秒內(nèi)擠進(jìn)去的人也越多,如果題目換成“2克濃度為3%的U235在大亞灣核電站能發(fā)多少度電”,5分鐘之內(nèi)都不會有1萬5千人跟我競爭。
我想,14秒以后哪還有我的事呀,于是重新答題秒殺,結(jié)果出現(xiàn)了服務(wù)器錯誤的頁面。反復(fù)刷新幾次,秒殺就已經(jīng)結(jié)束了。
淘寶是什么技術(shù)水平呢,淘寶有至少4000名技術(shù)人員,至少4萬臺服務(wù)器(這是兩年前的公開數(shù)據(jù))。2013年11月11日成交額351億元,2012年全年成交額超過1萬億元。
淘寶擁有各種自主研發(fā)團(tuán)隊:服務(wù)器、交換機(jī);操作系統(tǒng)、Web服務(wù)器、Java語言虛擬機(jī)、數(shù)據(jù)庫、負(fù)載均衡器、Java運行容器。淘寶還有數(shù)不清的開源項目和中間件,如高性能Java通信中間件HSF、分布式數(shù)據(jù)庫中間件TDDL、異步消息系統(tǒng)notify等等。
以淘寶這樣的技術(shù)水平,都還不能做到秒殺時讓每個用戶都沒有擁擠感,為什么?
一是要尊重物理原理,一臺服務(wù)器一秒鐘能承受的計算量是有極限的,任你怎么優(yōu)化,采用多高效的算法和編程語言,都突破不了某個極限,比方說汽車發(fā)動機(jī)驅(qū)動的F1賽車至今也不能突破400公里的時速。
二是要考慮經(jīng)濟(jì)效益,“十一”黃金周的時候,北京主城區(qū)到八達(dá)嶺長城的路堵得嚴(yán)嚴(yán)實實,但不能因為黃金周的高峰,就把這段路修成長安街那樣10車道的高速公路,否則花費天文數(shù)字(“12306”那3個億大概只夠修1-3公里)修了一段路,平時曬谷子?
淘寶目前的硬件和帶寬數(shù)量,已經(jīng)超出日常運營的需求了,目的就是留出相當(dāng)大的余量給大促銷。
再說動態(tài)庫存。
淘寶秒殺天貓魔盒的時候,只有一個商品(SKU),它的庫存是15000個。有一個人秒殺到了,庫存就減1,19秒賣完的,每秒要成功產(chǎn)生789個訂單。想象一下,你在廣場上賣火車票,一秒鐘內(nèi)有8萬人舉著錢對你喊:賣給我!
很多人都知道,比秒小的時間單位還有毫秒、皮秒、飛秒。但交易系統(tǒng)登記一個交易可不像電子繞著原子核跑一圈那么簡單,它要做這些事:檢查是否惡意訪問、取到系統(tǒng)時間、取到顧客默認(rèn)收貨地址、核對顧客秒殺資格、生成訂單號、把顧客ID系統(tǒng)時間訂單號收貨地址寫入訂單系統(tǒng)、扣除顧客天貓積分、商品庫存減1、給顧客打標(biāo)記(每人只能秒一個)等等等等,每件事都要花費毫秒級別的時間,這些操作加起來的時間可能是接近1秒級別的,但由于淘寶的服務(wù)器比較強(qiáng)悍,而且采用了分布式和集群技術(shù),結(jié)果比1秒理想一點。但即使有1萬臺服務(wù)器,也不能把這個時間稀釋成萬分之一秒,因為,商品只有一種,它有15000個庫存,對應(yīng)的數(shù)據(jù)庫記錄只有一行,所有的交易請求都要到這里來處理。
能不能把這15000個拆分成5000個商品并分配到5000臺服務(wù)器上呢?那樣不就可以5000臺服務(wù)器同時處理了嗎?答案是不能,首先,5000個商品,意味著有5000個商品詳情頁,5000個購買按鈕,這對前期的營銷、引流是個災(zāi)難?;旧暇蜎]法做引流入口了,顯然這違背了商業(yè)管理原則,人為增加了信息混亂程度。其次,天貓魔盒秒殺也不是啥大事,即使按官方標(biāo)價399元來計算,也就600萬元的交易。如果600萬的交易要花費那么大的配套成本,就太不劃算了。再次,淘寶有十幾億商品,這十幾億商品的展示交易和管理,本來就是分布到上萬臺服務(wù)器上去了。沒有必要再把每個商品按庫存拆成多個商品了。
這789人搶到了,還不一定會付款,所以就又帶來訂單取消重新恢復(fù)庫存的問題。還有想要的消費者們,會認(rèn)為還有機(jī)會,繼續(xù)在前臺刷一會兒,最終這個秒殺會被熱情的消費者們猛刷30秒到1分鐘。
12306的“變態(tài)”庫存
好了,講了半天淘寶,回到正題“12306”——我以北京西到深圳北的G71次高鐵為例,它有17個站(北京西是01號站,深圳北是17號站),3種座位(商務(wù)、一等、二等)。表面看起來,這不就是3個商品嗎?G71商務(wù)座、G71一等座、G71二等座。大部分吐槽的人就是在這里栽第一個跟頭的。
實際上,G71有136×3=408種商品(408個SKU),怎么算出來的?請看:如果賣北京西始發(fā)的,有16種賣法(因為后面有16個站),北京西到:保定、石家莊、鄭州、武漢、長沙、廣州、虎門、深圳……分別都是一個獨立的商品。
同理,石家莊上車的,有15種下車的可能,以此類推,單以上下車的站來計算,有136種票:16+15+14……+2+1=136。每種票都有3種座位,一共是408個商品。
再看出票時怎么減庫存,由于商務(wù)、一等、二等三種座位數(shù)是獨立的,庫存操作也是一樣的,下文我就不再提座位的差別,只討論出發(fā)與到達(dá)站。另外,下文說的是理論模型,不是說“12306”的數(shù)據(jù)庫就是這么設(shè)計的。
旅客A買了一張北京西(01號站)到保定東(02號站)的,那么北京西到保定東這個商品的庫存就要減1,同時,北京西到石家莊、鄭州、武漢、長沙、廣州、虎門、深圳等15個站臺的商品庫存也要減1,也就是說,出一張北京西到保定東的票,實際上要減16個商品的庫存。
這還不是最復(fù)雜的,如果旅客B買了一張北京西(01號站)到深圳北(17號站)的票,除了北京西到深圳北這個商品的庫存要減1,北京西到保定東、石家莊、鄭州、武漢、長沙、廣州、虎門等15個站臺的商品庫存也要減1,保定東到石家莊、鄭州、武漢、長沙、廣州、虎門、深圳北等15個站臺的商品庫存要減1……總計要減庫存的商品數(shù)是16+15+14+……+1=120個。
當(dāng)然,也不是每一張票的庫存都完全這樣實時計算,可以根據(jù)往年的運營情況,在高峰時段預(yù)先對車票做一些分配,比如北京到武漢的長途多一點,保定到石家莊的短途少一點。我沒有證據(jù)證實鐵道部門這樣做了,但我相信,在還沒有“12306”網(wǎng)站的時候,就有這種人工預(yù)分配的策略了。
再想象一下,8萬人舉著錢對你高喊:賣給我。你好不容易在錢堆里找到一只手,拿了他的錢,轉(zhuǎn)身找120個同事,告訴他們減庫存,而這120個同事也和你一樣被8萬人圍著;也和你一樣,每賣出一個商品要找?guī)资畟€人減庫存……這就是“12306”動態(tài)庫存的變態(tài)之處。比你平時買東西的任何網(wǎng)站的庫存機(jī)制都復(fù)雜幾十上百倍。
空談技術(shù)無益解決問題
防軟件搶票,也不是加個圖片驗證碼那么簡單。圖片驗證碼有6種機(jī)器暴力破解的辦法,搶票插件用的是OCR識別。驗證碼設(shè)置得復(fù)雜一點行不行?有人又要提意見了:這只是便宜了大學(xué)生和辦公室白領(lǐng),農(nóng)民工連26個字母都認(rèn)不齊,怎么搞?搞動畫驗證碼吧,也有人說,視力不好的人怎么辦?最后驗證碼被搞得很簡單,皆大歡喜。其實最高興的是開發(fā)搶票插件的公司。
就算采用了機(jī)器完全不可能識別的驗證碼,也防不住社會工程學(xué)的破解辦法。招募一堆網(wǎng)吧打游戲的青少年朋友,每成功輸入50個驗證碼給1塊錢,或者等值的虛擬貨幣、游戲裝備,我保證想賺這個錢的人數(shù)不勝數(shù)。這點錢對轉(zhuǎn)賣車票的利潤而言,是可以接受的成本。有沒有什么技術(shù)可以防住社會工程學(xué)的破解辦法呢?能防住網(wǎng)吧青少年的驗證碼只有——“2克濃度為3%的U235在大亞灣核電站能發(fā)多少度電”。
以上討論只是把“12306”當(dāng)成和淘寶一樣沒有歷史包袱從零起步的交易系統(tǒng),實際上它不是,它后面的票池還有電話售票、火車站售票、代售點售票等多個傳統(tǒng)渠道要服務(wù)。除了客運服務(wù),“12306”還有全國最大(很可能也是全球最大)的大宗物資貨運系統(tǒng)。架空政策(包括定價政策、警方打擊“黃牛”政策、身份驗證政策)談技術(shù),是不可能解決春運搶票困局的。
還有人說,KFC的食品可以單賣,也可以賣套餐,為什么沒像我一樣搞出這么多SKU?那是因為,KFC門店的“人肉查詢”頻率非常低,沒必要為了優(yōu)化查詢性能把庫存結(jié)構(gòu)設(shè)計成那樣。
- 1學(xué)生信息管理系統(tǒng)-教學(xué)質(zhì)量整體解決方案
- 2巧用泛普軟件,快速與家校聯(lián)系起來
- 3教務(wù)管理系統(tǒng)
- 4教務(wù)管理系統(tǒng)的研發(fā)意義
- 5免費學(xué)校管理軟件你有嗎?
- 6艾學(xué)通與泛普之比較
- 7校園管理系統(tǒng)
- 8培訓(xùn)學(xué)校如何進(jìn)行系統(tǒng)化管理
- 9學(xué)校管理不當(dāng)怎么解決
- 10培訓(xùn)學(xué)校管理平臺
- 11泛普培訓(xùn)學(xué)校管理系統(tǒng)有哪些功能?
- 12抵制Apple Watch,推薦泛普
- 13免費學(xué)校管理系統(tǒng)如何在行業(yè)中成為強(qiáng)者
- 14培訓(xùn)學(xué)校管理系統(tǒng)——泛普
- 15我國教育培訓(xùn)行業(yè)將呈現(xiàn)四大發(fā)展趨勢
- 16學(xué)生管理系統(tǒng)功能介紹
- 17學(xué)生信息管理系統(tǒng)功能強(qiáng)大和全面
- 18中國教育培訓(xùn)聯(lián)盟網(wǎng)專訪“泛普”
- 19泛普學(xué)院管理系統(tǒng)
- 20成績管理系統(tǒng)需求分析及實現(xiàn)目標(biāo)
- 21免費為“瘋狂手機(jī)”安裝“泛普”,讓你的學(xué)生輕輕松松學(xué)英語
- 22教務(wù)管理者的指南針
- 23學(xué)生管理系統(tǒng)介紹
- 24學(xué)生的成績單該如何讓家長知道?
- 25學(xué)生信息管理系統(tǒng)軟件開發(fā)
- 26考勤管理軟件的優(yōu)勢
- 27學(xué)生信息管理系統(tǒng)是針對學(xué)校人事處的開發(fā)的管理軟件
- 28泛普寄給父母的一封信
- 29給我一個支點,我將翹起整個教育界——泛普
- 30師之伴侶---泛普
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓