【mysql数据库】读写分离的常见方案

【学习背景】
近期陆续接触到数据分析和数据可视化的项目,考虑到数据库的性能,涉及了读写分离,特地了解一下mysql读写分离的常见方案。做个学习笔记。

主要参考文献:
https://www.cnblogs.com/fyc119/p/7529902.html
https://yq.aliyun.com/articles/241744

【读写分离的目的】
通过数据库中间件,可以对数据库进行水平扩展,由原来单台数据库扩展到多台数据库,数据库中间件通过路由规则将数据的访问请求路由到其中一台数据库上,从而大大降低了数据访问的瓶颈和单台数据库的压力。通过数据库中间件还可以将DBA和研发进行解耦,提升DBA运维效率。

【关键问题】
怎么识别对数据库的访问是写还是读?如何分发到不同的数据库?

 

【常见方案】
方案1:应用程序根据业务逻辑来判断,增删改等写操作命令发给主库,查询命令发给备库。
特点:<1>数据库和应用程序强耦合,数据库如果有变化还好影响主库。<2>应用程序复杂化。

方案2:利用中间件来做代理,负责对数据库的请求识别出读还是写,并分发到不同的数据库中。
特点:<1> 数据库和应用程序弱耦合。<2> 代理存在性能瓶颈和可靠性风险增加,相对可控。
常见的中间件:<1> MySQL-Proxy  <2> Amoeba for MySQL(原文推荐这个,没机会对比过)  <3> mycat  <4> DBProxy  <5> 公有云的RDS数据库+数据库中间件,如华为云的RDS(关系型数据库)+DDM(分布式数据库中间件)

方案3:mysql集群模式,罕见,复杂度高,稳定性差。


【中间件代理方案】的特点:
1、proxy将数据库屏蔽在后端,而proxy根据路由将语句路由到对应DB执行。
2、查询性能提升:数据有多份副本,查询性能得到保证。
3、服务可用性:心跳检测保证其中某节点的某台机器宕了也不影响整体的服务,每个db具有HA。
4、proxy本身可能会成为性能瓶颈和单点故障,proxy也可以做成集群的负载均衡器。

相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页