1. 程式人生 > >12306的碼農沒有你想的那麼弱

12306的碼農沒有你想的那麼弱

2306首秀被罵的狗血噴頭後鐵道部找來IBM、阿里巴巴等大企業要解決方案,給出的條件是資金管夠但是問題得解決。幾大企業最後都拒絕了。12306開始自己嘗試解決問題。他們發現市面上可以買到的成套解決方案都不足以應付春運購票負載,所以只能自己改進已有的資料庫(注:其實是改用VMware SQLFire/GemFire,這裡我之前理解錯誤)。以前12306用的是小型機,發現效能嚴重不足,遂改用x86系統+linux平臺(原平臺為HP Superdome小型機,UNIX系統,Sybase ASE資料庫)。最後他們的核心繫統用了十幾個節點(現在應該是17節點)的多路Xeon E7(具體幾路待考),每個節點配1TB記憶體,資料庫全部在記憶體中執行。2013年春運,12306系統峰值負載11萬tps,與2012年淘寶雙11活動峰值負載相當,新的系統基本經受住了考驗。

補充:以上內容是我在2013年7月得知的資訊,彼時沒有任何公開來源提到過12306新系統的技術細節。甚至,當時局外人沒人知道12306已經在2012年開始做了技術改造。直到數日之前,鐵總首次向媒體公開了技術改造的詳情:分散式叢集記憶體資料技術引領12306技術革命。這篇文章給出的細節,與我之前看到的內容完全一致。由此我可以確信資訊來源是此次技術升級的核心人士。

另外,關於第三方合作對方給出的資訊是IBM、Oracle、Sybase全部不能滿足要求,主要是這些廠商的方案部署以後,要升級時不能做到不停機靈活擴充套件。也就是說,IBM沒有做到是他們技術不足“搞不定”。阿里巴巴參與了改造,負責了排隊系統。此外,雖然後端經受住了壓力,前端卻如大家所看到的那樣還是頻頻卡死。到底卡死的原因是前端水平太低還是訪問壓力太大,暫時沒有可靠的資訊供判斷。

淘寶的問題是其系統架構是分散度較高的,各個訂單之間關聯度不大;而12306每出一張票都要對全線路做資料更新(因為一條線路存在多個站點),因此係統負載相較淘寶來說集中很多,直接搬淘寶的方案也無法解決問題。淘寶的應用型別決定了阿里巴巴可以通過部署大量的伺服器來分散壓力,但12306就不行。其實他們的核心繫統的硬體成本不過數百萬,不是他們不想採購更多伺服器,而是買更多的伺服器也沒什麼用途。最後,在經過軟體層面的優化之後,12306的瓶頸其實是核心節點的CPU、記憶體效能。但是這個效能的提升不是朝夕的事情,而是受限於摩爾定律,基本上每兩年才能翻一倍多些。(這段話是我自己的分析,不過現在12306的後端資料庫系統應付現有需求已經夠用了)

補充:關於座位實時複用,我看到的資訊明確表明12306出票時,每出一張區間票都要實時調整該線路其他受影響區間段的餘票數量,且這是很大的壓力來源;另外,對方表示所使用的GemFire資料庫與簡單的memcache/redis資料緩衝不同,有著本質區別。

==========================

然後我說點對鐵路系統購票困難現象的看法:

一種商品只要出現供不應求現象,那麼結果只有兩種:大家排隊購買;出現黑市,變相提高商品的流通價格並抑制需求。

12306這個事情,就是標準的限價商品供不應求之後出現排隊與黑市現象的例子。因為供不應求,所以有了黃牛、搶票軟體與秒殺。如果供應充足,一個車次直到發車前都有一兩張餘票,那麼黃牛、搶票就毫無存在價值,旅客也用不著守在電腦前和其他人比拼手速和網速以及電腦效能網路效能了。

