🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,优快云博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年优快云博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
数据库读写分离是指将数据库的读操作和写操作分别放置到不同的服务器上进行处理。读操作通常比较频繁,而且不需要对数据进行修改,因此可以通过增加读服务器的数量来提高系统的读取性能。而写操作相对较少,但是需要对数据进行修改,因此只需要在主服务器上进行处理即可。
数据库读写分离的主要优点有:
-
提高读取性能:通过增加读取服务器的数量,可以提高系统的读取性能,从而更好地满足用户的需求。
-
减轻主服务器负担:将读操作放置到从服务器上进行处理,可以减轻主服务器的负担,从而提高系统的稳定性和可靠性。
-
降低系统成本:通过使用廉价的从服务器来处理读操作,可以降低系统的成本,从而更好地满足企业的需求。
-
提高数据安全性:通过将读操作分离到从服务器上,可以减少主服务器被攻击的风险,从而提高数据的安全性。
本文主要介绍DeveloperSharp的使用,DeveloperSharp是一个研发中大型项目必备的系统平台,也是一个低代码平台。
它主要包括了如下一些功能:
- 基于Sql语句、存储过程、事务、分页的数据库操作。并几乎支持市面上所有种类的数据库。
- 图片操作。裁剪、缩放、加水印。
- http请求调用(Post与Get)
- 高效分页
- Web服务/WebApi的负载均衡
- 数据库的负载均衡,以及读写分离
- CORS跨域访问
- UUID全球通用唯一识别码
- MQ消息队列(请另行使用DeveloperSharp.RabbitMQ包)
- Redis缓存(请另行使用DeveloperSharp.Redis包)
- “异种数据库”的负载均衡
- 其他相关功能
🚀一、数据库读写分离
🔎1.读写分离和主从配置的关系
数据库读写分离和主从配置都是实现数据库高可用的常用方法,但两者有一定关联。
主从配置是指将数据库分成主节点和多个从节点,主节点负责写操作和同步数据到从节点,从节点负责读操作。主节点通常是一个可写的数据库实例,从节点则是只读副本,只能接收主节点的数据同步。
数据库读写分离是指将数据库的读和写操作分别交给不同的服务器处理,以提高数据库读写效率和负载均衡。通常将写操作交给主节点处理,将读操作交给从节点处理,从而减轻主节点的压力,提高系统性能和可用性。
主从配置是数据库高可用的一种实现方式,在主从配置中实现数据库读写分离可以进一步提高系统的稳定性和性能。同时,数据库读写分离也可以独立于主从配置实现,例如使用代理或负载均衡器将读写操作分发到不同的数据库实例上实现读写分离。
实现数据库读写分离通常需要进行主从配置。主从配置是指将一个数据库服务器作为主服务器(也称为主库),而将其他的数据库服务器作为从服务器(也称为从库)。在这种配置下,主服务器负责写操作以及同步数据到从服务器,而从服务器则负责处理读操作。
通常情况下,数据库读写分离的实现需要进行以下步骤:
-
配置主服务器:在主服务器上安装数据库软件,并配置数据库实例。在配置数据库实例时,需要设置主库的参数,例如binlog等。
-
配置从服务器:在从服务器上安装数据库软件,并配置数据库实例。在配置数据库实例时,需要设置从库的参数,例如relay log等。从服务器需要通过主服务器的binlog进行数据同步。
-
通过复制功能实现数据同步:主服务器会将写入的数据同步到从服务器,实现数据的备份和同步。为了实现数据同步,需要在主服务器上设置复制用户和权限,并在从服务器上配置复制功能。
-
配置读写分离的客户端:由于从服务器的读操作相对主服务器的写操作具有更高的性能和响应速度,因此需要对读操作进行负载均衡和优化。通过在客户端程序中配置读写分离的策略,可以实现对主从数据库的负载均衡和优化。
需要注意的是,数据库读写分离的实现需要保证主从服务器之间的数据同步和一致性。在进行数据同步时,需要考虑到网络延迟、复制冲突等问题,从而保证数据的准确性和完整性。
🔎2.2-8原则
读写分离的2-8原则是指,在数据库读写分离架构中,80%的请求应该被分发到从库(读库),而只有20%的请求才会被分发到主库(写库)。此原则的目的是确保从库能够承担足够大的读负载,从而提高系统并发能力和响应速度,同时减轻主库的压力和提高系统的可用性。
实现2-8原则,需要以下几点注意:
-
合理的负载均衡策略:通过使用负载均衡器或代理服务器,将读请求分发到不同的从库,以实现负载均衡和优化性能。
-
数据同步延迟的控制:从库的数据同步延迟会影响读取到最新数据的响应速度和准确性。因此,需要控制从库与主库的同步延迟,确保从库的数据比主库的数据更新。
-
主库的读写分离:在主库上也可以实现读写分离,将读请求交给从库处理,以减轻主库的压力。同时,主库上的写请求仍然需要同步到从库中。
-
应用程序负责分发请求:应用程序需要根据业务需求合理地分发读写请求,以实现2-8原则。例如,对于需要读取实时数据或需要立即修改数据的场景,应将请求发送给主库。
遵循2-8原则,可以更好地利用数据库资源,提高系统稳定性和性能,但具体实现还需要根据实际情况进行优化和调整。
🔎3.修改配置
本文主要是基于前面【数据库负载均衡】案例来的
修改DeveloperSharp.json配置文件
{
"DeveloperSharp":
{
"DatabaseClusterList":
[
{
"Id":"BRead",
"DatabaseCluster":
[
{
"Id":"A1",
"Enable":"true",
"Weight":"100",
"DatabaseType":"SqlServer",
"ConnectionString":"Server=localhost;Database=BaseRead;Uid=sa;Pwd=1"
}
]
},
{
"Id":"BWrite",
"DatabaseCluster":
[
{
"Id":"B1",
"Enable":"true",
"Weight":"100",
"DatabaseType":"SqlServer",
"ConnectionString":"Server=localhost;Database=BaseWrite;Uid=sa;Pwd=1"
}
]
}
]
}
}
🔎4.创建负载均衡器
[DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster("BRead")]
public class Base4Read : DeveloperSharp.Structure.Model.DataLayer
{
//类中没有任何代码
}
[DeveloperSharp.Structure.Model.LoadBalance.DataSourceCluster("BWrite")]
public class Base4Write : DeveloperSharp.Structure.Model.DataLayer
{
//类中没有任何代码
}
此后,我们只需在相关程序代码中区分使用Base4Read与Base4Write这两个类,即可灵活实现数据库的读写分离。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”