当前位置:网站首页>MySQL读写分离的三种实现方案
MySQL读写分离的三种实现方案
2022-08-03 18:38:00 【m0_67401660】
MySQL读写分离的三种实现方案
文章目录
一、搭建一个“一主两从”的MySQL集群
先搭建一个mysql集群(一主两从),半同步复制:mysql 半同步复制,三个节点。
二、读写分离实现:方案一
2.1 配置多个数据源
(1)、基于 Spring/Spring Boot,配置多个数据源(例如2个,master 和 slave)
(2)、根据具体的 Service 方法是否会操作数据,注入不同的数据源,1.0版本
2.2 使用AbstractRoutingDataSource
(3)、改进一下1.1:基于操作 AbstractRoutingDataSource 和自定义注解 readOnly 之 类的,简化自动切换数据源
(4)、改进二下1.2:支持配置多个从库;
使用AbstractRoutingDataSource和自定义注解。
(5)、改进三下1.3:支持多个从库的负载均衡
思路:在myreadwritesep-abstract-rounting-v1基础之上,多一个read类型的数据源,然后判断注解的name为read时候,在read01和read02 中随机选择。
-- 创建用户, 在主节点上执行
create schema performance;
CREATE USER 'performance'@'%' IDENTIFIED BY 'performance^pw';
GRANT ALL ON performance.* TO 'performance'@'%';
flush privileges;
-- 在主节点上执行
create table performance.t_model_info(
m_id int(11) not null primary key auto_increment comment '主键,自增',
model_type varchar(128) not null unique comment '模块类型',
model_name varchar(128) not null unique comment '模块名称',
model_status tinyint(1) not null default 0 comment '0 启用, 1 不启用'
)Engine=InnoDB AUTO_INCREMENT=1 default CHARSET=utf8mb4;
2.3 这个版本的缺点:
- 侵入性强;
- “写完读”不一致问题,server方法,先向主库insert语句,然后立刻select,却查不出数据;
三、读写分离实现:方案二
3.1 通过ShardingSphere-jdbc 实现读写分离
改进v1.0,ShardingSphere-jdbc 的 Master-Slave 功能
1)SQL 解析和事务管理,自动实现读写分离
- 第一,将事务都管理起来;
- 第二,做SQL解析,自动实现读写分离;
2)解决”写完读”不一致的问题
- 如果在一个事务中,先写后读,该框架有个优化;在一个事务里,前几个都是毒,正常读就行,只要碰到一个写,后面不管有多少条读,都走主库。这样就完美解决了“写完读”不一致的问题。
通过Shardingsphere-jdbc框架实现读写分离。
3.2 这个版本的缺点:
- 对业务还是有侵入性(这一套东西,需要配置到业务代码中);
- 对已存在的旧系统改造不友好;
四、读写分离实现:方案三
4.1 通过ShardingSphere-Proxy 实现读写分离
改进v2.0, MyCat/ShardingSphere-Proxy 的 Master-Slave 功能
1)需要部署一个中间件,规则配置在中间件
2)模拟一个 MySQL 服务器,对业务系统无侵入
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

Alibaba senior experts create a learning architecture from scratch, including Alibaba's internal technology stack PPT, PFD actual combat

多肽介导PEG磷脂——靶向功能材料之DSPE-PEG-RGD/TAT/NGR/APRPG

不要小看 WebSocket!长连接、有状态、双向、全双工都是王炸技能

学弟:我适不适合转行做软件测试?

异常与智能指针

BinomialTree 二叉树

使用安全浏览器将网页保存为pdf的方法步骤

Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual

CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes), problem: (D) Magical Array

【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
随机推荐
flink-sql 客户端,咋回事 我show tables 报错
Arduino实验三:继电器实验
微信小程序分享功能
SQL代码需要供其他人复用,为什么传统的复制代码不可靠?
机器学习的方法总结
基于ck+redash构建MySQL慢日志+审计日志展示平台
动态接口比例性能测试实践
typescript学习笔记
Web项目中简单使用线程池
Online monitoring of UPS power supply and operating environment in the computer room, the solution is here
2022/08/02------丑数
借助kubekey极速安装Kubernetes
unity3d-游戏物体控制方法
rhel8.3 系统下修改有线网卡配置信息实现联网
Selenium of reptiles
广告电商、泰山众筹、链动2+1,这3个模式到底怎么样?
多线程和并发编程(四)
Flask框架——项目可安装化
warnings.warn(“Title is more than 31 characters. Some applications may not be able to read the file
爬虫之selenium