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