前淘寶工程師談12306:做它比做淘寶難

jopen 10年前發布 | 5K 次閱讀 12306

        如果把 12306 外包給 IBM 或者阿里巴巴來做,能否比現在做得好?

        如果是以前,我肯定會回答:是。因為我們始終認為,一個年投入超 3 億元的賣火車票網站,沒有什么理由做不好吧?其實不光是小編這樣認為,包括眾多媒體,甚至專業人士都曾噴過 12306,但近日一名前淘寶工程師通過科普的方式給了我們一記響亮的耳光:做 12306 網站難度遠高于淘寶。

        我曾在淘寶寫過一段時間代碼,2012 年在一家百強民企做電商副總,當時在極為艱苦的條件下帶隊開發了一個 B2C 網站,走支付寶和銀聯支付通道,年營業額千萬級。

        在平時,12306 也就是個正常的電商網站。但一到黃金周,12306 就是一個全站所有商品都秒殺,所有 SKU (庫存量單位,物流管理術語,編者注)都是動態庫存的變態。

        媒體人噴 12306,是他們不懂技術,沒有能力和耐心來分析背后的難度。技術人員噴,則是因為大部分的技術人員在短時間思考時,容易陷入過于樂觀的誤區。

        至于 12306 一期工程 3 個億(含硬件)貴不貴我不評價,我只提供一個數字供參考,百度一年的研發費用(不含硬件)是 10 億,這個數字來自百度財報。網上能查到。3 億看起來好大一個數字,真用到超大型的電商系統、搜索引擎系統里面,其實也不算什么天文數字了。

        再解釋一下,為什么秒殺壓力大,以及為什么 12306 的動態庫存很復雜。

前淘寶工程師談12306:做它比做淘寶難

        先說秒殺:

        2013 年 12 月 25 日前后,天貓搞了一個圣誕季積分兌換活動,持續幾天。25 號上午 10 點 12 分,放出了 15000 個天貓魔盒,從成交記錄上看,是 19 秒內全部搶完。

        實際上,我也參加秒殺了,我應該是 5 秒內答題完成并提交訂單,結果告訴我排隊的人太多,14 秒以后重試。

        我想,14 秒以后哪還有我的事情呀,于是重新答題秒殺,結果出現了服務器錯誤的頁面。反復刷新幾次,就告訴秒殺結束了。

        淘寶是什么技術水平呢,淘寶有至少 4000 技術人員,至少 4 萬臺服務器。以淘寶這樣的技術水平,也不能做到秒殺時讓每個用戶都沒有擁擠感,為什么呢?

        一是要尊重物理原理。一臺服務器一秒鐘能承受的計算量是有極限的,任你怎么優化,采用多高效的算法和編程語言,都突破不了某個極限。

        二是要考慮經濟效益。十一黃金周的時候,北京主城區到八達嶺長城的路堵得嚴嚴實實,但不能因為黃金周的高峰,就把這段路修成長安街那樣 10 車道的高速公路。

        再說動態庫存:

        淘寶秒殺天貓魔盒的時候,只有一個商品(行話叫做 SKU),它的庫存是 15000 個。有一個人秒殺到了,庫存就減1,19 秒賣完的,一秒要成功產生 789 個訂單。想象一下,你在廣場上賣火車票,一秒鐘有 8 萬人舉著錢對你喊:賣給我!

        好了,講了這半天淘寶,可以說 12306 了吧?

        我以北京西到深圳北的 G71 次高鐵為例,它有 17 個站,3 種座位。表面看起來,這不就是 3 個商品嗎?G71 商務座、G71 一等座、G71 二等座。大部分輕易噴 12306 的技術人員就是在這里栽第一個跟頭的。

        實際上,G71 有 136*3 =408 種商品(408 個 SKU),怎么算來的?請看:

        如果賣北京西始發的,有 16 種賣法(因為后面有 16 個站),北京西到:保定、石家莊、鄭州、武漢、長沙、廣州、虎門、深圳……都是一個個獨立的商品,

        同理,石家莊上車的,有 15 種下車的可能,以此類推,單以上下車的站來計算,有 136 種票:16+15+14…+2+1=136。每種票都有 3 種座位,一共是 408 個商品。

        旅客A買了一張北京西(01 號站)到保定東(02 號站)的,那【北京西到保定東】這個商品的庫存就要減一,同時,北京西到石家莊、鄭州、武漢、長沙、廣州、虎門、深圳等 15 個站臺的商品庫存也要減一,也就是說,出一張北京到保定東的票,實際上要減 16 個商品的庫存!

        這還不是最復雜的,如果旅客B買了一張北京西(01 號站)到深圳北(17 號站)的票,除了【北京西到深圳北】這個商品的庫存要減一,北京西到保定東、石家莊、鄭州、武漢、長沙、廣州、虎門等 15 個站臺的商品庫存也要減1,保定東到石家莊、鄭州、武漢、長沙、廣州、虎門、深圳北等 15 個站臺的商品庫存要減1……總計要減庫存的商品數是 16+15+14+…+1=120 個。

        想象一下,8 萬人舉著錢對你高喊:賣給我。你好不容易在錢堆里找到一只手,拿了他的錢,轉身找 120 個同事,告訴他們減庫存,而這 120 個同事也和你一樣被 8 萬人圍著;也和你一樣,每賣出一個商品要找幾十個人減庫存……這就是 12306 動態庫存的變態之處。比你平時買東西的任何網站的庫存機制都復雜幾十上百倍。

        再說一下搶票插件,防機器人搶票,也不是加個圖片驗證碼那么簡單。驗證碼設置得復雜一點吧,人們要噴:這只是便宜大學生和辦公室白領,農民工連 26 個字母都認不齊,怎么搞?搞動畫驗證碼吧,也有人噴:視力不好的人怎么辦?最后驗證碼搞得太簡單了,皆大歡喜了,其實最高興的是開發搶票插件的公司。

        以上討論只是把 12306 當成和淘寶一樣沒有歷史包袱從零起步的交易系統,實際上,它不是,它后面的票池,還有電話售票、火車站售票、代售點售票等多個傳統渠道要服務。除了客運服務,12306 還有全國最大(很可能也是全球最大)的大宗物資貨運系統。

        架空政策(包括定價政策、警方打擊黃牛政策、身份驗證政策)談技術,是不可能解決春運搶票困局的,要想讓春運的時候每個人在 12306 搶票都毫無擁擠感(但不一定能搶到票,鐵路運力擺在那),那就是逼著 12306 買一大堆服務器對付春運,春運過去后,成為跟 amazon 一樣牛逼的云計算服務商。和逼北京修一條 10 車道的高速公路去八達嶺長城一個道理。

        目前的 12306 技術上是還有問題,比如,搶票高峰,輸入個身份證號和圖片驗證碼都卡得要死(本人親測),服務器端繁忙,你瀏覽器端卡什么呀?

        但人家在進步。相信 2015 年春運的時候,技術已經不再是一票難求的主要問題。在鐵路運力不可能神速增加的情況下,要做到春運更公平地買票,需要靠政策調整。

來自: 投資界
                    <span id="shareA4" class="fl">                  
                        </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!