徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?
完成:第一遍
1.理想的主从架构实现的效果是怎样的?
主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的
我们所希望的主从架构是 当写数据时,请求全部发到Master节点上 当需要读数据时,请求全部发到Slave节点上
并且多个Slave节点最好可以存在负载均衡,让集群的效率最大化
2.读写分离架构实现主要有哪两种方式?
方式一:读写分离代码层面实现分离逻辑
主要是代码来判断读写请求,然后分别进行处理 如果是读请求,直接去Slave从数据库中读取 如果是写请求,去Master主数据库中改写,然后主数据库对Slave从数据库进行数据同步
方式二:基于中间件,帮助管理分离逻辑
3.如何基于MyBatis和Spring在代码层面实现读写分离?
第一步:配置多个数据源,分别指向master和slave
第二步:自定义MyBatis拦截器,判断需要执行的SQL
第三步:如果是写请求,选择操作的数据源是master
第四步:如果是读请求,选择操作的数据源是slave
4.代码层面实现读写分离的优缺点是什么?
优点:实现简单、使用灵活
缺点:配置更改是需要修改代码、违反开闭原则
5.如何通过中间件来实现读写分离?
第一步:新增一个虚拟节点即Proxy中间件
第二步:所有数据库请求先发送到Proxy虚拟节点上,由Proxy虚拟节点来转发读写请求到对应的数据库
6.主流使用的中间件MyCat有什么优点?
优点一:开源,面向企业应用开发的大数据库集群
优点二:可以实现读写分离、故障转移