現在供應不足的前提下,12306就算把系統做的效能再高,也只是會加快熱門車次票務秒殺的速度而已——而這更會刺激搶票軟體,大家為了在更短的時間裡成功搶到佇列名額就會不斷提升自己的搶票效能。打個比方說就是一個店門前排隊,消費者為了增加買到商品的概率去僱人代排,每個消費者都僱了好多人,造成店門口的通道擁擠不堪。為了減緩擁堵,商家不斷拓寬通道,但每次一拓寬消費者們就會增加僱傭的排隊勞力把新增的通道空間佔滿,形成惡性迴圈。這樣下去,只要還存在供不應求的現象,這種迴圈就不會有終止的時候。也就是說,12306的問題主要不是出在網站本身。

那麼怎樣解決供應不足的問題?這麼多年來鐵路不斷升級運力修建新線,已經建成全球最龐大的鐵路運輸系統,可是到了春運還是隻能勉強應付。從這個角度來說鐵路部門在供應不足的問題上也不該承擔太大責任,他們已經做得很不錯了。

那麼問題的根源就出在不斷增加的需求上了。為什麼我國鐵路系統需要承擔如此龐大的客運流量需求?很顯然,是因為全國範圍的人口流動。大量務工上學人員過節要返鄉,節後回駐地,這個剛性需求是合理的。可是為什麼他們必須要到外地去打工上學?為什麼數以億計的人員要遠離家鄉去謀生求學?

最後我們會發現,區域發展不平衡才是罪魁禍首。正因為多少人在家鄉無法得到足夠的機會與資源,他們必須到發達地區奮鬥和實現自己的價值。只要這種不平衡現象還在繼續,每年春節前後就不可避免地出現大批人員全國範圍流動的情況,就不可避免地出現運輸能力不足的尷尬。改進12306也好,增加鐵路網投資也好,最終都只是治標不治本。如果這個社會不去直面根本問題,那麼這些表象的癥結永無解開的時候。

說起來,有幾個人願意背井離鄉呢?

=============================================

然後這個問題爭了幾天,我實在忍不住要吐槽一下了:

12306這個事情,網上有多少網友從一開始就獻計獻策了,也有不少網友提供了很不錯的建議。但不得不說,很多網友在提建議時完全就是一種居高臨下、自以為是的態度,上來就先認定需求簡單可以輕鬆應付,隨便有點經驗的工程師就能搞定,12306出問題全怪體制太爛,國企效率低下,一幫人光拿錢不做事,技術水平太低……

淘寶2013年雙11活動,峰值流量是一秒鐘完成1.3萬筆訂單。12306在2014年1月6日全天網路出票400萬張。看起來雙11流量完爆12306是吧?等等!別忘了12306這400萬張票可不是全天悠悠閒閒平均地賣出去的,而是分成10個時段集中被搶走的。每個時段開始放票後數分鐘之內大部分票就已經被搶光了。以每個時段40萬票,峰值持續三分鐘估算,高峰期一分鐘出票在10萬張以上毫不誇張。誠然,一分鐘10萬訂單還比不上淘寶2013雙11,但別忘了一年以前阿里巴巴也只是達到了一分鐘15萬訂單的水平而已(並且在高峰期一樣卡爆)。而且一分鐘10萬出票還滿足不了需求的,以旅客購票的熱情來看,達到一分鐘50萬票都不一定能讓所有旅客滿意。

淘寶在2012年雙11時已經是業界頂尖水平了,其軟硬體技術皆為自主研發,既便如此面對一分鐘十幾萬的訂單量都會卡死。請問,覺得12306“需求簡單,問題可以輕鬆解決”的,是不是水平已經高到了阿里巴巴都要請你們去領導整個技術團隊的級別呢?是不是你們的方案可以輕鬆應付每分鐘數十萬筆訂單,達到全球一流水平了?

淘寶面臨的需求是業界從未有過的,所以淘寶的路很艱難。12306面臨的需求是其他人遇到過的麼?全世界哪個國家、哪種客運票務系統敢說自己的負載達到12306三分之一的水平?面對空前龐大的壓力,諸位“技術高手”只是憑著自己一點程式設計師的經驗,在電腦前一個人思考上一會兒就給出個“簡單、實用、省錢、輕鬆應付”的解決方案——你們知不知道“自大”這兩個字怎麼寫啊?

