現(xiàn)在流行混合云架構(gòu),先上圖
可能大家看著有點(diǎn)類似12306的
從這個(gè)架構(gòu)圖里 ,我們可以把問題 分成 2 個(gè)問題來看 : 1 海量請(qǐng)求的分流 ,2 數(shù)據(jù)的一致性 和 同步。
樂觀松耦合可能需要換一種售票和購票觀念。所謂新的售票觀念和購票觀念,比如預(yù)約,預(yù)約的方式。BookaTicket。
樂觀就是類似樂觀鎖定的那種方式,比如在12306這個(gè)場(chǎng)景上,樂觀可以是預(yù)定,BookaTicket。
我們現(xiàn)在是買票,買票就是看有沒有符合要求的票,有就買,如果有人比你先搶到,那你就后一個(gè)買,如果被搶完了,那你就買不到,只能再等。
這種“搶”的方式會(huì)造成大量的訪問在同一時(shí)間擁擠向服務(wù)器。
如果是預(yù)定的方式,你可以在任何時(shí)候做一個(gè)預(yù)定,系統(tǒng)可以隨時(shí)受理你的預(yù)定,系統(tǒng)受理預(yù)定,并不表示現(xiàn)在就購票成功,也不表示未來一定有票,但是系統(tǒng)會(huì)在一定的時(shí)間結(jié)算某一批預(yù)定,然后根據(jù)票況給予預(yù)定的結(jié)果。
如果符合你的要求有票,那么系統(tǒng)會(huì)回復(fù)消息給你“您預(yù)定的票已可購買,在1個(gè)小時(shí)內(nèi)回復(fù)xxx確定購買”。
那么,你在1個(gè)小時(shí)內(nèi)回復(fù)xxx的話(當(dāng)然包括了支付錢),那么就購買成功了。
如果沒有符合要求的票,或者符合要求的票已經(jīng)用完了(安排給在你之前預(yù)定的人們了),那么系統(tǒng)會(huì)回復(fù)你“沒有符合您的要求的票”或者“符合要求的票已預(yù)定完,請(qǐng)?jiān)俅晤A(yù)定”。
你可以再次預(yù)定,然后等待系統(tǒng)通知,如此循環(huán)。
如果從架構(gòu)的角度來解釋預(yù)定這種業(yè)務(wù),可以這樣解釋,傳統(tǒng)的購買相當(dāng)于同步,預(yù)定相當(dāng)于異步,預(yù)定(異步)可以解決同一時(shí)間大量請(qǐng)求擁擠向服務(wù)器的問題。
同時(shí)可以解決數(shù)據(jù)一致性和同步的問題。
異步可以在一定的時(shí)間進(jìn)行一次“結(jié)算”,就不需要像同步方式那樣為了數(shù)據(jù)一致性和數(shù)據(jù)同步而需要極致的服務(wù)器資源和網(wǎng)絡(luò)資源。
你把需求提給服務(wù)器,服務(wù)器不是即時(shí)(同步)答復(fù),而是,“先考慮一下”,把很多用戶的需求都匯集一下,再統(tǒng)一答復(fù)一次。
消息隊(duì)列是“架構(gòu)”里異步的代表,但在這里說的解決方案中,具體的技術(shù)可以是各種各樣。
輪詢r(jià)edis,甚至輪詢數(shù)據(jù)庫也是可以的么。^^
事實(shí)上,用戶的需求會(huì)先持久化,所以,可能會(huì)輪詢數(shù)據(jù)庫。
因?yàn)槭钱惒綐酚^松耦合的架構(gòu),所以,輪詢數(shù)據(jù)庫也是很輕松的,不會(huì)給系統(tǒng)造成負(fù)擔(dān)。
我們?cè)倏瓷厦娴哪莻€(gè)架構(gòu)圖,圖的下方列出了余票查詢集群、用戶登錄集群、訂單分級(jí)查詢、票價(jià)計(jì)算集群、實(shí)名制身份確認(rèn)集群5項(xiàng)。
我們可以看到圖的中央,紅色粗的箭頭“海量購票請(qǐng)求”,這個(gè)就是來自于全國的用戶的購票請(qǐng)求。這個(gè)請(qǐng)求是指向“鐵路總公司數(shù)據(jù)中心”。
中央還有一個(gè)藍(lán)色的比較細(xì)的箭頭,是“余票查詢請(qǐng)求分流”,指向阿里云公有云數(shù)據(jù)中心,也就是說,阿里云公有云數(shù)據(jù)中心可以來分擔(dān)“余票查詢”業(yè)務(wù)。
而左側(cè)有一個(gè)“主數(shù)據(jù)庫”,主數(shù)據(jù)庫的數(shù)據(jù)來自于18個(gè)路局的數(shù)據(jù)匯總,主數(shù)據(jù)庫同時(shí)向鐵路總公司數(shù)據(jù)中心和阿里云數(shù)據(jù)中心(負(fù)責(zé)余票查詢分流)提供數(shù)據(jù)(同步數(shù)據(jù))。
從這個(gè)圖的架構(gòu)中我們可以看到,核心交易是發(fā)生在“鐵路總公司數(shù)據(jù)中心”,就是說,這是一個(gè)實(shí)時(shí)的,中心化的數(shù)據(jù)庫支持的業(yè)務(wù)系統(tǒng)。
同時(shí)也可以判定,余票查詢不是實(shí)時(shí)的,是一個(gè)參考性的資料。具體能不能買這個(gè)票,在真正買票(在鐵路總公司數(shù)據(jù)中心中發(fā)生交易)時(shí)才能知道結(jié)果。而“鐵路總公司數(shù)據(jù)中心”這個(gè)中心數(shù)據(jù)庫,它的承載能力來自于一個(gè)分布式數(shù)據(jù)庫Gemfire。