本文技術點思路梳理:
- 創建用來實施負載均衡的一組資料庫,
- 通過DeveloperSharp.xml來配置負載均衡策略,
- 在App.config/Web.config中添加鏈接DeveloperSharp.xml的appSettings節點,
- 創建基于DeveloperSharp.dll組件的“負載均衡器”類(本篇為:StudentLB類),
- 通過“負載均衡器”產生的ConnectionString鏈接資料庫,
為了演示資料庫的負載均衡(Load Balance),我們先創建三個資料庫,它們的名字分別為YZZ、YZZ1、YZZ2,然后在這三個資料庫中分別創建表t_Student,這些表的結構一樣,內容稍有差異,見下圖:
|
YZZ中t_Student的內容 --------------------- Id Name Age 1 張安 25 2 王鑫 22 3 周云 20 |
YZZ1中t_Student的內容 --------------------- Id Name Age 1 張安1 25 2 王鑫1 22 3 周云1 20 |
YZZ2中t_Student的內容 --------------------- Id Name Age 1 張安2 25 2 王鑫2 22 3 周云2 20 |
然后,我們在DeveloperSharp.xml這個組態檔中設定如上三個資料源的負載均衡策略,檔案內容如下:
<?xml version="1.0" encoding="utf-8" ?> <DeveloperSharp> <DatabaseClusterList> <DatabaseCluster Id="StudentData"> <Database Id="A1" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=YZZ;Uid=sa;Pwd=123"/> <Database Id="A2" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=YZZ1;Uid=sa;Pwd=123"/> <Database Id="A3" Enable="true" Weight="100" DatabaseType="SqlServer" ConnectionString="Server=localhost;Database=YZZ2;Uid=sa;Pwd=123"/> </DatabaseCluster> </DatabaseClusterList> </DeveloperSharp>

對此xml組態檔說明如下:
(1) 每一個DatabaseCluster節點代表了一組資料庫,此節點的Id值(本文示例值是:StudentData)后續會在程式中使用,
(2) Database節點中的Weight屬性代表了使用權重,本文示例的三個資料庫的Weight值分別是100、100、100,則這三個資料庫的負載均衡使用分配比例將會是1:1:1,若把這三個值分別設定為100、50、50,則這三個資料庫的使用分配比例將會變為2:1:1,設定成你想要的比例吧,
(3) Database節點中的Enable屬性代表了是否可用,true代表可用,false代表不可用,
接下來,我們看看怎么在程式中使用上述的這組資料庫及其組態檔,來實作負載均衡,
為了演示負載均衡效果,我們首先在Visual Studio中新建一個控制臺工程,并為工程參考添加了Entity Framework組件作為訪問資料庫的工具(你也可以換成其它資料庫訪問工具,原理一樣,完全不受影響),
然后,我們做如下四個操作,
【第一步】:為工程參考添加DeveloperSharp.dll這個核心組件,
【第二步】:在工程組態檔App.config(或Web.config)中添加appSettings節點,節點內容如下:
<appSettings> <add key="DatabaseType" value="" /> <add key="ConnectionString" value="" /> <add key="ErrorPage" value="" /> <add key="ErrorLog" value="D:\Test\Assist\log.txt" /> <add key="ConfigFile" value="D:\Test\Assist\DeveloperSharp.xml" /> </appSettings>
其中,ConfigFile的設定是為了鏈接前述的DeveloperSharp.xml這個組態檔,ErrorLog則是設定一個錯誤日志檔案,它們均需要設定為檔案的“絕對路徑”(此處使用“絕對路徑”而不是“相對路徑”,一是有利于安全性,二是有利于分布式部署)
【第三步】:創建一個StudentLB.cs類檔案,它就是資料庫負載均衡的核心器件,內容如下:
//這個屬性就是用作映射負載均衡, //其“值”需設定為前述DeveloperSharp.xml組態檔中某個DatabaseCluster節點的Id值, [DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster("StudentData")] public class StudentLB : DeveloperSharp.Structure.Model.DataLayer { //類中沒有任何代碼 }
說明:“負載均衡器”類(本篇為:StudentLB類)必須繼承自DeveloperSharp.Structure.Model.DataLayer類,并且在其上設定DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster屬性的初始化值為DeveloperSharp.xml組態檔中某個DatabaseCluster節點的Id值,
【第四步】:為控制臺應用類,添加通過負載均衡器(StudentLB類)訪問資料庫的代碼,注意:核心代碼就一行而已!!此示例連續3次訪問資料庫做同一操作,看會顯示什么結果,如下:
class Program { static void Main(string[] args) { string NameList = ""; //第一次訪問資料庫 var SLB = (new StudentLB()) as DeveloperSharp.Structure.Model.DataLayer; var db = new Entities(SLB.IDA.ConnectionString);//每次會根據配置的負載均衡策略輸出對應的ConnectionString t_Student Stu = db.t_Student.Where(t => t.Id == 3).FirstOrDefault(); NameList += Stu.Name; //第二次訪問資料庫 SLB = (new StudentLB()) as DeveloperSharp.Structure.Model.DataLayer; db = new Entities(SLB.IDA.ConnectionString);//每次會根據配置的負載均衡策略輸出對應的ConnectionString Stu = db.t_Student.Where(t => t.Id == 3).FirstOrDefault(); NameList += Stu.Name; //第三次訪問資料庫 SLB = (new StudentLB()) as DeveloperSharp.Structure.Model.DataLayer; db = new Entities(SLB.IDA.ConnectionString);//每次會根據配置的負載均衡策略輸出對應的ConnectionString Stu = db.t_Student.Where(t => t.Id == 3).FirstOrDefault(); NameList += Stu.Name; //輸出 Console.WriteLine(NameList); Console.ReadLine(); } }
從以上示例代碼我們可以清晰的得知:其實資料庫鏈接字串ConnectionString就是實作負載均衡的關鍵所在,而SLB.IDA.ConnectionString則每次會根據配置的負載均衡策略輸出對應的鏈接字串,
示例程式輸出顯示結果如下:
周云周云1周云2
最后提示一點:若要把一組資料庫的負載均衡應用改為單資料庫應用,只需要把DeveloperSharp.xml組態檔中DatabaseCluster節點下的Database節點數量設定為一個即可實作,
相關下載:
資料庫的負載均衡-示例代碼(dp1-DbBalance.rar)
資料庫的負載均衡-示例代碼(dp1-DbBalance.rar)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378074.html
標籤:.NET技术
上一篇:WPF 參考第三方庫的控制元件在設計器加上設計時資料和屬性
下一篇:WPF物件級資源