作為局外人,本來就難以瞭解鐵路售票系統內部的業務邏輯。想出建議可以,那麼是不是先收集些資訊,瞭解下背景?是不是先拉出一份需求清單來,把客戶的想法搞明白搞清楚了,然後再考慮技術實現?能不能不要上來就想著技術上怎麼方便怎麼做,把客戶需求隨意地簡化?好多人提的方案在票務供應不足的情況下直接就超售了,難道你要讓旅客前一分鐘還為訂到票高興,下一分鐘對著“您的票被取消”的提示破口大罵麼?或者訂票延遲確認——知不知道旅客看到選擇的車次沒能買到票後會做什麼?馬上去看其他車次有沒有票啊!你延遲確認幾分鐘,然後對排隊的賬戶做抽籤,多少旅客會覺得自己被耽誤了啊!旅客的要求就是速度越快越好,最好是下訂單後一秒鐘出結果才安心哩。這還僅僅是簡單想一下就能知道的問題,局外人不瞭解或不能輕易想到的問題又有多少?諸位高談闊論時,有沒有虛心地去找找內部人士瞭解或者搜尋類似的票務系統的研究論文?真覺得自己的頭腦聰明絕頂,連背景調查都不做就可以輕鬆把握所有細節?還有,你們想出來的方案做沒做過實驗啊?考慮沒考慮過硬體適配性啊?你們瞭解現在市面上能買到的硬體系統,什麼樣級別的能滿足可靠性、效能和可擴充套件性、可維護性的需求麼?你們在多路伺服器平臺上驗證過你們的分散式資料庫構想麼?哦原來你們什麼都沒做過,怕是連多節點叢集互聯該用什麼連線方式都不知道,你們拍下腦瓜,一句“那些問題都好解決”就完事兒了?就算你們自己沒做過,找找類似的案例會累死麼?研究下別人做過的經驗就不夠高貴冷豔麼?就貶低自己技術水平了麼?連類似的案例研究都沒有,隨口就是別人做得到我做得到,真覺得自己寫過幾行程式碼就多麼偉大了麼?

還有一些人,看說IBM沒做就一口認定是12306故意排擠IBM,認定IBM解決這問題肯定沒壓力。好嘛,IBM什麼時候做過如此規模的票務系統了?你細節什麼都不知就預設結論了?為啥淘寶當年沒選擇IBM作為方案提供商而是自主研發?IBM的大資料業務主要集中在金融領域,這不代表它在其他領域就樣樣精通好不好?它能拿出的方案無非是Power7小型機平臺,Power7在資料庫效能上又比Xeon E7強多點?然後Power7系統賣多少錢瞭解麼?後續維護難度多大瞭解麼?把適合銀行金融行業的平臺放到12306來真的合適麼?說起來,不就是因為“12306”和“IBM”這倆名字放一起,諸位內心裡首先就給前者打了負分對後者仰視麼?要是把“12306”換成“nasdaq”,那結論就又是一回事兒了——哦正好nasdaq沒用IBM方案,可見nasdaq是排擠IBM內部人賺黑心錢是吧?不過2013年工商銀行系統升級故障,應該是和方案提供商IBM無關的,肯定是國企的體制問題無誤!

評價一個事物,首先不是瞭解背景、研究問題產生的原因,首先是看被評價者處於什麼立場,打著什麼標籤。如果是“敵對陣營”那就毫不猶豫地踩上一腳再說話,接下來就算研究也只研究“它的錯誤在哪兒”,不考慮“它也有對的可能性”。在12306這個問題上就是:12306是國企,是鐵總下屬機構,所以它出了問題一定是自身原因。票務系統做不好一定是鐵路方面不懂技術,把該用來請大企業做方案的錢自己貪掉了,一定不可能是大企業都沒信心解決這問題。旅客普遍使用搶票軟體也是12306的責任,不是供應不足的原因……

最後呢?12306還是做到了全球最強的客運票務系統。一貫被認為是因循守舊的國企,在選擇技術方案時放棄沿用多年的小型機/UNIX平臺去擁抱業界還是新鮮事物的基於x86/linux的大規模分佈記憶體資料庫系統,承受住了堪比2012年淘寶雙11的壓力。在這個領域,12306可以自豪地說自己是做的最好的案例。它還在卡,還是偶爾崩潰,頁面還是難看,可是這些遲早會改進。這個過程中也還是會有冷嘲熱諷,還是會有所謂的大牛指點江山,但最終解決春運高峰期一天數百萬張秒殺售票的,還是12306自己。

