12306網(wǎng)站,一夜間成為中國(guó)最大的電子商務(wù)網(wǎng)站的同時(shí),其不佳的用戶體驗(yàn)也引來了罵聲無數(shù)。相信經(jīng)過了一番口水的轟炸之后,鐵道部也在急于尋求系統(tǒng)優(yōu)化的最佳途徑。并且通過這么長(zhǎng)時(shí)間的運(yùn)行,系統(tǒng)的流量也已經(jīng)比較精確地掌握。

究竟如何才能讓12306網(wǎng)站提供良好的用戶體驗(yàn)?如何才能讓網(wǎng)上訂票不再是“天方夜譚”?此前,有不少人對(duì)12306網(wǎng)站的優(yōu)化提出了建議,但終究沒有一個(gè)完整的優(yōu)化方案。為此,本文將根據(jù)近期ChinaUnix上發(fā)起的討論【討論帖:http://bbs.chinaunix.net/thread-3663925-1-1.html】,從網(wǎng)站改進(jìn)的需求分析入手,整合網(wǎng)友的建議,從各個(gè)層面提出一個(gè)較為全面的優(yōu)化方案,以供參考。

1、系統(tǒng)優(yōu)化需求分析

優(yōu)化需求一:互聯(lián)網(wǎng)接入帶寬明顯不足,造成網(wǎng)絡(luò)擁塞。

優(yōu)化需求二:每秒幾千萬的并發(fā)量導(dǎo)致系統(tǒng)無法招架。日逾10億的訪問量,交易量最高達(dá)166萬筆,大大超出了之前預(yù)估的4億訪問量和100萬筆交易。

優(yōu)化需求三:數(shù)據(jù)一致性和安全性不足。采用明文通道“分發(fā)根證書”存有安全隱患,有多種數(shù)據(jù)不一致現(xiàn)象,有時(shí)能訪問到其他賬號(hào)的信息等問題(由于牽涉到票務(wù)系統(tǒng)的身份認(rèn)證,所以安全方面不容忽視)。

優(yōu)化需求四:12306未能在技術(shù)上有效預(yù)防自動(dòng)刷票軟件。

2、業(yè)務(wù)流程優(yōu)化:搖號(hào)買票惹非議?

在討論中,有不少網(wǎng)友提到要對(duì)業(yè)務(wù)流程進(jìn)行優(yōu)化。

網(wǎng)友sania9 建議通過抽取中簽的辦法進(jìn)行流程優(yōu)化。其建議如下:分段放票造成“秒殺”型的壓力,無形中創(chuàng)造了很多個(gè)高峰。在實(shí)名制的情況下,業(yè)務(wù)流程可以這樣:注冊(cè)后提前1個(gè)月(或更長(zhǎng)時(shí)間)提交行程信息,針對(duì)席位、日期分批多次抽取中簽,并降低退票者的中簽概率,分散購(gòu)票高峰。

但是筆者認(rèn)為,業(yè)務(wù)流程的優(yōu)化固然重要,但是如果賣票也要靠運(yùn)氣的話,這貌似有些讓人啼笑皆非。

也有網(wǎng)友建議去掉鎖定機(jī)制,以防出現(xiàn)票還沒有售完,但在火車站就是買不到票的情況。

也有網(wǎng)友認(rèn)為搖號(hào)總比這樣哄搶好,但要搖號(hào)的話,必須是第三方機(jī)構(gòu)負(fù)責(zé)搖號(hào)。

3、前端優(yōu)化:站點(diǎn)程序的紕漏被無限放大?

對(duì)于12306網(wǎng)站的頁(yè)面設(shè)計(jì),網(wǎng)友yanyangtian4502表示,最大的問題就是把CSS樣式嵌入在頁(yè)面中。這其實(shí)就加大了頁(yè)面的大小,消耗了帶寬。如果每個(gè)頁(yè)面大小70k,其中 這樣的css嵌入 假設(shè)是1k。因?yàn)槊看卧L問,瀏覽器需要下載頁(yè)面,那么每次都要去下載這多余的1k的css樣式,試想:上千萬的pv去訪問的時(shí)候,那么產(chǎn)生的流量就是 1k*100,000,000。也就說明:要多消耗服務(wù)器的這么多網(wǎng)絡(luò)帶寬!很要命,一點(diǎn)點(diǎn)的問題,就立刻被放大!

