分库分表篇-2.4 springBoot 集成Mycat(1.6) 分库分表,读写分离,分布式事务

news2024/9/24 17:14:35

文章目录

  • 前言
  • 一、分库分表:
  • 二、读写分离:
    • 2.1 读写分离的实现:
    • 2.2 主从延迟:
      • 2.2.1 主从延迟造成的问题:
      • 2.2.2 主从延迟的原因:
      • 2.2.3 主从延迟的解决方案:
        • 2.2.3.1 db 层面:
        • 2.2.3.2 程序层面:
  • 三、全局id:
  • 四、分布式事务:
  • 总结


前言

springboot 在整合mycat 之后,对于分库分表,读写分离,分布式事务 这些常用的业务处理是怎么实现的。


一、分库分表:

分库分表 主要取决于mycat server 端 中 schema.xml 配置文件对数据库表单的分片规则进行;
在这里插入图片描述

二、读写分离:

2.1 读写分离的实现:

分库分表 主要取决于mycat server 端 中 schema.xml 配置文件对数据库节点主库和从库的设置实现:

在这里插入图片描述

读写分离的前提是要实现mysql 主从复制,其中schema.xml 中 writeHost标签可以定义写库,readHost 可以定义读库;

2.2 主从延迟:

2.2.1 主从延迟造成的问题:

当写入数据后,然后进行数据读取,因为写入的是主库,读取的是从库,数据从主库到从库会存在一定的时间延迟,尤其是在高并发情况下这个延迟时间可能会比较大,从而造成从从库读取不到数据的情况出现;

2.2.2 主从延迟的原因:

在这里插入图片描述

  • master服务器将数据的改变都记录到二进制binlog日志中,只要master上的数据发生改变,则将其改变写入二进制日志;

  • salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件

  • 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中

  • 从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致

  • 最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒.

主库针对写操作,顺序写binlog,从库单线程去主库读binlog,从库单线程去主库 取到binlog 在本地随机写,来保证主从数据逻辑上的一致。主库对所有DDL和DML产生binlog,binlog是顺序写,效率很高。从库的SlaveIORunning 线程到主库取binlog(因为要保证事务的顺序性所以是单线程进行),效率也比较高。下一步从库的SlaveSqlRunning 将主库的 DDL和DML在从库上执行(虽然在在MySQL 5.7版本之后,从库可以适应并行复制来提高效率,但是搞并发情况下依然可能有问题出现),DDL 和 DML 是随机写,成本很高,还有可能从库上其他查询产生的lock争用,所以从库 sql Thread 线程可能无法及时的将数据写入到从库中;

2.2.3 主从延迟的解决方案:

主从延迟可以从db 和程序层面进行优化;

2.2.3.1 db 层面:

主要解决主从数据同步,从库的延迟问题通过 SHOW SLAVE STATUS 获取主从同步延迟的时间(数据越小延迟越低):

在这里插入图片描述

  • 并在从库中开启并行复制,使用多个线程读取中继日志然后进行从库的写入;
    MySQL从5.6版本开始支持并行复制,对于多线程的场景,可以有效减少复制延迟,并且从 5.7 版本开始进一步的优化。

并行复制的基本原理是,如果在主库中同时进行的多个事务没有相互冲突,在从库端这多个事务也可以同时进行,而不需要按原始顺序逐个执行,从而提高了复制的效率和速度,进而减少了主从之间的延迟。

基于此原理,在 MySQL 5.7 及之后的版本中,MySQL 进一步引入了逻辑时钟的概念。在 5.7 版本中,MySQL 通过一个全局逻辑时钟来对并行事务进行排序,每一个事务提交的时候都会写一个逻辑时钟值,然后在从库端通过逻辑时钟来对这些事务进行排序,以此来决定哪些事务之间的准备阶段(apply stage)可以并发执行。

需要注意的是,并行复制并不意味着从库可以无限制地进行并发复制,还需要根据从库的具体硬件情况和业务场景来确定最大并发度,避免对从库的性能产生过大影响。

  • 从库配置并行复制:
    在主库已经开启bin-log 后在从库中,添加或修改下列参数:
[mysqld]
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4

slave_parallel_type:设置为“LOGICAL_CLOCK”以启用基于逻辑时钟的并行复制。

slave_parallel_workers:设置并行复制的线程数。如果你有一个强大的从库服务器和多核处理器,可以尝试增加这个值。但要注意,设置过大可能会导致从库上过多的上下文切换,反而降低性能。

