百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

数据库读写分离,从主,各种都有自己的适合场景,找到最适合的

mhr18 2024-10-07 10:25 15 浏览 0 评论

数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。



(一)什么是读写分离

我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。

而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库)

而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。

  • 目的是什么?

我们一般应用对数据库而言都是“读多写少”,也就是说对数据库读取数据的压力比较大。读写分离的主要目的是降低主库的压力。 降低主库的读的压力。只是降低主库读的压力,并不是说不能用主库来查询(下单立刻查询订单状态)。

  • 前提条件:
  1. 读库 slave 需要跟写库 master 的数据一致。
  2. 写数据必须写到证据库。
  3. 读取数据必须到读库,这不一定,特殊的业务需求可能需要走主库,主从同步需要时间,可以强制路由走主库。
  • 行业用的多的

主多从 mysql 集群方案,至少两个库。一主一从。

  • 主从复制



Master my.cnf 配置:

binlog-do-db=tlshop
binlog-ignore-db=mysql
binlog_format=mixed
log-bin=mysql-bin
server-id=1

Slave my.cnf 配置

replicate-do-db=tlshop
replicate-ignore-db=mysql
server-id=2
#以下的配置是5.6 之前版本
#master-host=192.168.0.15
#master-port=3306
#master-user=root
#master-password=123456

slave 动态配置节点信息

1.进入master数据库,输入

 show master status\G



2.进入slave数据库,输入

change master to master_host='192.168.0.15', master_user='root', master_password='123456',
master_log_file='(输入1中show master status里面的 File)', master_log_pos=‘(输入1中show master status里面的 Position)’;
slave start;//启动

(二)读写分离

  • 业界方案

代理层 proxy: Atlas 开源软件

应用层: Sharding-jdbc

  • 代理层 Atlas

官网https://github.com/Qihoo360/Atlas

Atlas 是由 Qihoo 360 公司 Web 平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它在 MySQL 官方推出的 MySQL-Proxy 0.8.2 版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在 360 公司内部得到了广泛应用,很多 MySQL 很多 MySQL 业务已经接入了 Atlas 平台,每天承载的读写请求数达几十亿条。同时,有超过 50 家公司在生产环境中部署了 Atlas,超过 800 人已加入了我们的开发者交流群,并且些数字还在不断增加。




主要功能

  1. 读写分离。
  2. 从库负载均衡。
  3. IP 过滤。
  4. 自动分表。
  5. DBA 可平滑上下线 DB。
  6. 自动摘除宕机的 DB。

Atlas 配置



强制路由:

注释的方式强制走主库。

Alatas:

/*master*/ select 字段 from 表名

业务需要 下单即查

Sharding-jdbc

Sharding-JDBC 是一个开源的分布式数据库中间件,它无需额外部署和依赖,完全兼容 JDBC和各种 ORM 框架。 Sharding-JDBC 作为面向开发的微服务云原生基础类库,完整的实现了分库分表、读写分离和分布式主键功能,并初步实现了柔性事务。之前有专门的文章『互联网架构』(65)

https://shardingsphere.apache.org/index_zh.html

<dependency>
 <groupId>io.shardingjdbc</groupId>
 <artifactId>sharding-jdbc-core-spring-namespace</artifactId>
 <version>${sharding-jdbc.version}</version>
</dependency>
<dependency>
 <groupId>io.shardingjdbc</groupId>
 <artifactId>sharding-jdbc-core</artifactId>
 <version>${sharding-jdbc.version}</version>
</dependency>
<master-slave:data-source id="dataSource" master-data-source-name="dataSourceMaster"
slave-data-source-names="dataSourceSlave,dataSourceSlave,dataSourceSlave" strategytype="ROUND_ROBIN" />



PS:Alatas:

1.程序不需要管主从配置的具体细节

2.实现原理是 proxy,所以性能上会下降

3.而且需要维护其高可用

4.减少了程序员技能要求

5.只支持 mysql

Sharding-jdbc:

1.主从配置在程序中,所以增加了程序员的技术要求

2.实现原理是 jdbc 增强,所以支持任何数据库类型 性能比上面那个强

3.而且不需要维护。

4.Mysql、 Oracle、 sql server

相关推荐

使用 Docker 部署 Java 项目(通俗易懂)

前言:搜索镜像的网站(推荐):DockerDocs1、下载与配置Docker1.1docker下载(这里使用的是Ubuntu,Centos命令可能有不同)以下命令,默认不是root用户操作,...

Spring Boot 3.3.5 + CRaC:从冷启动到秒级响应的架构实践与踩坑实录

去年,我们团队负责的电商订单系统因扩容需求需在10分钟内启动200个Pod实例。当运维组按下扩容按钮时,传统SpringBoot应用的冷启动耗时(平均8.7秒)直接导致流量洪峰期出现30%的请求超时...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

Nacos简介—1.Nacos使用简介

大纲1.Nacos的在服务注册中心+配置中心中的应用2.Nacos2.x最新版本下载与目录结构3.Nacos2.x的数据库存储与日志存储4.Nacos2.x服务端的startup.sh启动脚...

spring-ai ollama小试牛刀

序本文主要展示下spring-aiollama的使用示例pom.xml<dependency><groupId>org.springframework.ai<...

SpringCloud系列——10Spring Cloud Gateway网关

学习目标Gateway是什么?它有什么作用?Gateway中的断言使用Gateway中的过滤器使用Gateway中的路由使用第1章网关1.1网关的概念简单来说,网关就是一个网络连接到另外一个网络的...

Spring Boot 自动装配原理剖析

前言在这瞬息万变的技术领域,比了解技术的使用方法更重要的是了解其原理及应用背景。以往我们使用SpringMVC来构建一个项目需要很多基础操作:添加很多jar,配置web.xml,配置Spr...

疯了!Spring 再官宣惊天大漏洞

Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也开的太大了!!你之前看到的这个漏洞已...

「架构师必备」基于SpringCloud的SaaS型微服务脚手架

简介基于SpringCloud(Hoxton.SR1)+SpringBoot(2.2.4.RELEASE)的SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、...

SpringCloud分布式框架&amp;分布式事务&amp;分布式锁

总结本文承接上一篇SpringCloud分布式框架实践之后,进一步实践分布式事务与分布式锁,其中分布式事务主要是基于Seata的AT模式进行强一致性,基于RocketMQ事务消息进行最终一致性,分布式...

SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌

SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...

开发好物推荐12之分布式锁redisson-sb

前言springboot开发现在基本都是分布式环境,分布式环境下分布式锁的使用必不可少,主流分布式锁主要包括数据库锁,redis锁,还有zookepper实现的分布式锁,其中最实用的还是Redis分...

拥抱Kubernetes,再见了Spring Cloud

相信很多开发者在熟悉微服务工作后,才发现:以为用SpringCloud已经成功打造了微服务架构帝国,殊不知引入了k8s后,却和CloudNative的生态发展脱轨。从2013年的...

Zabbix/J监控框架和Spring框架的整合方法

Zabbix/J是一个Java版本的系统监控框架,它可以完美地兼容于Zabbix监控系统,使得开发、运维等技术人员能够对整个业务系统的基础设施、应用软件/中间件和业务逻辑进行全方位的分层监控。Spri...

SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架

作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...

取消回复欢迎 发表评论: