一、引言 隨著春節(jié)的臨近,大家都忙著從網(wǎng)上刷票,隨之而來的就是對12306訂票網(wǎng)站的質(zhì)疑聲。今天就針對這個問題和朋友還討論了一番,有感于此,本人從技術(shù)的角度對此進行分析并對整個系統(tǒng)的架構(gòu)進行了一下重構(gòu)構(gòu)想。 首先整個售票系統(tǒng)是一個非常龐大而復(fù)雜的系統(tǒng),是一個高負荷、高并發(fā)的云平臺,其規(guī)模甚至比淘寶大2至3倍,而且對于數(shù)據(jù)的實時性要求非常高。光是12306網(wǎng)站系統(tǒng)的日訪問量達到了15億次,如果加上各個代售點和車站售票系統(tǒng),則高峰時段數(shù)據(jù)訪問層的并發(fā)量在千萬級別。如此大的訪問和并發(fā)量,如果沒有好的架構(gòu)設(shè)計肯定保證了不系統(tǒng)的穩(wěn)定性和健壯性。 其次,本人覺得12306網(wǎng)絡(luò)訂票系統(tǒng)是在鐵道部原有的聯(lián)網(wǎng)售票系統(tǒng)基礎(chǔ)上開發(fā)的,所以其原有的數(shù)據(jù)架構(gòu)很關(guān)鍵,它直接影響到整個系統(tǒng)的擴展性和穩(wěn)定性。設(shè)想一下如果整個系統(tǒng)全部進行重構(gòu)那是多么龐大的工程,這不僅涉及到整個架構(gòu)的重新設(shè)計、服務(wù)系統(tǒng)開發(fā),還有一個更繁重的工作就是所有火車站的售票系統(tǒng)和代售點系統(tǒng)都將全部升級,至于12306網(wǎng)絡(luò)訂票系統(tǒng)肯定不會出太大的問題,但是對于車站售票系統(tǒng)可是一個很大的考驗,不能有半點的閃失。因而我想鐵道部也不會冒這個風(fēng)險。正是因為12306是在原有的架構(gòu)上增加和擴展的,所以才有了目前的種種問題。如果一切從頭架構(gòu)反而好多問題迎刃而解。 二、總體架構(gòu) 這里我就對這個新的系統(tǒng)架構(gòu)做一個詳細的設(shè)計,首先要認(rèn)清此應(yīng)用是一個云平臺的典型應(yīng)用,系統(tǒng)要按云平臺的思想分層設(shè)計,從上而下分為三層,即:應(yīng)用層、數(shù)據(jù)訪問層、數(shù)據(jù)層。每一層之間是松散耦合。合得每一層具有很強的擴展性和伸縮性。每一層內(nèi)部都是基于集群技術(shù),分組部署,每一組處理單元都是即插即用,可根據(jù)計算壓力動態(tài)擴充,其大致的結(jié)構(gòu)如下圖:
應(yīng)用層:主要是指各種售票和訂票系統(tǒng),主要有三種,如車站售票系統(tǒng)、代售點系統(tǒng)及12306網(wǎng)絡(luò)訂票系統(tǒng)。其中前兩個是C/S結(jié)構(gòu)的應(yīng)用,后一個是B/S應(yīng)用模式。其客戶端應(yīng)用服務(wù)器之間增加一個負載均衡服務(wù),這有利于系統(tǒng)的并發(fā),可以有效地根據(jù)當(dāng)前用戶量和訪問情況自動地分配相對壓力較小的服務(wù)器。 數(shù)據(jù)訪問層:主要是將業(yè)務(wù)應(yīng)用與底層數(shù)據(jù)庫之間的操作接口專門獨立出來,業(yè)務(wù)應(yīng)用訪問數(shù)據(jù)不是直接訪問數(shù)據(jù)庫,而是通過數(shù)據(jù)訪問層進行間接地訪問和操作。這樣的好處是可以解決數(shù)據(jù)訪問的并發(fā)瓶頸,可以根據(jù)系統(tǒng)的壓力情況動態(tài)地調(diào)整和部署訪問層。 數(shù)據(jù)層:根據(jù)車次和地域?qū)④嚧蔚挠嗥毙畔⒎謩e存儲在很多個數(shù)據(jù)中心上,每一個數(shù)據(jù)中心是一組服務(wù)器。這樣將眾多的并發(fā)用戶根據(jù)查詢車次分散到多個數(shù)據(jù)中心上去。從而降低單點壓力,提高整體的并發(fā)性能。如果數(shù)據(jù)訪問是一個大瓶頸則可增加數(shù)據(jù)中心的節(jié)點而減小數(shù)據(jù)中心的粒度(也就是每個數(shù)據(jù)中心減少車次數(shù)量),可提高數(shù)據(jù)訪問的速度。 三、詳細架構(gòu) 系統(tǒng)整體按分層架構(gòu)處理,每一層都是可注冊、可插拔的體系,這種架構(gòu)的好處是每一層都可以分層優(yōu)化,而互不影響。并能根據(jù)實際運行的情況對并發(fā)和訪問量過大的實體層進行動態(tài)擴容,很容易提高系統(tǒng)的并發(fā)和穩(wěn)定性。 此架構(gòu)很好地解決了應(yīng)用服務(wù)器和數(shù)據(jù)訪問的瓶頸問題,如果應(yīng)用服務(wù)器壓力大則可以通過注冊表對應(yīng)用服務(wù)器擴容,并通過負載均衡均衡地訪問各個應(yīng)用服務(wù)器。如果數(shù)據(jù)訪問是一個瓶頸則可增加數(shù)據(jù)加心的方式來解決數(shù)據(jù)訪問擁擠情況。 對于數(shù)據(jù)層系統(tǒng)按車次對所有的車次車票信息進行分組,每一組是一個數(shù)據(jù)中心,數(shù)據(jù)中心的大小可隨時調(diào)整。這樣可以把用戶對數(shù)據(jù)的訪問分散到多個節(jié)點上去,從而降低數(shù)據(jù)中心的壓力。每一個數(shù)據(jù)中心由若干臺機器組成,一臺主數(shù)據(jù)服務(wù)器,若干從數(shù)據(jù)服務(wù)器。主數(shù)據(jù)是用于給用戶出票,每一個接口調(diào)用都需要加鎖,保證票數(shù)數(shù)據(jù)修改的原子性,其所管理的車次和車票數(shù)據(jù)在內(nèi)存中高速緩存。同時每隔一定的時間周期同步到從數(shù)據(jù)服務(wù)器上,從數(shù)據(jù)是用來提供查詢的數(shù)據(jù)副本,它把大量的查詢操作分散到從數(shù)據(jù)服務(wù)器上。其數(shù)據(jù)訪問的流程如下:
|
|