怎樣實現數據庫負載均衡集群


這些天一直在思考如何實現數據庫負載均衡集群?

數據庫負載均衡集群的目的:實現數據的讀和寫的負載均衡。

1.使用數據庫自身提供的事務復制可以實現數據庫負載均衡集群,但有缺點:通過事務復制實現數據同步大約需要1~2秒的時間,在同步的過程中,數據有可能發生臟讀。如果使用對等事務復制,有可能由於多個數據庫服務器都同時更改同一行數據而發生沖突,一旦發生沖突,則更改可能失敗,而且處理這種沖突會非常復雜。所以這種方案看起來似乎非常簡單(數據庫自帶功能),但細想卻不可行。

2.自行開發應用服務器可以實現數據庫負載均衡集群。數據庫事務分為讀事務和寫事務倆種。

首先講寫事務的處理:不使用數據庫本身提供的那些數據同步技術,應用服務器依次序將寫事務在各數據庫中執行,這種執行要么全部成功,要么全部失敗回滾,保證各數據庫中的數據保持一致性。這樣,各數據庫之間不需要做任何附加的數據同步功能。這種方法是完全可行的。但也有缺點:寫動作執行的比較慢,因為要依次寫入各數據庫服務器,這顯然比只寫入一個數據庫服務器花的時間多。可以看出,這種數據庫負載均衡集群是完全通過應用服務器來實現的。

3.應用服務器實現數據庫負載均衡集群的實現方法

首先,應用服務器要實現負載均衡的功能,這可以通過使用代理服務器來實現。具體實現方法我在其它的博文里面有講。此處省略。

應用服務器如何判斷客戶端提交的是讀事務還是寫事務?

一般地應用服務器的遠程方法是會提供:讀事務的數據查詢方法和寫事務的執行方法的,客戶端分別調用應用服務器的讀事務方法和寫事務方法。

但調用的如果是存儲過程呢?

那也有辦法,可以通過存儲過程的名字作文章,以區分是包含讀事務的存儲過程還是寫事務的存儲過程。

4.如果數據庫結構發生變更(比如表結構、存儲過程、視圖),在各數據庫服務器之間如何同步?

有倆個辦法:一是將這些結構變化的腳本依次在各數據庫服務器得到執行。二是使用數據庫本身提供的復制功能(只復制結構變化)進行同步。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM