分布式數(shù)據(jù)庫(kù)的幾個(gè)事實(shí),你知道了嗎?
今天出差,在高鐵上想起前幾天和一個(gè)客戶(hù)交流的事情,于是利用高鐵上這段時(shí)間,慢慢寫(xiě)一篇吧。最近這幾天在外面出差,可能不一定有時(shí)間發(fā)文章了。
這是一個(gè)金融客戶(hù),他們企業(yè)的業(yè)務(wù)覆蓋面不大,每秒鐘大概交易量是500筆左右。目前用了兩臺(tái)IBM小機(jī)跑ORACLE 11.2.0.4 RAC,節(jié)點(diǎn)負(fù)載比較均衡,CPU使用率高峰期不超過(guò)20%。
他們經(jīng)過(guò)分析后認(rèn)為如果上國(guó)產(chǎn)數(shù)據(jù)庫(kù),必須用分布式的。我問(wèn)他為什么,他說(shuō)主要是考慮今后業(yè)務(wù)量的問(wèn)題,三五年后有可能交易量翻翻。我就和他算了一下每秒1000筆核心交易大致的負(fù)載,相當(dāng)于一分鐘三萬(wàn)六千筆。雖然說(shuō)銀行核心交易和TPMC沒(méi)有直接換算公式,不過(guò)在目前的一臺(tái)兩路PC服務(wù)器上,BENCHMARK輕輕松松就可以跑60萬(wàn)的今天,這確實(shí)也不算個(gè)事兒了。因此對(duì)于此類(lèi)用戶(hù),甚至說(shuō)對(duì)大多數(shù)用戶(hù)來(lái)說(shuō),怕單機(jī)處理能力不足是沒(méi)必要的。
分布式數(shù)據(jù)庫(kù)一定能提高交易性能嗎?我們先來(lái)看看RAC,兩個(gè)節(jié)點(diǎn)的環(huán)境,大體上會(huì)對(duì)交易量提升有幫助,而對(duì)于交易延時(shí)的提升就不一定了,在少數(shù)情況下,如果原有系統(tǒng)存在較為嚴(yán)重的資源爭(zhēng)用,那么可能RAC會(huì)緩解這種爭(zhēng)用,提高單一交易性能。不過(guò)在大多數(shù)情況下,集群是有開(kāi)銷(xiāo)的,單筆交易的延時(shí)反而會(huì)增加。去年有個(gè)客戶(hù)和我交流,他們想把核心交易的RAC拆成HA,因?yàn)榫W(wǎng)聯(lián)對(duì)交易延時(shí)監(jiān)控太狠了,他們想進(jìn)一步縮短單筆交易的延時(shí),他們分析了大量核心交易的SQL,發(fā)現(xiàn)RAC上消耗的時(shí)間占了接近10%。
RAC如此,分布式數(shù)據(jù)庫(kù)也是如此,跨節(jié)點(diǎn)的事務(wù)和SQL,肯定是有成本低。對(duì)于銀行核心交易這類(lèi)大多數(shù)只是簡(jiǎn)單的單表操作的交易,哪怕優(yōu)化的再好,集群的成本也不可能變成負(fù)數(shù)。分布式數(shù)據(jù)庫(kù)上的提高交易并發(fā)能力的案例大多數(shù)是可信的,而減少交易時(shí)間的案例大多數(shù)不太靠譜,往往是在某些不太常見(jiàn)的條件下測(cè)試出來(lái)的。
綜上所述,我今天要說(shuō)的關(guān)于分布式數(shù)據(jù)庫(kù)的前兩個(gè)事實(shí)是:1.大多數(shù)業(yè)務(wù)系統(tǒng)的負(fù)載并不至于單機(jī)集中式數(shù)據(jù)庫(kù)處理不過(guò)來(lái),哪怕真出現(xiàn)類(lèi)似情況,做些簡(jiǎn)單的數(shù)據(jù)庫(kù)分拆,只分庫(kù),或者分離一些大開(kāi)銷(xiāo)負(fù)載的統(tǒng)計(jì)分析到只讀備機(jī)上,就能搞得定。這種拆分,應(yīng)用開(kāi)發(fā)商都能輕松搞定。 2.分布式數(shù)據(jù)庫(kù)能帶來(lái)交易并發(fā)能力的提升(基于1的原因,這個(gè)能力不足以讓我們必須選分布式數(shù)據(jù)庫(kù)),但是大多數(shù)情況下無(wú)法提升單筆交易的性能,反而在大多數(shù)情況下會(huì)略加大單筆交易的延時(shí)。
有人問(wèn),分布式數(shù)據(jù)庫(kù)在高可用上對(duì)于集中式數(shù)據(jù)庫(kù)有沒(méi)有優(yōu)勢(shì)?這是我今天要討論的分布式數(shù)據(jù)庫(kù)的第三個(gè)事實(shí),我可以十分肯定的回答,是的,分布式數(shù)據(jù)庫(kù)從底層架構(gòu)上具有極強(qiáng)的容錯(cuò)能力,在高可用上是有優(yōu)勢(shì)的。不過(guò),這個(gè)事實(shí)也是有條件的。現(xiàn)在數(shù)據(jù)庫(kù)市場(chǎng)十分混亂,分布式數(shù)據(jù)庫(kù)產(chǎn)品質(zhì)量也參差不齊。高可用架構(gòu)設(shè)計(jì)出來(lái)不難,做好不易。因此我們?cè)谶x擇產(chǎn)品的時(shí)候還是要小心,有些數(shù)據(jù)庫(kù)產(chǎn)品在底層故障切換時(shí),并不總是很平穩(wěn)的,底層故障切換時(shí)整個(gè)庫(kù)都會(huì)有較大影響,而且你無(wú)法干預(yù),也不知道問(wèn)題出在哪,這時(shí)候你可能會(huì)希望這是個(gè)集中式數(shù)據(jù)庫(kù)多好。
分布式數(shù)據(jù)庫(kù)的第四個(gè)事實(shí)是,有時(shí)候一群流氓不一定干得過(guò)猛男。分布式數(shù)據(jù)庫(kù)剛剛出來(lái)的時(shí)候,我是很期待的,其中最期待的是分布式數(shù)據(jù)庫(kù)能解決大開(kāi)銷(xiāo)的復(fù)雜查詢(xún)。在單機(jī)集中式數(shù)據(jù)庫(kù)上,這些SQL已經(jīng)跑到極限了,還是無(wú)法滿(mǎn)足客戶(hù)的需求。我以前在幫助一個(gè)客戶(hù)優(yōu)化幾個(gè)大型報(bào)備應(yīng)用的時(shí)候,啟用了跨節(jié)點(diǎn)并行查詢(xún),還取得了不錯(cuò)的效果,因此我剛開(kāi)始也堅(jiān)信分布式數(shù)據(jù)庫(kù)在這方面會(huì)做得很好。很多分布式數(shù)據(jù)庫(kù)廠(chǎng)商也拿著很多對(duì)比測(cè)試的結(jié)果宣布自己在大查詢(xún)上性能比O記高幾倍到幾十倍。這些測(cè)試結(jié)果沒(méi)問(wèn)題,有問(wèn)題的的,測(cè)試僅僅是測(cè)試,你的生產(chǎn)環(huán)境不是由這些測(cè)試用例組成的。而這個(gè)關(guān)于分布式數(shù)據(jù)庫(kù)的事實(shí)是,群毆雖然是一種好方法,不過(guò)有些群毆是專(zhuān)業(yè)的軍隊(duì)打的,有章法有配合,有些群毆是街頭小混混,沒(méi)啥技術(shù)含量。分布式數(shù)據(jù)庫(kù)的群毆也是如此,要想有好的SQL性能,CBO優(yōu)化器,分布式調(diào)度,分布式執(zhí)行器的水平必須高,一個(gè)比較糟糕的分布式執(zhí)行計(jì)劃,可能會(huì)讓SQL性能遠(yuǎn)低于在一個(gè)單機(jī)上跑,因此選擇適合你業(yè)務(wù)場(chǎng)景的分布式數(shù)據(jù)庫(kù)十分關(guān)鍵。而這個(gè)事實(shí)更深的一面是,現(xiàn)在的分布式數(shù)據(jù)庫(kù)的技術(shù)水平參差不齊,哪怕頂流的分布式數(shù)據(jù)庫(kù),在某些常用的復(fù)雜SQL的性能上,都還不一定干得過(guò)ORACLE跑在一個(gè)沒(méi)有明顯瓶頸的服務(wù)器上。
分布式數(shù)據(jù)庫(kù)很易于管理,可以減輕企業(yè)數(shù)據(jù)庫(kù)運(yùn)維的壓力,這是我今天要講的第五個(gè)關(guān)于分布式數(shù)據(jù)庫(kù)的事實(shí)。事實(shí)是如此嗎?借用開(kāi)篇那位RACSIG大佬的話(huà),MAYBE。分布式數(shù)據(jù)庫(kù)是十分復(fù)雜的,在大多數(shù)情況下很穩(wěn)定,DBA也貌似沒(méi)啥可干的,但是出問(wèn)題的時(shí)候,DBA也好像沒(méi)啥事可干的,因?yàn)樗静恢涝趺锤伞_\(yùn)維團(tuán)隊(duì)沒(méi)有掌握分布式數(shù)據(jù)庫(kù)運(yùn)維的時(shí)候,很難定位與分析問(wèn)題,往往只能等著數(shù)據(jù)庫(kù)自動(dòng)恢復(fù)。這對(duì)于核心業(yè)務(wù)系統(tǒng)來(lái)說(shuō)就是災(zāi)難。這時(shí)候可能會(huì)想這要是集中式數(shù)據(jù)庫(kù)多好,大不了我關(guān)了重啟。
為企業(yè)的核心業(yè)務(wù)選擇數(shù)據(jù)庫(kù)是十分復(fù)雜的事情,關(guān)系到企業(yè)的IT規(guī)劃,企業(yè)領(lǐng)導(dǎo)的喜好,商務(wù)因素,運(yùn)維團(tuán)隊(duì)的能力,資金,研發(fā)能力等諸多因素,因此今天的文章里我并沒(méi)有寫(xiě)該如何選型,這也不是我能說(shuō)了算的。我的文章只是給大家在思考這些問(wèn)題點(diǎn)是提供一些素材,一些我的觀點(diǎn),也許有些觀點(diǎn)并不正確或者并不全面,當(dāng)個(gè)參考吧。