所以,走自己的路,讓別人去說吧。

相關推薦

12306沒有那麼

2306首秀被罵的狗血噴頭後鐵道部找來IBM、阿里巴巴等大企業要解決方案,給出的條件是資金管夠但是問題得解決。幾大企業最後都拒絕了。12306開始自己嘗試解決問題。他們發現市面上可以買到的成套解決方案都不足以應付春運購票負載,所以只能自己改進已有的資料庫(注:其實是改用V

乾貨 | 機器學習沒有那麼複雜

作者 | Anish Phadnis 翻譯 | Mika 本文為 CDA 資料分析師原創作品,轉載需授權 人腦是最神奇的。你知道我更感興趣的是什麼嗎?是我們的學習能力。我們如何能夠適應並學習全新的技能,然後應用到日常生活之中呢? 我有一個6歲的弟弟,我看著他從懵懵懂懂的小嬰兒逐

【數量技術宅|金融資料系列分享】套利策略的價差序列計算,恐怕沒有那麼簡單

更多精彩內容,歡迎關注公眾號:數量技術宅。想要獲取本期分享的完整策略程式碼,請加技術宅微信:sljsz01 價差計算的“誤區” 我們在測試兩個或多個金融資產相互運算產生的策略訊號時,免不了需要涉及將不同的價格時間序列,按照時間軸進行對齊,套利策略就是其中之一。然而,大部分介紹套利策略、統計套利類的文章,對

掃描二維,有要!

cnblogs mage 掃描 image http blog img ima jpg 掃描二維碼,有你想要!

把機器手臂變成純愛AI戀人,制造開源男友的女到底在什麽?

AI男友關於那些擁有AI的“羞羞機器人”,已經有很多相關討論了。但在很多人,尤其是女性眼中,AI×××機器人只不過是男權社會的又一款典型產物,只知道滿足生理上的貪欲,簡直是浪費了AI的能力。抱著這樣的心態,來自紐約的設計師+藝術家(同時也是一位開發者)劉菲研發了一套名為Gabriel2052的開源的AI男友系

幹貨 | 機器學習沒有的那麽復雜

強化學習 語言 bit 需要 是的 分析師 處理 自己 而且 作者 | Anish Phadnis翻譯 | Mika本文為 CDA 數據分析師原創作品,轉載需授權 人腦是最神奇的。你知道我更感興趣的是什麽嗎?是我們的學習能力。我們如何能夠適應並學習全新的技能,然後應

VS Code 1.29 釋出,眾多新功能有沒有要的?

Visual Studio Code 1.29 釋出了,此版本主要更新內容包括:   Multiline search - 使用正則表示式多行表示式搜尋檔案。 File icons in IntelliSense - IntelliSense

和阿里P8架構師的區別只存在於技術上?的覺悟呢?

  今天這篇文章,我們不從這些客觀因素上去分析,就如題,你沒有架構師的思想覺悟,那麼你只能做一輩子的碼農,我結合自己的一些經歷和經驗,以及從身邊優秀的人身上學習到的經驗,從主觀上去總結幾點,與所有人共勉,希望能夠讀完。 文末有免費的架構資料放送,有需要的可以去領取。歡

阿里:不帶團隊了,幾個月才寫幾十行程式碼!網友:思維

做為一名程式設計師,大多數都有著自己的規劃,比如幾年之後由一線碼農能晉升到技術管理者的職位,或者所能成為一名架構師等,這也是最普遍的兩種規劃吧,可是有沒有人仔細想過,成為技術管理者後,與以前的工作有沒有什麼變化,自己需要做一些哪些行動上的改變,或者在思維上需要有哪些變化,怎麼才能成為一名優秀的技術管

神級python爬取並儲存百度雲資源,懂得~

網路爬蟲又被稱為網路機器人,網頁蜘蛛,在FOAF社群中間稱為網頁追逐者。是按照一定的規則,自動抓取資訊的程式或者指令碼。這篇文章主要介紹Python爬蟲框實戰之抓取並儲存百度雲資源!免費給廣大python愛好者提供資源!)   尋找並分析百度雲的轉存api 首先你得有一個

