有趣实验 .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类)访问数据库的代码,注意:核心代码就一行而已?。〈耸纠?次访问数据库做同一操作,看会显示什么结果 。如下:

推荐阅读