每年的高考、國(guó)考、春運(yùn),被稱為中國(guó)的“三大全民參與活動(dòng)”。其中,尤以春運(yùn)涉及的范圍最廣,關(guān)注最多。
時(shí)至年關(guān),春運(yùn)出行必備的12306,再次成為人們使用頻率最高的APP之一。從春運(yùn)車票開售的那一刻開始,在外打拼的人們夜以繼日地點(diǎn)擊著刷新,期待訂票成功那一刻的到來(lái)。
但是,熱門方向、熱門時(shí)段、熱門車次的需求量巨大,難以滿足所有人的購(gòu)票需求,延伸出了不少人對(duì)于12306的疑問——為什么我就搶不到票?在前些年12306多次出現(xiàn)系統(tǒng)不穩(wěn)定的情況時(shí),中國(guó)鐵路總公司(現(xiàn)為國(guó)鐵集團(tuán))備受關(guān)注。
其實(shí),12306系統(tǒng)的復(fù)雜性遠(yuǎn)超外界想象——在SKU(商品存貨)數(shù)量計(jì)算難度遠(yuǎn)大于淘寶等電商的情況下,還要每天完成超過1500萬(wàn)個(gè)訂單,并承受近1500億次的點(diǎn)擊。
“天天‘雙11?!笔?2306內(nèi)部人士自嘲的“口頭禪”,但也是現(xiàn)實(shí)的寫照。
春運(yùn)首日(1月10日),《中國(guó)經(jīng)濟(jì)周刊》記者走進(jìn)了鐵科院12306全路客票系統(tǒng)監(jiān)控中心,對(duì)12306的“秘密”一探究竟。
12306系統(tǒng)到底難在哪兒?
在提出疑問的網(wǎng)友中,不乏軟件工程師,甚至還有人表示,只要40臺(tái)服務(wù)器、2個(gè)架構(gòu)師、4個(gè)程序員,就足以開發(fā)出和12306類似的網(wǎng)上購(gòu)票系統(tǒng)。
但實(shí)際上,12306的庫(kù)存復(fù)雜性比淘寶、京東等電商高很多倍,運(yùn)算量也大得多,傳統(tǒng)的分布式數(shù)據(jù)庫(kù)、緩存、負(fù)載均衡技術(shù),并不能滿足12306的需求。
一位淘寶前資深工程師曾對(duì)此有過非常詳細(xì)的分析。
在電商平臺(tái)上,每個(gè)商品對(duì)應(yīng)一個(gè)SKU,有人購(gòu)買1件,庫(kù)存就減1。而12306的特殊性在于,火車票是一種動(dòng)態(tài)的SKU,計(jì)算起來(lái)的數(shù)據(jù)量可能是普通電商產(chǎn)品的數(shù)百倍。
以北京西到深圳福田的G71次高鐵為例,共有17個(gè)站、3種座位。表面看起來(lái)是3個(gè)SKU,即G71商務(wù)座、一等座、二等座,但實(shí)際上,G71次高鐵有408個(gè)SKU。
原因很簡(jiǎn)單:從北京西站始發(fā)的車票,后面有16個(gè)車站,即16種不同的車票;涿州東站是第二站,有15種不同的車票,以此類推,單以上下車的站來(lái)計(jì)算,G71次高鐵就會(huì)有16+15……+2+1=136個(gè)SKU,而每種票對(duì)應(yīng)3種座位,一共是408個(gè)商品。
也就是說(shuō),如果旅客購(gòu)買了一張北京西站到涿州東站的車票,G71次高鐵的SKU要減去16;而如果購(gòu)買的是北京西站到深圳福田站的車票,則要減去136個(gè)SKU。
以上只是SKU的減值。若旅客購(gòu)買的是短途票,如北京西站到涿州東站,則在SKU減去16的同時(shí),還要增加涿州東站到之后各站、之后各站相互間的SKU,即增加120個(gè)SKU。
若再疊加當(dāng)前的選座功能(A、B、C、D、F),計(jì)算數(shù)量可能還要再翻倍。而這些計(jì)算數(shù)據(jù),需要在大量購(gòu)票者搶票的數(shù)秒,甚至數(shù)毫秒內(nèi)完成。
對(duì)于上述計(jì)算方法,鐵科院12306技術(shù)部技術(shù)總監(jiān)楊立鵬在接受《中國(guó)經(jīng)濟(jì)周刊》記者采訪時(shí)說(shuō),車票在出售時(shí)會(huì)引發(fā)非常復(fù)雜的連鎖的變化,是鐵路業(yè)內(nèi)獨(dú)有的情況。因此,12306在設(shè)計(jì)時(shí),首先是要考慮到鐵路部門的業(yè)務(wù)需求,“鐵路要支持沿途不同的旅客出行。尤其是一些停站特別多的車次,有的車要運(yùn)行70多個(gè)小時(shí),一列車可能正常是拉1000多個(gè)旅客,但實(shí)際上不同階段、不同區(qū)間的可發(fā)售的車票,要遠(yuǎn)超過這個(gè)數(shù)值。”
楊立鵬介紹,車票售出后數(shù)據(jù)的變化,對(duì)12306系統(tǒng)的壓力考驗(yàn)非常大,鐵路部門通過采取數(shù)據(jù)的分析預(yù)測(cè),根據(jù)不同的運(yùn)力需求和運(yùn)營(yíng)安排,提前安排相應(yīng)車票的發(fā)售等方式,緩解壓力?!拌F路部門從1996年到現(xiàn)在,通過20多年的技術(shù)積累,采取了一些獨(dú)有的技術(shù)方案,解決了這個(gè)問題?!?/p>
例如,將車票分時(shí)段銷售,就大大降低了同一時(shí)段的數(shù)據(jù)壓力。12306的放票時(shí)間,已從最初的一天4個(gè)放票時(shí)間點(diǎn),增加到10個(gè),再到現(xiàn)在每天21個(gè)放票時(shí)間點(diǎn)。
作為全球交易量最大的實(shí)時(shí)票務(wù)系統(tǒng),中國(guó)鐵路客票系統(tǒng)平均一年售出30億張火車票,這些火車票首尾相接可以繞地球7圈。
鐵科院12306技術(shù)部副主任閻志遠(yuǎn)介紹,目前鐵路售票中,互聯(lián)網(wǎng)銷售占全渠道的80%以上,其中手機(jī)客戶端占互聯(lián)網(wǎng)售票的78%,網(wǎng)頁(yè)端占互聯(lián)網(wǎng)售票的22%。
在2020年春運(yùn)以來(lái)的發(fā)售量最高日1月3日,鐵路部門全渠道售出1637萬(wàn)張,其中網(wǎng)絡(luò)售票占比88%。
在車票絕大多數(shù)通過互聯(lián)網(wǎng)渠道售出的過程中,12306系統(tǒng)的穩(wěn)定運(yùn)行,是絕對(duì)的工作核心。
據(jù)鐵科院首席研究員、12306技術(shù)部主任單杏花介紹,2020年春運(yùn)期間,12306在高峰日網(wǎng)絡(luò)點(diǎn)擊量高達(dá)1495億次。
也就是說(shuō),12306在高峰日平均1秒就要承受170多萬(wàn)次點(diǎn)擊,大概相當(dāng)于每個(gè)中國(guó)人每天在12306上點(diǎn)擊了100次。
12306全路客票系統(tǒng)監(jiān)控中心監(jiān)控大屏。
鐵科院首席研究員、12306技術(shù)部主任單杏花介紹12306相關(guān)情況?!吨袊?guó)經(jīng)濟(jì)周刊》記者 周琦I 攝
12306面臨的流量壓力,可想而知。一名IT工程師在聽到《中國(guó)經(jīng)濟(jì)周刊》記者轉(zhuǎn)述的這組數(shù)據(jù)時(shí),表示自己很難想象,“即便是百度,也很難有這樣的點(diǎn)擊量,可以說(shuō)是一組天文數(shù)字?!?/p>
作為對(duì)比,2019年淘寶的訂單創(chuàng)建峰值,是54.4萬(wàn)筆/秒。Trustdata的數(shù)據(jù)顯示,淘寶APP 2019年“雙11”當(dāng)天的日活躍用戶為4.76億。
若以此計(jì)算,12306的最高訪問量,相當(dāng)于淘寶“雙11”當(dāng)天活躍用戶每人點(diǎn)擊超過300次。
對(duì)此,楊立鵬自嘲道,12306系統(tǒng)面臨的,基本上是“天天被秒殺、天天被搶購(gòu)、天天‘雙11”。
值得注意的是,如此高的點(diǎn)擊量中,風(fēng)險(xiǎn)請(qǐng)求的占比非常高。
1月10日上午,12306全路客票系統(tǒng)首次面向媒體開放。監(jiān)控屏幕顯示,截至當(dāng)日上午9點(diǎn),12306收到的風(fēng)險(xiǎn)請(qǐng)求訪問占比已達(dá)52%,每秒的風(fēng)險(xiǎn)請(qǐng)求高達(dá)82.12萬(wàn)次。不斷滾動(dòng)的風(fēng)險(xiǎn)攔截報(bào)警,則詳細(xì)記錄了風(fēng)險(xiǎn)請(qǐng)求的IP地址和來(lái)自的省份。
閻志遠(yuǎn)說(shuō),12306從2018年開始構(gòu)建風(fēng)控系統(tǒng),通過識(shí)別包括瀏覽器、IP在內(nèi)的一些異常行為予以攔截?!袄纾B每唾?gòu)票可能每次操作需要一秒鐘,而風(fēng)險(xiǎn)請(qǐng)求則可能達(dá)到毫秒級(jí),對(duì)這種異常請(qǐng)求就會(huì)被風(fēng)控系統(tǒng)攔截。當(dāng)然,具體的攔截中,我們還有更多的考慮方面和識(shí)別手段。”
在這些風(fēng)險(xiǎn)請(qǐng)求中,來(lái)自第三方搶票軟件的請(qǐng)求,占據(jù)不小的比例。
單杏花表示,其他網(wǎng)站提供的搶票服務(wù),對(duì)12306系統(tǒng)造成了一定影響,鐵路部門因此在風(fēng)控方面進(jìn)行了研發(fā),通過風(fēng)控系統(tǒng)對(duì)一些異常行為進(jìn)行攔截,來(lái)保證12306能夠運(yùn)行穩(wěn)定。“我們保障運(yùn)行穩(wěn)定的目的是什么?是為了讓正常的旅客正常查詢、正常下單、正常支付,更好保障售票的公平公正。避免出現(xiàn)一些加價(jià)、價(jià)高者得,避免出現(xiàn)一些退票、退手續(xù)費(fèi)情況,讓旅客受到損失。”
除了通過風(fēng)控系統(tǒng)防范,鐵路部門還打出了“組合拳”,通過“候補(bǔ)購(gòu)票”,讓刷票軟件存在的意義大打折扣。
“自2019年12月12日開售春運(yùn)車票以來(lái),鐵路12306售票系統(tǒng)候補(bǔ)購(gòu)票訂單兌現(xiàn)累計(jì)582.6萬(wàn)筆,車票723.7萬(wàn)張,兌現(xiàn)率達(dá)76.8%,減少了旅客反復(fù)查詢次數(shù)?!眴涡踊ㄕf(shuō)。
近年來(lái),12306上需要進(jìn)行“圖片識(shí)別”的請(qǐng)求已大大降低,也是得益于這套“組合拳”。
此外,云技術(shù)的運(yùn)用,也大大保證了12306系統(tǒng)運(yùn)行的穩(wěn)定性。
從2014年開始,12306把網(wǎng)站訪問量最大的查詢業(yè)務(wù)分擔(dān)到“云端”。2016年,12306進(jìn)一步擴(kuò)大了云端容量,幾乎所有查詢?cè)L問都在云端進(jìn)行。
楊立鵬接受《中國(guó)經(jīng)濟(jì)周刊》記者采訪時(shí)介紹,12306通過采用公有云和私有云相結(jié)合的模式,提高12306的數(shù)據(jù)處理能力?!霸谌粘G闆r下,國(guó)鐵集團(tuán)和鐵科院兩地各有一個(gè)數(shù)據(jù)中心,采用自有資源來(lái)提供售票服務(wù)。在節(jié)假日等高峰期,出于經(jīng)濟(jì)性等各方面的更考慮,采用公有、私有結(jié)合的混合云技術(shù)來(lái)提高服務(wù)能力?!?/p>
單杏花補(bǔ)充說(shuō),12306是一個(gè)彈性和擴(kuò)展的架構(gòu),核心數(shù)據(jù)只在核心部位,擴(kuò)展的功能則可以用一些外延的服務(wù)器,或者和公有云開展合作,“這些跟整個(gè)核心部位是不交織的,相互之間可以不影響?!?h3>正在研究:往返車票一起購(gòu)買
除了保障系統(tǒng)穩(wěn)定運(yùn)行,12306還通過大數(shù)據(jù)分析,為旅客們提供購(gòu)票便利。
據(jù)悉,通過大數(shù)據(jù)分析,鐵路部門可以提前預(yù)判一些熱門地區(qū)的需求,進(jìn)而在條件允許的情況下增加運(yùn)力,例如將8節(jié)編組的動(dòng)車組增加為16節(jié)編組的動(dòng)車組,或者開行臨客等。
單杏花介紹,2020年春運(yùn)車票發(fā)售以來(lái),截至1月9日,鐵路全渠道共發(fā)售車票4.12億張,其中預(yù)售春運(yùn)車票1.3億張。
她還說(shuō),春運(yùn)車票預(yù)售,也就是車票發(fā)售首日預(yù)售出的車票占比不足1/3,說(shuō)明很多旅客并不著急,沒有在發(fā)售的第一天就去搶票。熱門地區(qū)、熱門方向、高峰時(shí)段列車票源緊張,但部分車次還有剩余車票?!斑@些剩余的車票大多是時(shí)間點(diǎn)比較差,或者席位比較差,如站票等。從大數(shù)據(jù)可以明顯看出,旅客出行已經(jīng)由‘走得了向‘走得好在轉(zhuǎn)變。”
大數(shù)據(jù)的便利性不止于此,為老人優(yōu)先配置下鋪、為兒童配置相鄰席位等,也需要12306系統(tǒng)的大數(shù)據(jù)支持。
單杏花對(duì)《中國(guó)經(jīng)濟(jì)周刊》記者說(shuō),12306上有購(gòu)票者的基本身份信息,系統(tǒng)若判斷訂單里面有老人,就會(huì)去為老人優(yōu)先尋找下鋪,“哪怕只有一張下鋪,就一定會(huì)給他找到?!?/p>
為兒童配置相鄰席位方面,考慮到家長(zhǎng)帶孩子,購(gòu)票時(shí)本身分為全價(jià)票和半價(jià)票兩種票種,可能會(huì)出現(xiàn)位置不相鄰、不好照看,甚至有時(shí)候出現(xiàn)在不同車廂這種問題,12306在2020年春運(yùn)期間進(jìn)行了優(yōu)化?!澳呐率菫榱司膺\(yùn)輸需要,票已經(jīng)賣散了,但是系統(tǒng)也會(huì)盡量將他們匹配在相鄰的位置,如果沒有相鄰的位置,優(yōu)先配置在同一個(gè)車廂?!彼f(shuō)。
值得注意的是,關(guān)于從大城市返往二三線城市的去程、返程同時(shí)購(gòu)票的問題,鐵路部門也在研究。
鐵路部門通過大數(shù)據(jù)分析,有不少乘客,在大城市返往二、三線城市的過程中,會(huì)出現(xiàn)買了去程票買不到回程票,或者只買到回程票沒買到去程票的問題。尤其是在春運(yùn)等節(jié)假日,問題更加突出。
“我們一直在分析這種規(guī)律,準(zhǔn)備展開研究,能否在出行時(shí)把去程和返程的需求一起考慮。尤其是在乘客已經(jīng)買了去程的情況下,是不是優(yōu)先配給返程?但是措施可能還得研究成熟之后再進(jìn)行研發(fā),再進(jìn)行一些評(píng)估才能上線,可能還需要一定的時(shí)間?!?/p>
責(zé)編:李慧敏??lihuimin@ceweekly.cn
美編:孟凡婷