透過12306五大焦點看高性能高并發(fā)系統(tǒng)
幽云十八 發(fā)表于:12年02月20日 09:46 [轉(zhuǎn)載] IT168
焦點五:系統(tǒng)該如何優(yōu)化?
系統(tǒng)優(yōu)化是必不可少的環(huán)節(jié),每一個成熟的網(wǎng)站和系統(tǒng)都是通過不斷優(yōu)化而來的。而12306網(wǎng)站最早暴露出來的也是優(yōu)化問題,隨后經(jīng)過網(wǎng)友深挖,從12306網(wǎng)站前端的網(wǎng)頁設計到后端的數(shù)據(jù)、緩存、負載均衡、數(shù)據(jù)分區(qū)等一系列問題都提出不同的優(yōu)化方案。
12306網(wǎng)站前端性能優(yōu)化技術(shù)分析
從時間上來看,首先引發(fā)12306網(wǎng)站擁堵的是網(wǎng)頁的問題,從12306的首頁來看,其總文件大小在900K左右,在極端情況下,如果所有人都是第 一次訪問的話,那么每個人都需要下載1M大小的文件,如果需要在兩分鐘內(nèi)返回的話,那么所需的帶寬需要66Gbps,當然這是極端的情況。那么在這種情況 下就需要對網(wǎng)頁大小進行調(diào)整,盡量少用圖片,因為圖片非常消耗帶寬,在這種高并發(fā)的情況下,即使1K大小的文件也極有可能引發(fā)“蝴蝶效應”。
同時,由于對12306網(wǎng)站的訪問是部分地域的,可能不同的Web服務器承受這不同的壓力,這種情況下可通過DNS負載均衡器將用戶訪問平均分配到各個 Web服務器上,因為Http的請求都是短時的,所以很簡單的負載均衡器就能完成這一動作。并且,CDN在這個環(huán)節(jié)能夠提供很大的幫助。
并且,IBM 軟件架構(gòu)師景文童認為,12306網(wǎng)站在后期應該增加對智能移動終端的支持,那么從當前的整體帶寬來看,盡量不用或少用圖片,并對網(wǎng)頁進行優(yōu)化將有助于提 高網(wǎng)站的訪問速度。在都不是非首次訪問的前提下,瀏覽器會緩存相當一部分內(nèi)容,這就會明顯減少帶寬占用,于是負載一下子從前端遷移到了后端,數(shù)據(jù)處理瓶頸 一下就凸顯出來,訪問者不斷刷出的500錯誤即是明證。
除了上述所說的這些之外,還可通過減少前端網(wǎng)頁的鏈接數(shù)、頁面靜態(tài)化以及之前提到的緩存技術(shù)來對網(wǎng)站前端進行優(yōu)化。這些方法能夠明顯解決用戶無法登 陸或者訪問緩慢等問題,但并不能解決問題真正的實質(zhì)——購票。因為涉及到對數(shù)據(jù)庫進行查詢以及寫入等操作,后端優(yōu)化就顯得尤為重要。
12306網(wǎng)站后端性能優(yōu)化技術(shù)分析
關(guān)于后端性能優(yōu)化技術(shù),陳皓在其博客中表示,可通過數(shù)據(jù)冗余、數(shù)據(jù)鏡像、數(shù)據(jù)分區(qū)以及后端的動態(tài)負載均衡來達到提高訪問速度的目的。
數(shù)據(jù)冗余就是將數(shù)據(jù)庫的數(shù)據(jù)冗余處理,也就是減少表連接這樣的開銷比較大的操作,但這樣會犧牲數(shù)據(jù)的一致性。但這樣做的風險較大,并且現(xiàn)在常用的方法就是利用NoSQL來做數(shù)據(jù),數(shù)據(jù)冗余了,訪問加快了,但是數(shù)據(jù)一致性就會存在較大的問題。
利用后端優(yōu)化來提高訪問速度的第二個方法則是數(shù)據(jù)鏡像,現(xiàn)在幾乎所有的主流數(shù)據(jù)庫都支持鏡像。鏡像的好處就是可以做負載均衡。把一臺數(shù)據(jù)庫的負載均 分到多臺上,同時又保證了數(shù)據(jù)一致性(Oracle的SCN)。最重要的是,這樣還可以有高可用性,一臺廢了,還有另一臺在服務。但數(shù)據(jù)鏡像后的數(shù)據(jù)一致 性仍然是一個復雜的問題,因為要對單條數(shù)據(jù)進行分區(qū),將其均分到不同的服務器上。
數(shù)據(jù)鏡像不能解決的一個問題就是數(shù)據(jù)表里的記錄太多,導致數(shù)據(jù)庫操作太慢。所以,把數(shù)據(jù)分區(qū)。數(shù)據(jù)分區(qū)有很多種做法,一般來說,數(shù)據(jù)分區(qū)包含以下幾 種主要的方式:把數(shù)據(jù)把某種邏輯來分類、把數(shù)據(jù)按字段分,也就是豎著分表、平均分表或者同一數(shù)據(jù)分表等。
數(shù)據(jù)分區(qū)可以在一定程度上減輕負載,但是無法減輕熱銷商品的負載,對于火車票來說,可以認為是大城市的某些主干線上的車票。這就需要使用數(shù)據(jù)鏡像來 減輕負載。使用數(shù)據(jù)鏡像,你必然要使用負載均衡,在后端,我們可能很難使用像路由器上的負載均衡器,因為那是均衡流量的,因為流量并不代表服務器的繁忙程 度。因此,我們需要一個任務分配系統(tǒng),其還能監(jiān)控各個服務器的負載情況。當然服務器負載均衡的技術(shù)有很多,每種方法都有各自的優(yōu)缺點,這個可能要根據(jù)實際 情況進行選擇。