主持人:謝謝趙總帶來的精彩分享,接下來有請原中國工商銀行總行恒豐銀行科技部總經(jīng)理張曉丹,她將跟我們分享新一代兩地三中心多活系統(tǒng)規(guī)劃設(shè)計。
恒豐銀行科技部總經(jīng)理 張曉丹
張曉丹:大家下午好!開始我的演講之前,我先問一個問題,在座各位有多少人聽說過恒豐銀行。基本上還可以看到一半的人,很不幸的是我自己來恒豐銀行前半年我都不知道。恒豐銀行是我們國家12家全國性股份制銀行之一,它一直在默默無聞的經(jīng)營,經(jīng)營的整體情況還是不錯的,這兩年新任董事長過來開始大手筆的彎道超車和快速發(fā)展,所以最近可能知名度高一些,在北京的一些1039各方面做一些廣告,業(yè)務(wù)也在拓展。
今天我分享的就是兩地三中心多活建設(shè)的題目。之所以談這個題目也是說我本人最早從2000年開始參與了當(dāng)時中國金融界第一代數(shù)據(jù)中心,也是第一個數(shù)據(jù)中心的建設(shè),當(dāng)時在北京的西三旗。從那時開始到現(xiàn)在總體來說應(yīng)該是第一代、第二代,已經(jīng)進(jìn)入到第三代的建設(shè)。其實是第三代建設(shè),這一代的數(shù)據(jù)中心我們到底該怎么建?BAT企業(yè)這些云數(shù)據(jù)中心建設(shè)的一些經(jīng)驗和想法對傳統(tǒng)金融行業(yè)的高可用性、高安全性、高一致性的兩地三中心的架構(gòu)有什么挑戰(zhàn)?我們這次開展恒豐銀行新的兩地三中心建設(shè)過程中我們又重新思考了這個課題,做了一些總結(jié),今天也和大家做一些分享。這里面有一些不當(dāng)?shù)牡胤剑M蠹叶嗵嵋庖姡嗵峤ㄗh。
首先,為什么要做兩地三中心建設(shè)?首先有監(jiān)管要求,要求一千億資產(chǎn)的銀行進(jìn)行兩地三中心的建設(shè),一千億以上要建設(shè)異地數(shù)據(jù)中心,一千億資產(chǎn)規(guī)模以下建立同城的數(shù)據(jù)中心,主要滿足異地災(zāi)難性的要求。同時目的也是會提高可用性,還有包括如何高效的利用它的容量和資源控制成本。有些同事可能認(rèn)為做一些多活數(shù)據(jù)中心系統(tǒng)可能用就提高了,面對災(zāi)難的能力也提高了。這里其實有一個誤區(qū),把連續(xù)性和可用性這兩個話題沒有清晰的界定出來。其實連續(xù)性從大的角度來看也是講可用性,可用性也不是指一個數(shù)據(jù)中心的可用性。所以,這兩個概念到底怎么劃分?在我們具體實踐中,我個人建議連續(xù)性把它界定為主要是考慮應(yīng)付同城的一個園區(qū)級,或者一個地域級的大型的災(zāi)難概念,可用性面對的是一個業(yè)務(wù)應(yīng)用系統(tǒng)整個的可用性。我們?yōu)槭裁匆@樣設(shè)計?我們設(shè)計災(zāi)備的時候一定要進(jìn)行數(shù)據(jù)的同步控制,而且它會帶來耦合性。大家知道一個相對獨立的系統(tǒng)肯定不會受另外一個系統(tǒng)的影響,如果兩個系統(tǒng)做數(shù)據(jù)的高度的同步復(fù)制,一定是耦合在一起,中間吃先一些問題反而會影響整體的可用性。所以,連續(xù)性的發(fā)展,過渡重視了災(zāi)備,強(qiáng)調(diào)了災(zāi)備的RTO、RPO的時間一定會反過來影響可用性。
另外一個方面,如果我們想提高可用性,像銀行這樣的傳統(tǒng)架構(gòu)一直是在強(qiáng)調(diào)要提高可用性。為了提高可用性,就從不同層次上不斷的增加冗余,這種不斷的增加冗余以后,最后帶來的問題一個是成本很高,冗余容量很大,可能10%的最終冗余容量都用不掉。還有冗余點越多,每個系統(tǒng)的耦合點越多,本質(zhì)上降低了這個系統(tǒng)的可用性。所以,如何提高可用性,平衡連續(xù)性,高效利用容量資源控制成本,這些都是兩地三中心建設(shè)中要考慮的問題。我們的總體思路仍然是建設(shè)兩地三中心,而不是強(qiáng)調(diào)三個中心一定多活。在傳統(tǒng)數(shù)據(jù)復(fù)制的技術(shù)無法消除一些本身的技術(shù)缺陷之前,三個中心的地位還是有區(qū)別的。知生產(chǎn)中心地位最為重要,同城數(shù)據(jù)中心相對次要,然后異地的中心更加地位低一些。這樣的兩地三中心來實現(xiàn)我們的一個相對多活的架構(gòu)。
同時,要盡可能的消除各個數(shù)據(jù)中心與中心之間的網(wǎng)絡(luò)、應(yīng)用、數(shù)據(jù),各方面的耦合度,避免一個中心的問題會影響另外一個中心。同時,我們要對我們的應(yīng)用系統(tǒng)進(jìn)行連續(xù)性和可用性的這些方面的分析,對于不同級別的要求,賦予它不同的技術(shù)方案、運維方案,來提供不同成本的一個解決方案。所以,這里簡單說的連續(xù)性,連續(xù)性本身防止站點級的災(zāi)難。地域級就是這個城市整體出現(xiàn)海嘯、地震,大面積的停電、停水這樣一個地域級的問題。連續(xù)性分為技術(shù)的連續(xù)性和業(yè)務(wù)的連續(xù)性,業(yè)務(wù)的連續(xù)性就是當(dāng)你的技術(shù)無法解決,要通過業(yè)務(wù)人員手工補(bǔ)數(shù)據(jù)等進(jìn)行解決。用到的一些技術(shù)在右邊進(jìn)行了一些羅列。
連續(xù)性的分級國家有一些標(biāo)準(zhǔn),一般分為0到5級這樣6級的分類,里面核心的指標(biāo),一個是RTO,一個是RPO。就是當(dāng)出現(xiàn)一個災(zāi)難,另外一個地方進(jìn)行恢復(fù)的時候有沒有丟失。所以,最高級別一般來說RPO就是數(shù)據(jù)是零,或者接近零。基于這兩個指標(biāo)我們采用同城和異地的方案來滿足這個戰(zhàn)略的要求。
可用性我們更多考慮這個架構(gòu)從基礎(chǔ)設(shè)施方面,水冷的水,制冷的功能,還有電力這些方面整個的一些冗余,甚至可能我們要關(guān)心到數(shù)據(jù)中心的上游,用水冷,上游的水源是不是來自兩個不同的水庫,供電是不是來自兩個不同的發(fā)電站,甚至要考慮整個數(shù)據(jù)中心是不是在飛機(jī)的主航線下,也擔(dān)心一些問題。存儲級別、服務(wù)器系統(tǒng)級別、數(shù)據(jù)庫中間件級別,運營級別分別進(jìn)行不同的高可用的保證,最終達(dá)到高可用的指標(biāo)。如果一個系統(tǒng)運行達(dá)到5個9的可用性,一年停機(jī)時間要達(dá)到多少?一年系統(tǒng)只能停機(jī)5分鐘,4個9的可用性,一個系統(tǒng)一年停機(jī)時間50分鐘,如果想達(dá)到4個9和5個9這樣的指標(biāo)不是靠我們的運維,簡單靠我們的運維來解決的。必須靠系統(tǒng)的冗余設(shè)計來去解決。我們進(jìn)行可用性的設(shè)計主要考慮不同的冗余時間,有些7×24,有些5×8。容量又是一個問題,冗余資源越來越多,最后成本會難以控制。
所以,對于不同的連續(xù)性級別,在主中心配多少容量,同城配多少容量,異地配多少容量,要有一個總體的規(guī)劃。所以,總結(jié)下來我們做數(shù)據(jù)中心的設(shè)計無外乎就是平衡這三個方面的技術(shù)要求,連續(xù)性、可用性和容量。剛才可能有一點說的不清楚,這里可能補(bǔ)充一下。我們做數(shù)據(jù)同步的時候本質(zhì)上有三種方式,也就是Oracle數(shù)據(jù)庫里面經(jīng)常用到的一個概念,叫最大保護(hù)模式,最大可用是,最大性能模式,最大性能模式是兩個數(shù)據(jù)庫異步,這樣的數(shù)據(jù)無法保障RPO的引領(lǐng)。第二種技術(shù)叫最大保護(hù),所有的一筆交易寫下來,還要同時寫到異地的數(shù)據(jù)中心,這個數(shù)據(jù)中心是同城的幾十公里,或者異地的上千公里,另外一個寫完才可以回復(fù)上層應(yīng)用我完成了。但是如果跨度大,性能會急劇下降,所以不可能上千公里的進(jìn)行部署。在同城50公里范圍內(nèi)可以勉強(qiáng)支持,如果一筆交易中間出現(xiàn)問題,兩個系統(tǒng)的耦合點出現(xiàn)一些異常模式,不是完全這邊死掉了,這筆交易不成,后續(xù)交易全部停在那兒。所以,一般來說,基本上沒人太敢用這種模式。
第二、最大可用模式,平時是雙寫,一旦偵測到同步的數(shù)據(jù)庫有一些問題,或者兩邊的耦合線路有一點問題,質(zhì)量下降,就把這個同步停下來,所以大部分用這個技術(shù)。實際上本質(zhì)上也是做不到RPO的。銀行很多交易量,大的銀行,比如工商銀行、建設(shè)銀行,一天的交易量達(dá)到三億筆,如果數(shù)據(jù)不一致,幾乎無法保障。原來傳統(tǒng)的銀行都是柜面上依據(jù)憑條進(jìn)行交易的目錄,出問題大不了把這個重新錄一遍。一旦這些數(shù)據(jù)沒有了,你想從這些方面進(jìn)行慢慢的保障是非常艱難的。
所以,在現(xiàn)有的數(shù)據(jù)庫的復(fù)制技術(shù)環(huán)節(jié)下,我們很難做到三個中心的同等地位,在同城的兩個中心也無法保證同樣的地位。現(xiàn)在阿里有一些技術(shù)基本可以在同城之間實現(xiàn)數(shù)據(jù)的多活,是在應(yīng)用層能實現(xiàn)應(yīng)用的多寫。同時在多寫的過程中能實現(xiàn)三寫兩同步,這個概念實際上就是它在同城有三個數(shù)據(jù)中心,一筆交易下來,同時往三個中心寫,只要任意兩個中心回來,他就認(rèn)為這個交易完成了,可以往下走了。當(dāng)三個中心之間的耦合,如果任意兩個中心出現(xiàn)了它們之間的互通有點不穩(wěn)定,或者一個中心出現(xiàn)問題了,它不會波及到另外兩個中心說不能對外提供業(yè)務(wù),原來兩個中心就有問題。如果三個中心的耦合一塊兒出了問題,也不能對外提供服務(wù)了。現(xiàn)在底層的數(shù)據(jù)庫和磁盤都沒有這樣的技術(shù)。我聽說下一代的MySql好像往這個方面在考慮,是一個主數(shù)據(jù)庫Master和兩個sliver,我們把主中心的高可能性提高的更高,T4級的機(jī)房,應(yīng)用盡可能的雙,模塊的部署,在主機(jī)房里數(shù)據(jù)庫盡量的雙Read節(jié)點,雙磁盤的系統(tǒng),同城就可以適當(dāng)在數(shù)據(jù)庫方面只做一個熱備。平常可以同步,出問題可以監(jiān)管,但是在APP層可以進(jìn)行自動的負(fù)載均衡,實現(xiàn)應(yīng)用服務(wù)器和Web服務(wù)器層的自動切換和冗余。如果想做到數(shù)據(jù)的多活其實數(shù)據(jù)非常大,行業(yè)里有人在局部的應(yīng)用上試,實際上是得不償失的。
所以,基于這些思路,我們總結(jié)了一些案例。像這張圖,最上層我們用一個全球的負(fù)載均衡,靠DNS自動把流量和數(shù)據(jù)分解到兩個數(shù)據(jù)中心,如果需要有些流量也可以分解到異地的第三個中心,Web層面,APP都是負(fù)載均衡,外面用戶的訪問可以均衡的分在兩個中心和三個中心,每個中心可以均衡的負(fù)載多個節(jié)點,寫節(jié)點又可以分在兩個相對獨立的中心模塊,但是數(shù)據(jù)庫盡可能解決多可用性,但是同城之間是一個熱備,到異地甚至是冷備。這樣一個整體的考慮平衡它的連續(xù)性要求,還有可用性要求,以及容量方面的一些考慮。所以級別低的應(yīng)用連續(xù)性要求是二級,就是只需要同城災(zāi)備,不需要建異地災(zāi)備。我的介紹就到這里,謝謝大家!