.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>

对此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类)访问数据库的代码,注意:核心代码就一行而已!!此示例连续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
最后提示一点:若要把一组数据库的负载均衡应用改为单数据库应用,只需要把ds.xml配置文件中DatabaseCluster节点下的Database节点数量设置为一个即可实现。所以,聪明的你以后可以把你所有的数据库访问代码改为本文样式:)
总结
本文技术点思路梳理:
- 创建用来实施负载均衡的一组数据库。
- 通过ds.xml来配置负载均衡策略。
- 在App.config/Web.config中添加链接ds.xml的appSettings节点。
- 创建基于DeveloperSharp包的“负载均衡器”类(本篇为:StudentLB类)。
- 通过“负载均衡器”产生的ConnectionString链接数据库。
【附注】:文章开头给出的下载示例,均已成功运行通过。但有些辅助内容需要自己建立/设置(比如:数据库创建、链接字符串设置、文件配置、路径设置、参数设定、等等...)。调式时若遇异常报错,请仔细阅读+理解本文。技术交流/支持,请微信扫描二维码,备注“进群”!

.NET下数据库的负载均衡(有趣实验)的更多相关文章
- .NET下数据库的负载均衡(有趣实验)(续)
.NET下数据库的负载均衡(有趣实验)这篇文章发表后,受到了众多读者的关注与好评,其中不乏元老级程序员. 读者来信中询问最多的一个问题是:它是否能支持"异种数据库"的负载均衡?? ...
- 理解web服务器和数据库的负载均衡以及反向代理
这里的“负载均衡”是指在网站建设中应该考虑的“负载均衡”.假设我们要搭建一个网站:aaa.me,我们使用的web服务器每秒能处理100条请求,而aaa.me这个网站最火的时候也只是每秒99条请求,那么 ...
- 【Nginx】如何使用Nginx实现MySQL数据库的负载均衡?看完我懂了!!
写在前面 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以.接下来,就让我们一 ...
- 微软Azure 经典模式下创建内部负载均衡(ILB)
微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...
- Windows下apache+tomcat负载均衡
Windows下apache+tomcat负载均衡 网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录, ...
- 介绍一下再Apache下的Tomcat负载均衡的一些使用问题
在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...
- Linux环境下Nginx及负载均衡
Nginx 简介 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务.前向代理作为客户端的代理,服务端只知道代理的 IP 地址而不知道客 ...
- Windows下Nginx实现负载均衡
Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...
- Mac下配置Nginx负载均衡
1.首先在Mac下安装Nginx(可参考我的另一篇随笔http://www.cnblogs.com/malcolmfeng/p/6896703.html). 2.安装Tomcat,下载后,解压,bin ...
随机推荐
- 记一次react-hooks项目获取图表图片集合并生成pdf的需求
需求: 获取子组件中所有图片的dom元素并生成图片,再把生成的图片转化为pdf下载 难点 众所周知,react是单向数据流,倡导f(data)⇒ UI的哲学, 并不建议过多直接操作dom,但是生成图片 ...
- Solution -「Luogu 3959」 宝藏
果真是宝藏题目. 0x01 前置芝士 这道题我是真没往状压dp上去想.题目来源. 大概看了一下结构.盲猜直接模拟退火!\xyx 所需知识点:模拟退火,贪心. 0x02 分析 题目大意:给你一个图,可能 ...
- MLX90640 红外热成像仪测温模块简要介绍说明
MLX90640 红外热成像仪测温模块简要介绍说明 (1) A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广 ...
- 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS
[新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...
- OI的起点
经过几周的复制与粘贴建设与测试,我终于有了自己的博客! 本蒟蒻目前准初二,就读于深圳SFLS. 我以后会在这里发一些文章,希望大家多多支持.
- 我分析30w条数据后发现,西安新房公摊最低的竟是这里?
前两天一个邻居发出了灵魂质问:"为什么我买的180平和你的169平看上去一样大?" "因为咱俩的套内面积都是138平......" 我们去看房子,比较不同楼盘的 ...
- 喜讯:“行走的文档” 当选 Apache DolphinScheduler Committer啦
点击上方蓝字关注 Apache DolphinScheduler Apache DolphinScheduler(incubating),简称"DS", 中文名 "海豚调 ...
- Git 02 安装
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 这里以安装 ...
- Fiddler抓包工具下载安装及使用
一.Fiddler简介 简介: Fiddler是一款强大的Web调试工具,他能记录所有客户端和服务器的HTTP/HTTPS请求 工作原理: Fiddler是以代理web服务器的形式工作的,它使用代理地 ...
- R型医用变压器为什么越来越受大众喜爱?
传统的家用电器.手机行业在2018年给电子变压器领域产生重要的冲击性,现如今,智能医疗领域日渐增加,正好是R型医疗变压器行业转型的突破口. 近些年,在我国医疗器械领域因为一个新的科技进步和工程设计持续 ...