有趣實驗 .NET下數據庫的負載均衡

相關下載:
數據庫的負載均衡-示例代碼(dp1-DbBalance.rar)
數據庫的負載均衡-示例代碼(dp1-DbBalance.rar)
支持.Net/.Net Core/.Net Framework
為了演示數據庫的負載均衡(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
然后,我們在ds.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>

有趣實驗 .NET下數據庫的負載均衡

文章插圖
對此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代表不可用 。
(4)     .Net6中可通過把DatabaseType屬性的值設置為“MySql”、“SQLite”、“PostgreSql”、“Oracle”、其它等等 , 從而支持各種類數據庫 。
接下來 , 我們看看怎么在程序中使用上述的這組數據庫及其配置文件,來實現負載均衡 。
為了演示負載均衡效果,我們首先在Visual Studio中新建一個控制臺工程 , 并為工程引用添加了Entity Framework組件作為訪問數據庫的工具(你也可以換成其它數據庫訪問工具,原理一樣,完全不受影響) 。
然后 , 我們做如下四個操作 。
【第一步】:從NuGet引用DeveloperSharp包 。
【第二步】:在工程配置文件App.config(.Net6/VS2022中亦可添加此配置文件)中添加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\ds.xml" /></appSettings>其中,ConfigFile的設置是為了鏈接前述的ds.xml這個配置文件 。ErrorLog則是設置一個錯誤日志文件 。它們均需要設置為文件的“絕對路徑”(此處使用“絕對路徑”而不是“相對路徑” , 一是有利于安全性,二是有利于分布式部署)
【第三步】:創建一個StudentLB.cs類文件,它就是數據庫負載均衡的核心器件 , 內容如下:
//這個屬性就是用作映射負載均衡 。//其“值”需設置為前述ds.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屬性的初始化值為ds.xml配置文件中某個DatabaseCluster節點的Id值 。
【第四步】:為控制臺應用類,添加通過負載均衡器(StudentLB類)訪問數據庫的代碼,注意:核心代碼就一行而已??!绰柤m?次訪問數據庫做同一操作,看會顯示什么結果 。如下:

推薦閱讀