阿里:不與同事一起吃飯算孤僻麼?沒啥聊,網友:我也是!

大多數情況下,做技術的人並不擅長交際,在公司全體的年會上就很容易看出這一點,如果一張大圓桌上,有技術和非技術的人都在,經過一次吃飯就大概知道誰是技術,誰不是技術了,一般低頭玩手機,說話不多的九成就應該是程式設計師了,非常愛說,能與周圍人都聊一遍的可能就是市場或者

學英語:補充一些英語學習素材

前幾天寫了《老碼農教你學英語》之後,有一些朋友讓我推薦一些各個階段學習英語的素材。好吧,這次廢話少說,下面就是我推薦的素材,供大家參考: 1. 白話書 《Steve Jobs》 京東 《The Mythical Man-Month》 京東 《More Joel

《老學英語》讀者的經驗分享

最近又有一些同學私信我諮詢有關英語學習的問題,大部分都是看了我寫的《老碼農教你學英語》一文,激發了學習英語的熱情,但又覺得自己起點比較低,不知道從何處入手。 我和他們討論的過程中想起去年年底的時候,有三位讀者都寫了很棒的英語學習總結,回答這些疑問實在太合適了。他們當

作為如何掙錢-記2018年總結

利用 容易 找不到 打火機 oot 其他 技術人 入口 通信 01.空白的1年 整整1年多沒有更新過博客園的博客,中途有幾次因為博客園的用戶體系確實蠻誇張,幾次ip異常之後,賬號就封禁不給登錄了,然後找回了幾次,最後找到原因,原來是把我的登錄名後面加了個

iOS 二維掃描(要的都在這裡了)

#pragma mark - imageToTransparent void ProviderReleaseData (void *info, const void *data, size_t size){ free((void*)data); } + (UIImage*)imageBlackToTransp

退休老提醒!學習Java,這些知識要牢記,能讓少走彎路!

amp 鏈表 oss 重復 資料 學java 基本功 刪除 -o 現在的java在編程界基礎已經根深蒂固了,隨之帶來的影響就是有大量的崗位,大量的工作方向,雖然現在很多的新興語言勢頭都非常的猛烈,但是這並不影響java依然體量最大的編程語言,而且絲毫也看不出這門語言有任何衰

讀書」:我們並沒有自己想象的那麼理性

作為碼農/程式設計師,我們經常認為自己是非常理性的。其實不僅是我們自己這麼認為,甚至我們身邊的朋友們在談到對我們的評價時,在聊到對程式設計師這個職業的印象時,都會普遍的認為這是一個非常理性、思維邏輯非常清晰的群體。但事實真的是這樣嗎? 我曾經也非常自信於自己的理性。但最近看了一本大塊頭書《思考,快與慢

矽谷到底什麽樣?美劇《矽谷》為揭秘生活

mark erb 電視節目 創始人 try who man 內容 ews Silicon Valley, the heart of the American tech industry, has given Hollywood endless ideas for mo

會選取去北上廣大城市做?(之前推過)

alt 新的 夢想 找不到 鏈接 質量 交通 medium 人員 “北上廣”一直是年青人心中的結。有人為了夢想,不惜千裏走單騎,成為“北漂”、“南漂”一族;有人受不了“北上廣”的高房價、擁堵和空氣汙染,開始逃離北上廣;還有人在選擇逃離北上廣之後,因各種無奈又逃回了北上廣。 

寫給立誌做的大學生(蘑菇街都掛了,還要面騰訊? 我去,我一定要去)

鍵盤 前言 docker 二本 征求意見 小時 形勢 我沒 妹子 先簡單介紹一下我自己,我是一所普通大學的本科生,大學錄取時的專業是非計算機系的,在大一下學期意識到自己喜歡敲代碼以後,就提交了轉專業申請。大二起開始在計算機系學習。大三時(2015年4月)拿到了騰訊暑期實習的