如何實(shí)現(xiàn)mssql數(shù)據(jù)庫負(fù)載均衡
一般的負(fù)載均衡指的是服務(wù)器,現(xiàn)在要求數(shù)據(jù)庫級別實(shí)現(xiàn)負(fù)載均衡,像oracle的rac。
SQL Server 負(fù)載均衡集群
一個(gè)應(yīng)用系統(tǒng)隨著業(yè)務(wù)量的提高,以及訪問量和數(shù)據(jù)流量的快速增長,各個(gè)核心部分的處理性能和計(jì)算強(qiáng)度也相應(yīng)增大,使得單一設(shè)備根本無法承擔(dān)。在此情況下,如果扔掉現(xiàn)有設(shè)備去做大量的硬件升級,必將造成現(xiàn)有資源的浪費(fèi),而且下一次業(yè)務(wù)量的提升,又將導(dǎo)致再一次硬件升級的高額成本投入。于是,負(fù)載均衡機(jī)制應(yīng)運(yùn)而生。 對于應(yīng)用系統(tǒng)的負(fù)載均衡的硬件和軟件比比皆是,因?yàn)閼?yīng)用服務(wù)器上的程序基本上認(rèn)為是不變化的,而且一般的各個(gè)應(yīng)用服務(wù)器上的程序是不交互的。因此應(yīng)用服務(wù)器的負(fù)載均衡非常好做,只需要能夠進(jìn)行分流的軟件或者硬件把多個(gè)客戶端的連接分配到多個(gè)應(yīng)用服務(wù)器上去即可。
因?yàn)閿?shù)據(jù)庫內(nèi)的數(shù)據(jù)是頻繁變化的,為了數(shù)據(jù)的一致性以及鎖資源的分配協(xié)調(diào)等,所以像應(yīng)用服務(wù)器那樣只有分流是不夠的,各個(gè)節(jié)點(diǎn)需要頻繁的交互。這也是數(shù)據(jù)庫集群軟件難做的原因,當(dāng)然也是賣的貴的原因了。
Oracle Real Application Clusters
對于數(shù)據(jù)庫負(fù)載均衡,大家最為耳熟能詳?shù)木褪荗racle RAC了。RAC是雙機(jī)并行服務(wù)器(8i及以前版本稱作Oracle Parallel Server,OPS),用來在集群環(huán)境下實(shí)現(xiàn)多機(jī)共享數(shù)據(jù)庫,以保證應(yīng)用的高可用性,同時(shí)可以自動(dòng)實(shí)現(xiàn)并行處理及均分負(fù)載,還能實(shí)現(xiàn)數(shù)據(jù)庫在故障時(shí)的排錯(cuò)和無斷點(diǎn)恢復(fù)。它可以自動(dòng)進(jìn)行負(fù)載平衡、故障修復(fù)和規(guī)劃停機(jī)時(shí)間,以支持高可用性應(yīng)用程序。若并行服務(wù)器中某節(jié)點(diǎn)失效,透明的應(yīng)用程序容錯(cuò)能夠把用戶自動(dòng)轉(zhuǎn)接到另一節(jié)點(diǎn)上繼續(xù)運(yùn)行,應(yīng)用程序在用戶沒有察覺的情況下繼續(xù)執(zhí)行。這使周期性和非周期性發(fā)生故障的系統(tǒng)增大了連續(xù)可用性。進(jìn)程的失效可以完全透明地轉(zhuǎn)移到另一節(jié)點(diǎn)上去,通過適當(dāng)?shù)嘏渲茫梢灾付ㄋ胁樵兌荚诳蛻舳诉M(jìn)行緩存,這樣它們便可以在轉(zhuǎn)移后的節(jié)點(diǎn)上重新設(shè)置。
Moebius for SQL Server
截至到SQL Server 2008,微軟還是沒有推出負(fù)載均衡組件,只能靠第三方軟件來實(shí)現(xiàn),好在這個(gè)軟件是幾個(gè)從微軟出來的人寫的,也算是個(gè)小小的巧合。說他們是微軟出來的并不是說他們的技術(shù)多厲害,而是他們利用SQL Server的一些內(nèi)部接口把集群做的非常透明, 無論是應(yīng)用程序的調(diào)用還是開發(fā)/管理人員的使用都和面對一個(gè)數(shù)據(jù)庫一樣。
他們的實(shí)現(xiàn)原理是這樣的:和SQL Server鏡像一樣,每個(gè)數(shù)據(jù)庫節(jié)點(diǎn)都有自己的數(shù)據(jù),也就是無共享磁盤架構(gòu)。他們稱之為“中間件”的程序宿主在數(shù)據(jù)庫的內(nèi)部,每個(gè)節(jié)點(diǎn)數(shù)據(jù)庫上寫入數(shù)據(jù)導(dǎo)致數(shù)據(jù)變化時(shí),SQL Server會(huì)激活“中間件”,“中間件”把變化的數(shù)據(jù)同步到其他的節(jié)點(diǎn)上。其他節(jié)點(diǎn)發(fā)生變化也是一樣。因?yàn)?ldquo;中間件”宿主在數(shù)據(jù)庫內(nèi), 所以它能夠把每個(gè)同步的Session和SQL Server的Session綁定到一起,也就是使用戶的執(zhí)行和數(shù)據(jù)的同步成為一個(gè)原子操作,從而保證數(shù)據(jù)在每時(shí)每刻都是一致的。因此查詢可以隨便到每個(gè)機(jī)器上去查,從而做到了真正的負(fù)載均衡。
這是一種叫"數(shù)據(jù)庫路由器"的技術(shù),這種技術(shù)的特點(diǎn)是靈活性好,但效率比RAC要低,畢竟RAC是在引擎里實(shí)現(xiàn)的不管怎么樣有比沒有強(qiáng)!