看到有余票下單卻余票不足,是太慢?
2015年11月29日13:23 http://www.zhenmeidance.com
搶票開始了,很多用戶被提示搞得懊惱,心情若過山車般起落。特別是這樣一組提示:
1、余票不足!
2、沒有足夠的票!
3、目前排隊人數(shù)已經(jīng)超過余票張數(shù),請您選擇其他席別或車次。
明明是看到余票查詢結(jié)果里有幾張,甚至上百張票,一下單就這提示,你說氣人不?出提示了,立即再回過頭去刷新余票,依然顯示余票一張未少,這是鬧哪樣,逗人玩兒呢?
帶著這些問題,小編和技術(shù)做了一個討論,結(jié)果是:這完全是12306一種不得已而為之的用戶體驗讓步技術(shù)方案,導(dǎo)致這一讓步的原因則是www.12306.cn的搶票訪問壓力。應(yīng)對瞬間巨大的訪問壓力,12306網(wǎng)站采用了如下2種技術(shù):
1、購買大量的CDN服務(wù)器,進行余票數(shù)據(jù)緩存分發(fā);
2、下單過程采用排隊分配車票機制。
余票數(shù)據(jù)通過CDN服務(wù)緩存后,就不是分配票服務(wù)器的實時數(shù)據(jù)了。余票信息采用緩存分發(fā),主要是根據(jù)普通用戶購票的行為來的,普通用戶大多是查過來看過去地比較,最后才決定下單購買,也有用戶比較了一通,最后甚至并不購買。這樣就導(dǎo)致查詢余票(下行)接口的訪問是下單接口訪問的幾十倍,甚至幾百倍。給查看的余票數(shù)據(jù)就被專門分離出來,只要“應(yīng)付”一下大多數(shù)人看看的需要即可,真正需要購票的用戶,會提交訂單申請,再實時分配。
緩存也是動態(tài)的,當一個用戶發(fā)起查詢余票的網(wǎng)絡(luò)請求時,域名服務(wù)器會根據(jù)網(wǎng)絡(luò)就近原則分配一個實際的CDN節(jié)點給用戶。CDN根據(jù)查詢條件查看自己的緩存是否有沒過期的數(shù)據(jù),若存在就立即返回給用戶,不存在才請求分配票服務(wù)器的實時余票信息。一個CDN節(jié)點通常是同區(qū)域的很多人同時使用,因此緩存也是共享的。即便你之前未訪問過,也可能其他用戶請求過同樣條件的余票信息,因此數(shù)據(jù)也是舊的。這個緩存時間具體是多少?這個就只能是12306的運維人員能說清了。分離出來的緩存數(shù)據(jù)已經(jīng)能足夠快反應(yīng)用戶請求了,為了防止無謂(相同數(shù)據(jù))的網(wǎng)絡(luò)傳輸,余票接口還限制了刷新時間間隔。
搶票時大量的用戶查詢到了余票,同時迅速提交訂單(上行),12306技術(shù)人員發(fā)現(xiàn)即便分離緩存了余票信息,下單接口還是面臨巨大的并發(fā)壓力,導(dǎo)致系統(tǒng)擁堵僵死。這時,有聰明人就把現(xiàn)實中的排隊邏輯運用在了分配車票這件事上。首先,迅速大量地收下來大家的購票請求,同時按照先后次序排隊;另一方面,用一系列算法來給大家的請求慢慢分配票,比如,60歲以上的先分配下鋪等等。
搶票過程講究的是盡快查詢到余票后,盡快提交訂單,不要浪費無謂的時間而耽誤成功購票。買火車票APP首先讓你準備好訂單需要的車次、坐席,以及購票人數(shù)據(jù),在遵守CDN服務(wù)器的規(guī)則下查詢余票,查到余票后立即申請訂單,隨即把下單驗證碼交給熟練的客服人員用電腦鼠標輸入,然后立即提交訂單。整個過程一氣呵成,在穩(wěn)定的基礎(chǔ)上追求速度的極致,當然,網(wǎng)絡(luò)網(wǎng)速,以及不可預(yù)知的緩存對查到余票的影響也是導(dǎo)致失敗的一些重要原因。在條件一定的情況下,其實不用太刻意責怪自己的搶票太慢,你已經(jīng)比那些不借助任何工具軟件的搶票人要快很多了。
當然,當出現(xiàn)文章開頭說的3種提示時,表示本次票庫的票已經(jīng)分配完了,不用抓狂地再次立即狂點[下單]或[監(jiān)控買票],否則只能增加自己的懊惱情緒!你可以重新定義托管任務(wù)為“代下訂單”,靜候有人退票、限售解禁等購票機會。
更多參考閱讀:
2016春運搶票,需要知道的幾點
春運搶票操作方法