前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试系列-读写分离

面试系列-读写分离

作者头像
用户4283147
发布2022-10-27 15:59:36
3460
发布2022-10-27 15:59:36
举报
文章被收录于专栏:对线JAVA面试对线JAVA面试

MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离;

MySQL读写分离能提高系统性能

  • 物理服务器增加,机器处理能力提升。拿硬件换性能;
  • 主从只负责各自的读和写,极大程度缓解X锁和S锁争用;
  • slave可以配置myiasm引擎,提升查询性能以及节约系统开销;
  • master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步;
  • slave可以单独设置一些参数来提升其读的性能;
  • 增加冗余,提高可用性;

读写分离实现

方案一:代码层配置多个数据源

springboot配置多数据源,实现不同请求或者操作动态拦截,数据源切换;基于spring的aop实现: 用aop来拦截spring项目的dao层方法,根据方法名称就可以判断要执行的sql类型(即是read还是write类型),进而动态切换主从数据源;

方案二:基于中间代理层实现
  1. MyCat:需要DBA对每个表的分片策略进行配置和干涉;
  • 优点: 1. 功能较丰富,对读写分离和分库分表都有支持; 2. 易用,且对原有的应用系统侵入比较小,系统改造比较易于实现; 3. 支持故障切换;
  • 不足:1. 在整个系统中,MyCat作为一个单节点来路由其他数据库,在数据库比较多的情况下,MyCat本身的CPU性能压力会越来越大。因此,在生产系统中,MyCat不可避免的会需要一些高可用的手段;2. 同样,由于MyCat本身需要解析sql,也需要合并各个数据库返回的结果,本身CPU消耗会比较高,当达到一定临界点时,CPU可能会不堪重负;
  1. 基于mysql-connector-java的jdbc驱动方式

java程序通过在连接MySQL的jdbc中配置主库与从库等地址,jdbc会自动将读请求发送给从库,将写请求发送给主库;mysql的jdbc驱动还能够实现多个从库的负载均衡;

  1. 基于sharding-jdbc的方式
  1. MySQL-Proxy。MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua脚本进行SQL 判断;
  2. Atlas基于MySQL协议的数据中间层项目;它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性;每天承载的读写请求数达几十亿条;支持事物以及存储过程
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 对线JAVA面试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL读写分离能提高系统性能
  • 读写分离实现
    • 方案一:代码层配置多个数据源
      • 方案二:基于中间代理层实现
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档