當(dāng)今世界是一個(gè)信息化的世界,我們的生活中無(wú)論是生活、工作、學(xué)習(xí)都離不開(kāi)信息系統(tǒng)的支撐。而信息系統(tǒng)的背后用于保存和處理最終結(jié)果的地方就是數(shù)據(jù)庫(kù)。因此數(shù)據(jù)庫(kù)系統(tǒng)就變得尤為重要,這意味著如果數(shù)據(jù)庫(kù)如果面臨問(wèn)題,則意味著整個(gè)應(yīng)用系統(tǒng)也會(huì)面臨挑戰(zhàn),從而帶來(lái)嚴(yán)重的損失和后果。
如今“大數(shù)據(jù)”這個(gè)詞已經(jīng)變得非常流行,雖然這個(gè)概念如何落地不得而知。但可以確定的是,隨著物聯(lián)網(wǎng)、移動(dòng)應(yīng)用的興起,數(shù)據(jù)量相比過(guò)去會(huì)有幾何級(jí)的提升,因此數(shù)據(jù)庫(kù)所需要解決的問(wèn)題不再僅僅是記錄程序正確的處理結(jié)果,還需要解決如下挑戰(zhàn):
當(dāng)數(shù)據(jù)庫(kù)性能遇到問(wèn)題時(shí),是否能夠橫向擴(kuò)展,通過(guò)添加服務(wù)器的方式達(dá)到更高的吞吐量,從而充分利用現(xiàn)有的硬件實(shí)現(xiàn)更好的投資回報(bào)率。
是否擁有實(shí)時(shí)同步的副本,當(dāng)數(shù)據(jù)庫(kù)面臨災(zāi)難時(shí),可以短時(shí)間內(nèi)通過(guò)故障轉(zhuǎn)移的方式保證數(shù)據(jù)庫(kù)的可用性。此外,當(dāng)數(shù)據(jù)丟失或損壞時(shí),能否通過(guò)所謂的實(shí)時(shí)副本(熱備)實(shí)現(xiàn)數(shù)據(jù)的零損失。
數(shù)據(jù)庫(kù)的橫向擴(kuò)展是否對(duì)應(yīng)用程序透明,如果數(shù)據(jù)庫(kù)的橫向擴(kuò)展需要應(yīng)用程序端進(jìn)行大量修改,則所帶來(lái)的后果不僅僅是高昂的開(kāi)發(fā)成本,同時(shí)也會(huì)帶來(lái)很多潛在和非潛在的風(fēng)險(xiǎn)。
面對(duì)上述挑戰(zhàn)一個(gè)顯而易見(jiàn)的辦法是將多個(gè)服務(wù)器組成一組集群,這樣一來(lái)就可以充分利用每一臺(tái)服務(wù)器的資源并將客戶端負(fù)載分發(fā)到不同服務(wù)器上,隨著應(yīng)用程序負(fù)載的增加,只需要將新的服務(wù)器添加到集群即可。
本文將對(duì)集群的概念、形式以及目前主流的數(shù)據(jù)庫(kù)集群技術(shù)進(jìn)行探討。
數(shù)據(jù)庫(kù)集群的形式
數(shù)據(jù)庫(kù)的集群和擴(kuò)展不像應(yīng)用程序擴(kuò)展那樣容易,因?yàn)閺臄?shù)據(jù)庫(kù)端來(lái)說(shuō),一旦涉及到了集群,往往會(huì)涉及到數(shù)據(jù)庫(kù)層面的同步,因此從是否存在數(shù)據(jù)冗余這個(gè)角度來(lái)講,我們可以從大面上把數(shù)據(jù)庫(kù)集群分為以下兩種形式:
Share-Disk架構(gòu)
Share-Disk架構(gòu)是通過(guò)多個(gè)服務(wù)器節(jié)點(diǎn)共享一個(gè)存儲(chǔ)來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)集群,兩臺(tái)機(jī)器最簡(jiǎn)單的Share-Disk架構(gòu)如圖1所示。
圖1.簡(jiǎn)單的Share-Disk架構(gòu)
在此基礎(chǔ)之上,Share-Disk架構(gòu)又分為單活和雙活,雙活即為集群中的每一個(gè)節(jié)點(diǎn)都可以同時(shí)對(duì)外提供服務(wù),而單活為集群中只有一個(gè)節(jié)點(diǎn)可對(duì)外提供服務(wù),集群中的其他服務(wù)器作為冗余在“活”的節(jié)點(diǎn)出現(xiàn)故障時(shí)接替該服務(wù)器成為對(duì)外提供服務(wù)的節(jié)點(diǎn)。該類架構(gòu)最典型的產(chǎn)品就是SQL Server Failover Cluster(SQL Server故障轉(zhuǎn)移集群)、NEC的EXPRESSCLUSTER、ROSE的ROSE HA。這種方式的弊端也是顯而易見(jiàn)的,如下:
硬件資源的嚴(yán)重浪費(fèi),同一時(shí)間集群中只有一臺(tái)服務(wù)器活著,其他服務(wù)器只能作為冗余服務(wù)器。
集群無(wú)法提升性能,因?yàn)橹挥幸慌_(tái)服務(wù)器可用
存儲(chǔ)方面存在單點(diǎn)故障,除非在存儲(chǔ)層級(jí)保證高可用,通常需要昂貴的SAN存儲(chǔ)。
因此該類方案僅僅可以做到服務(wù)器層面的高可用,無(wú)法帶來(lái)性能的提升,也無(wú)法解決存儲(chǔ)單點(diǎn)故障的問(wèn)題。因此如果不搭配其他高可用或負(fù)載均衡的技術(shù),存在的意義并不是很大。
另一類技術(shù)是Share-Disk中的雙活的技術(shù),與單活技術(shù)不同的是,雙活的技術(shù)雖然也是共享磁盤,但集群中的所有節(jié)點(diǎn)都可以對(duì)外提供服務(wù),典型的產(chǎn)品就是Oracle的 RAC。RAC的技術(shù)性非常的高,因此需要水平比較高的人來(lái)運(yùn)維系統(tǒng)。RAC設(shè)計(jì)的初衷并不是為了性能,而是為了高可用和可擴(kuò)展性,如果應(yīng)用程序不是針對(duì) RAC架構(gòu)設(shè)計(jì)和開(kāi)發(fā)的,則將應(yīng)用程序遷移到RAC上由于block contention (block busy waits)可能會(huì)導(dǎo)致性能的急劇下降,并且節(jié)點(diǎn)越多性能下降越明顯。