網(wǎng)友gotolinux 認(rèn)為,具體可以從頁(yè)面緩存、嵌套CSS與頁(yè)面框架分離、使用CDN等三個(gè)方面入手。“網(wǎng)站上有大量圖片,所以圖片、CSS、JS等頁(yè)面元素做好緩存是必須的;

網(wǎng)站上有大量的嵌套CSS,這個(gè)完全可以與頁(yè)面框架分離,緩解網(wǎng)站前端訪問壓力;

這些頁(yè)面元素可以根據(jù)不同城市的訪問量而使用CDN,使用CDN有個(gè)好處,部署快,穩(wěn)定,可靠性高。”

lltlk 還建議,“用戶登錄”可以對(duì)用戶進(jìn)行分區(qū),認(rèn)證模塊用內(nèi)存+文件的cache。用戶登錄時(shí)利用索引路由到分區(qū)的認(rèn)證模塊。session可以用專門的session server管理,而不是web app管理。

4、CDN及負(fù)載均衡系統(tǒng)

事實(shí)上,12306網(wǎng)站已經(jīng)上了CDN。有網(wǎng)友推薦,前端的負(fù)載均衡采用Nginx/HAProxy+Keepalived。

5、應(yīng)用部署:省級(jí)部署模式

網(wǎng)友chenyx認(rèn)為12306問題的根結(jié)在于沒有使用分布式處理。網(wǎng)友gotolinux建議,通過省級(jí)部署的方式可以分散系統(tǒng)的壓力。分別用二級(jí)域名來引導(dǎo)進(jìn)入不同地域進(jìn)行購(gòu)票。比如:廣東就用gd.12306.com,湖南就用hn.12306.com,把整個(gè)系統(tǒng)劃分為多個(gè)小系統(tǒng),并在后端集中。

但網(wǎng)友老男孩認(rèn)為,找?guī)讉€(gè)核心骨干的售票系統(tǒng)對(duì)接更好。按地域分域名思路很不錯(cuò),不過這個(gè)不同地點(diǎn)購(gòu)票可能難做,這個(gè)要和現(xiàn)有的不同地區(qū)的鐵路售票系統(tǒng)節(jié)點(diǎn)對(duì)接(資金太大),找?guī)讉€(gè)核心骨干的售票系統(tǒng)對(duì)接就好。此外,系統(tǒng)還需要使用分布式數(shù)據(jù)庫(kù)(如下圖所示)。

節(jié)后大整改!CU網(wǎng)友熱議12306網(wǎng)站改進(jìn)

6、數(shù)據(jù)庫(kù):NoSQL尚未成熟

12306的數(shù)據(jù)庫(kù)主要涉及兩方面:用戶信息和票務(wù)信息。這兩方面的數(shù)據(jù)必須進(jìn)行分離,既減輕系統(tǒng)負(fù)載,也加快系統(tǒng)響應(yīng)速度。

對(duì)數(shù)據(jù)流程進(jìn)行優(yōu)化,減少不必要的查詢。

對(duì)于日前吵得很火的NoSQL,大部分網(wǎng)友都認(rèn)為NoSQL技術(shù)目前在國(guó)內(nèi)尚未成熟,存在趕時(shí)髦的風(fēng)氣,對(duì)于實(shí)時(shí)性或許可以滿足,但是不能滿足數(shù)據(jù)一致性的要求,所以不推薦使用。

7、其他出路:打破票務(wù)壟斷

打破壟斷,同為票務(wù)分配,經(jīng)過十多年改革,航空客票體制打破壟斷,在與市場(chǎng)上的電商網(wǎng)站分享客票、信息資源的同時(shí),亦讓后者分擔(dān)相應(yīng)的流量壓力,成為票務(wù)分配的先行者。目前,鐵道部已經(jīng)啟動(dòng)了新一代客票系統(tǒng)的規(guī)劃和設(shè)計(jì),而下一步如何,仍將取決于鐵道部乃至更高層面的態(tài)度。

分享到

zhouxiaoli

相關(guān)推薦