2.2.3.2 程序层面:

  • 缓存层,在前端访问和数据库之间,添加缓存,优先从缓存读取,减弱数据库的并发压力,Slave 只作为数据备份,不分担访问流量;
  • 将大事务拆为小事务,不必要的地方移除事务;
  • 在主库插入数据后,进行多次查询或者睡眠一定的时间然后在进行查询;

三、全局id:

可以使用mycat 服务端,使用雪花算法来生成全局id:在server.xml 配置通过时间戳来生成id:
在这里插入图片描述

四、分布式事务:

Mycat在1.6版本以后已经完全支持 XA(2PC) 实现分布式强事务类型了;springboot 中的实现在方法中增加 @Transactional 接口
在这里插入图片描述

  • 当应用程序方法中使用了 @Transactional 注解时,Spring 会在方法执行前启动一个事务,并将事务请求发送给 Mycat Server。然后,应用程序方法会在这个事务的上下文中执行相关的数据库读写操作等。
  • 在方法执行期间,如果有其他数据库操作需要参与到同一个分布式事务中,Mycat Server 会将这些数据库操作拆分为相应的子事 务,并分发给各个后端 MySQL 实例执行。
  • 每个后端MySQL实例在本地事务中执行接收到的SQL操作。
  • 在事务的执行过程中,Mycat Server获取和记录每个后端MySQL实例的事务状态。
  • Mycat Server收集到某个后端MySQL实例操作失败的结果时,它将这个失败结果通知给应用程序事务管理器,以便由事务管理器来决定回滚整个分布式事务;
  • 在调用方应用程序方法执行结束后,Spring事务管理器会根据方法执行的成功与否以及其他业务规则,决定是提交整个事务还是回滚整个事务
  • Spring 会将提交或回滚的指令发送给 Mycat Server,Mycat Server 接收到指令后会进一步将指令发送给各个后端 MySQL 实例。

总结

以上就是今天要讲的内容,本文阐述了使用mycat 如何完成分库分表,配置读写分离,以及基于xa 事务实现分布式事务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/958307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果手机QQ聊天记录怎么恢复?不容错过的3个好方法!

之前把很久不用的QQ给卸载了,但是现在突然想起来里面有很重要的聊天记录,友友们,有什么办法能够帮我找回聊天记录吗? 随着微信的崛起,现在很多人已经不怎么使用QQ了,因此很多小伙伴都把QQ卸载了。但是卸载后…

BST55电子式流量传感器

原理、 结构 基于热式原理, 在封闭的探头内包含两个电阻, 其中一个被加热作为探 测电阻, 另一个未被加热作为基准电阻, 当介质流动时, 加热电阻 上的 热量被带走, 电阻值被改变, 两个电阻差值被…

分库分表篇-2.2 Mycat-分片规则

文章目录 前言一、Mycat table的分片:二、常用分片规则:2.1 id 范围分片:2.2 id 取模分片:2.3 按照枚举值 分片:2.4 一致性hash hash 环:2.5 ER 分片:2.6 库内分表:2.7 全局表&#…

七天内连续登陆天数

一、需求描述 业务理解1:七天内最大连续登陆天数 业务理解2:七天内最近连续登陆天数(最近一天如果未登陆则连续登陆天数为0) 示例说明: 二、数据结构 流量表 tracking 字段名字段中文名userid用户iddt分区 口径描…

如果你觉得自己很失败,请观看此内容 视频学习

目录 什么是成功?​​​​​​​ How can we succeed in such an unfair world? 我们如何在这个不公平的地球上获得成功? 如何去找到自己的不公平优势呢? 最开始也有常有人跟她说你做视频是赚不到钱的 你做了,并不代表你做…

河道漂浮物检测:安防监控/视频智能分析/AI算法智能分析技术如何助力河道整治工作?

随着社会的发展和人们生活水平的进步,水污染问题也越来越严重,水资源监管和治理成为城市发展的一大困扰,水面上的漂浮垃圾不仅会影响河道生态安全并阻碍船舶航行,还会影响人们的身体健康。 TSINGSEEE青犀AI智能分析平台在环保场景…

当连锁零售超市遇上温湿度监控,简直是王炸!

在食品行业中,温湿度监控是确保食品质量和安全性的至关重要的环节之一。温度和湿度是影响食品保存期限、品质、口感以及微生物滋生的关键因素。通过有效的监测和管理,可以降低食品受损和变质的风险,保障消费者的健康和权益。 客户案例 福建某…

设计模式之建造者模式与原型模式

