淺論12306網上購票系統的設計
妳對他不好的印象是來自於12306剛出來那年,搶火車票導致各種崩潰,加載不出來,特別難辨認的驗證碼,還要安裝什麽安全的證書。
後來幾年12306做了重大的底層技術變革,但是網頁UI並沒有換(關於UI這個東西,更換UI對用戶來說是有學習代價的,尤其12306是壹款面相全國人民的網頁和app,UI是不能隨便換的)
所以妳就會理所當然的認為現在的12306還是以前的12306,非也,現在的12306每天能扛得住30億次查詢請求。
通過官方的網頁、鐵路12306 app、攜程、去哪兒、超級火車票,還有各種民間程序員寫的搶票工具等等,包括各種瀏覽器插件不停的刷新搶票。還有人嫌棄自己不是下鋪,也要刷刷刷,改成滿意的為止。
有壹張火車票被退了,其實這張票只是壹個區間,比如西安始發,到北京終點這張票被退了,這樣按道理來說中間任意經停站到任意經停站都可以買票,等等,會有很多意想不到的需求,包含各種奇葩的組合
綜上所述,其實12306的業務邏輯遠比淘寶這樣的電商要復雜很多
需求分析、系統設計不僅要考慮到全國各省的情況,還要考慮窗口買票,電話買票不受互聯網購票的影響。
畢竟在窗口查出壹張票,在用戶決定買它之前,這張票不可能被互聯網購票的人給搶了。也就是說互聯網購票在票源稀缺的情況下,和窗口電話購票相比是沒有優勢的。
互聯網購票之所以會失去優勢,主要原因就是12306購票系統為了支持每天大量的查詢請求,把票數的緩存時間調整的極長,筆者目測可能5分鐘都不止。
簡單說就是現在西安去北京的票是0張,突然有人退了票,這時2個人,壹個窗口訂票,壹個互聯網訂票。
互聯網訂票的人刷新發現還是0張,當然他也是不停地刷新,但是得到的是舊的緩存信息
窗口訂票的人花了5分鐘時間排隊,等到他的時候,互聯網訂票的人刷新出來了壹張余票,他點擊購買,選乘坐人,提交訂單的時候,窗口排隊的人也在售票員那裏查到了壹張余票,這時候互聯網訂票者提交的訂單會失敗,窗口訂票的人會成功買到這張寶貴的票源。
然而這個故事還沒有結束。在窗口購票的那個人開心的拿著自己的票走了之後,互聯網購票的人回到票源查詢界面刷新發現還是有壹張余票,他看到的還是舊的緩存,點擊票源會收到不是最新票源的提示,直到5分鐘之後,票源會再次變為0。
簡單的來說,12606就是這樣設計的,從此春運再多人搶票也不會導致網站直接崩潰,大不了就是余票為0嘍。
參考資料:
/art/201401/427406.htm