在使用缓存后,使大部分的数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(包括未命中缓存的,和缓存过期的)和全部的写操作需要访问数据库,当网站的访问量继续增加后,数据库会因为负载压力过高导致成为网站的性能瓶颈。
目前大部分的主流数据库都提供了主从热备功能,通过配置两台数据库的主从关系,可以将一台数据库服务器的数据同步到另一台服务器上,网站利用数据库的这一功能,可以实现数据库的读写分离,从而改善数据库的负载压力。
应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据,为了便于应用程序访问读写分离后的数据库,通常在应用服务器端用专门的数据访问模块(也叫数据访问层),使数据库读写分离对应用透明。
数据库读写分离
架构如下图:
总结:
数据库读写分离缓解了数据库的压力,也提升了整个网站的性能,但同时会衍生出来两个问题:
1,数据同步的问题。一般利用数据库自带的数据复制机制解决,可以参考:http://note.youdao.com/noteshare?id=1245e28ab69dc951bb9df9f53e9abc16&sub=E1F1B4AAEB9140D6B37B1998163DBD0B
2,应用程序对于数据源选择的问题。对于应用程序来说,后面的写操作全部要走主库,而读操作要走从库。这些操作一般通过中间件数据访问层来完成。
经过数据库读写分离,这个阶段,系统并发处理能力理论上可以达到5000+了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2013-07-24 数据结构和算法系列3 栈