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

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

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

優(yōu)化需求一:互聯網接入帶寬明顯不足,造成網絡擁塞。

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

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

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

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

在討論中,有不少網友提到要對業(yè)務流程進行優(yōu)化。

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

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

也有網友建議去掉鎖定機制,以防出現票還沒有售完,但在火車站就是買不到票的情況。

也有網友認為搖號總比這樣哄搶好,但要搖號的話,必須是第三方機構負責搖號。

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

對于12306網站的頁面設計,網友yanyangtian4502表示,最大的問題就是把CSS樣式嵌入在頁面中。這其實就加大了頁面的大小,消耗了帶寬。如果每個頁面大小70k,其中 這樣的css嵌入 假設是1k。因為每次訪問,瀏覽器需要下載頁面,那么每次都要去下載這多余的1k的css樣式,試想:上千萬的pv去訪問的時候,那么產生的流量就是 1k*100,000,000。也就說明:要多消耗服務器的這么多網絡帶寬!很要命,一點點的問題,就立刻被放大!

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

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

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

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

4、CDN及負載均衡系統

事實上,12306網站已經上了CDN。有網友推薦,前端的負載均衡采用Nginx/HAProxy+Keepalived。

5、應用部署:省級部署模式

網友chenyx認為12306問題的根結在于沒有使用分布式處理。網友gotolinux建議,通過省級部署的方式可以分散系統的壓力。分別用二級域名來引導進入不同地域進行購票。比如:廣東就用gd.12306.com,湖南就用hn.12306.com,把整個系統劃分為多個小系統,并在后端集中。

但網友老男孩認為,找?guī)讉€核心骨干的售票系統對接更好。按地域分域名思路很不錯,不過這個不同地點購票可能難做,這個要和現有的不同地區(qū)的鐵路售票系統節(jié)點對接(資金太大),找?guī)讉€核心骨干的售票系統對接就好。此外,系統還需要使用分布式數據庫(如下圖所示)。

節(jié)后大整改!CU網友熱議12306網站改進

6、數據庫:NoSQL尚未成熟

12306的數據庫主要涉及兩方面:用戶信息和票務信息。這兩方面的數據必須進行分離,既減輕系統負載,也加快系統響應速度。

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

對于日前吵得很火的NoSQL,大部分網友都認為NoSQL技術目前在國內尚未成熟,存在趕時髦的風氣,對于實時性或許可以滿足,但是不能滿足數據一致性的要求,所以不推薦使用。

7、其他出路:打破票務壟斷

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

分享到

zhouxiaoli

相關推薦