目录 建造者模式 简介 使用场景 优缺点 模式结构 实现 原型模式 简介 应用场景 优缺点 模式结构 实现 建造者模式 简介 将复杂对象的构建与表示进行分离,使得同样的构建过程可以创建不同的表示。是一个将复杂的对象分解为多个简单的对象,然…

Elasticsearch分布式搜索结果处理

1.排序 elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 1.1.普通字段排序 keyword、数值、日期类型排序的语法…

四季同行·雷锋家乡学雷锋“青柚课堂“讲师培训

为了给益阳市“青柚课堂”性教育志愿者讲师团队增加新鲜血液,8月27日,我机构在益阳市红十字救护培训基地开展了湖南省第二期"四季同行雷锋家乡学雷锋"孵化项目"青柚课堂"乡村女童性教育推广计划2023年师资培训。本次活动由我机构“蚂…

虹科方案 | 车辆零部件温度采集解决方案

虹科提供的车辆零部件温度监控与采集解决方案,通过热电偶模块来采集、监控、处理温度数据,可以通过CAN / CAN FD进行传输,确保车辆系统的正常运行和安全性。 文章目录 一、热电偶在汽车领域的应用什么是热电偶模块?热电偶模块如何…

PSP - 蛋白质结构预测 OpenFold Multimer 训练模型的数据加载

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132597659 OpenFold Multimer 是基于深度学习的方法,预测蛋白质的多聚体结构和相互作用。利用大规模的蛋白质序列和结构数据&#xff…

Unity 顶点vertices,uv,与图片贴图,与mesh

mesh就是组成3d物体的三角形们。 mesh由顶点组成的三角形组成,三角形的大小 并不 需要一样,由顶点之间的位置决定。 mesh可以是一个或者多个面。 贴图的原点在左下角,uv是贴图的坐标,数量和顶点数一样(不是100%确定…

Unity MonoBehaviour事件函数的生命周期

Unity运行时候的默认的几个函数的执行顺序: 首先是Awake,OnEnable,Start等,后面是FixUpdate Update 最后是OnDisable、OnDestroy

《CTFshow-Web入门》09. Web 81~90

Web 入门 索引web81题解 web82题解原理 web83题解 web84题解 web85题解 web86题解 web87题解原理 web88题解 web89题解 web90题解 ctf - web入门 索引 web81:include() 利用,一句话木马之 Nginx 日志利用。web82~86:include() 利用&#xff…

pyqt5的 Qprogressbar 如何设计得好看一些?

参考官网内容 style 自定义: https://doc.qt.io/qtforpython-5/overviews/stylesheet-examples.html#customizing-qprogressbar 1.圆角,浅蓝色 QProgressBar {border: 2px solid grey;border-radius: 5px; }QProgressBar::chunk {background-color: #0…

Halo2、Caulk+、Baloo、Cq Lookup argument细览

1. 引言 本文主要参考2023年2月以太坊基金会Mary Maller在第13届 BIU Winter School on Cryptography上的视频分享 A Close Look at a Lookup Argument - Mary Maller。 以证明 0 ≤ x < 4 0\leq x <4 0≤x<4为例&#xff0c;相比于使用算术化电路中如何使用定制gat…

免费s5爬虫ip:真正靠谱还是泡沫?

在网络世界中&#xff0c;许多人寻找免费的s5爬虫ip以实现匿名上网和绕过地域限制。然而&#xff0c;关于这些免费服务的可信度一直存在争议。本文将探讨免费s5爬虫ip背后的真相&#xff0c;并帮助您判断它们到底是值得依赖还是只不过虚幻泡沫。 1、充斥着风险 大部分提供免费…

不平衡的数据集将如何影响模型的性能?示例说明

一、说明 朋友们&#xff0c;您可能听说过&#xff0c;在不平衡数据集上训练的模型可能会受到泛化不佳和少数类检测减少的影响。在接下来的几篇文章中&#xff0c;我将给你一个例子来展示不平衡的数据集如何影响模型的性能&#xff0c;以及我们如何处理这个问题。在这篇文章中&…

【pdf密码】忘记了密码该如何编辑PDF文件?

PDF文件设置了密码&#xff0c;无法编辑PDF文件&#xff0c;如果忘记了PDF密码&#xff0c;无法取消限制编辑&#xff0c;那么这种情况&#xff0c;我们该如何解决&#xff1f;分享两个方法。 方法一&#xff1a; 将PDF文件转换为其他格式&#xff0c;这里&#xff0c;我们可…