读写分离如何在业务中落地?

本文我们来探讨读写分离如何在业务中落地。

读写分离是业务开发中常用的技术手段,在面试中也是热点问题,今天我们要讲的是在什么业务场景下需要读写分离,读写分离实现的机制,以及实际生产中应用读写分离要注意的问题。

什么时候需要读写分离

互联网大部分业务场景都是读多写少的,对于电商等典型业务,读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈,同时也为了保证写库的成功率,一般会采用读写分离的技术来保证。

读写分离顾名思义,就是分离读库和写库操作,从 CRUD 的角度,主数据库处理新增、修改、删除等事务性操作,而从数据库处理 SELECT 查询操作。具体的实现上,可以有一主一从,一个主库配置一个从库;也可以一主多从,也就是一个主库,但是配置多个从库,读操作通过多个从库进行,支撑更高的读并发压力。

读写分离的实现是把访问的压力从主库转移到从库,特别在单机数据库无法支撑并发读写,并且业务请求大部分为读操作的情况下。如果业务特点是写多读少,比如一些需要动态更新的业务场景,应用读写分离就不合适了,由于 MySQL InnoDB 等关系型数据库对事务的支持,使得写性能不会太高,一般会选择更高性能的 NoSQL 等存储来实现。

MySQL 主从复制技术

读写分离是基于主从复制架构实现的,下面介绍一下 MySQL 中的主从复制技术。

binlog 日志

MySQL InnoDB 引擎的主从复制,是通过二进制日志 binlog 来实现。除了数据查询语句 select 以外,binlog 日志记录了其他各类数据写入操作,包括 DDL 和 DML 语句。

binlog 有三种格式:Statement、Row 及 Mixed。

  • Statement 格式,基于 SQL 语句的复制

在 Statement 格式中,binlog 会记录每一条修改数据的 SQL 操作,从库拿到后在本地进行回放就可以了。

  • Row 格式,基于行信息复制

Row 格式以行为维度,记录每一行数据修改的细节,不记录执行 SQL 语句的上下文相关的信息,仅记录行数据的修改。假设有一个批量更新操作,会以行记录的形式来保存二进制文件,这样可能会产生大量的日志内容。

  • Mixed 格式,混合模式复制

Mixed 格式,就是 Statement 与 Row 的结合,在这种方式下,不同的 SQL 操作会区别对待。比如一般的数据操作使用 row 格式保存,有些表结构的变更语句,使用 statement 来记录。

主从复制过程

MySQL 主从复制过程如下图所示:

image (3).png

  • 主库将变更写入 binlog 日志,从库连接到主库之后,主库会创建一个log dump 线程,用于发送 bin log 的内容。
  • 从库开启同步以后,会创建一个 IO 线程用来连接主库,请求主库中更新的 bin log,I/O 线程接收到主库 binlog dump 进程发来的更新之后,保存在本地 relay 日志中。
  • 接着从库中有一个 SQL 线程负责读取 relay log 中的内容,同步到数据库存储中,也就是在自己本地进行回放,最终保证主从数据的一致性。

读写分离要注意的问题

分布式系统通过主从复制实现读写分离,解决了读和写操作的性能瓶颈问题,但同时也增加了整体的复杂性。我们看一下引入主从复制后,额外需要注意哪些问题。

主从复制下的延时问题

由于主库和从库是两个不同的数据源,主从复制过程会存在一个延时,当主库有数据写入之后,同时写入 binlog 日志文件中,然后从库通过 binlog 文件同步数据,由于需要额外执行日志同步和写入操作,这期间会有一定时间的延迟。特别是在高并发场景下,刚写入主库的数据是不能马上在从库读取的,要等待几十毫秒或者上百毫秒以后才可以。

在某些对一致性要求较高的业务场景中,这种主从导致的延迟会引起一些业务问题,比如订单支付,付款已经完成,主库数据更新了,从库还没有,这时候去从库读数据,会出现订单未支付的情况,在业务中是不能接受的。

为了解决主从同步延迟的问题,通常有以下几个方法。

  • 敏感业务强制读主库

在开发中有部分业务需要写库后实时读数据,这一类操作通常可以通过强制读主库来解决。

  • 关键业务不进行读写分离

对一致性不敏感的业务,比如电商中的订单评论、个人信息等可以进行读写分离,对一致性要求比较高的业务,比如金融支付,不进行读写分离,避免延迟导致的问题。

主从复制如何避免丢数据

假设在数据库主从同步时,主库宕机,并且数据还没有同步到从库,就会出现数据丢失和不一致的情况,虽然这是一个极端场景,一般不会发生,但是 MySQL 在设计时还是考虑到了。

MySQL 数据库主从复制有异步复制、半同步复制和全同步复制的方式。

  • 异步复制

异步复制模式下,主库在接受并处理客户端的写入请求时,直接返回执行结果,不关心从库同步是否成功,这样就会存在上面说的问题,主库崩溃以后,可能有部分操作没有同步到从库,出现数据丢失问题。

  • 半同步复制

在半同步复制模式下,主库需要等待至少一个从库完成同步之后,才完成写操作。主库在执行完客户端提交的事务后,从库将日志写入自己本地的 relay log 之后,会返回一个响应结果给主库,主库确认从库已经同步完成,才会结束本次写操作。相对于异步复制,半同步复制提高了数据的安全性,避免了主库崩溃出现的数据丢失,但是同时也增加了主库写操作的耗时。

  • 全同步复制

全同步复制指的是在多从库的情况下,当主库执行完一个事务,需要等待所有的从库都同步完成以后,才完成本次写操作。全同步复制需要等待所有从库执行完对应的事务,所以整体性能是最差的。

总结

今天分享了读写分离的业务场景,MySQL 的主从复制技术,包括 binlog 的应用、主从复制的延时问题、数据库同步的不同机制等。

读写分离只是分布式性能优化的一个手段,不是任何读性能瓶颈都需要使用读写分离,除了读写分离,还可以进行分库分表,以及利用缓存,文件索引等 NoSQL 数据库来提高性能,这些内容在后面的课时中会讲到。

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

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

相关文章

深入解析Spring Boot集成MyBatis的多种方式

文章目录 1. 引言2. 传统的XML配置方式2.1 引入依赖2.2 配置数据源和MyBatis2.3 编写Mapper接口和XML映射文件2.4 使用Mapper 3. 注解配置方式3.1 引入依赖3.2 配置数据源和MyBatis3.3 编写Mapper接口3.4 使用Mapper 4. MyBatis动态SQL4.1 使用XML配置方式4.2 使用注解配置方式…

Salesforce×阿里云,影响几何?

实际上,从这个视角来看,Salesforce和阿里云的合作也恰在成为着这个市场的一个新催化剂。“期待Salesforce能给中国市场带来一些新的增量,包括对合作伙伴的态度,对产品的态度等等。”一位CRM相关人士告诉我们。 那么,阿…

slurm 23.11.0集群 debian 11.5 安装

slurm 23.11.0集群 debian 11.5 安装 用途 Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理&a…

【Jmeter】Jmeter基础4-Jmeter元件介绍之监听器

2.4、监听器 监听器主要用于收集、统计、查看和分析结果。 2.4.1、察看结果树 作用:查看取样器请求和响应结果,包括消息头,请求的数据,响应的数据等。一般在调试时才用,在实际运行压测时建议禁用,因为大量…

【NSX-T】6. 搭建NSX-T环境 —— 配置 Segment 网段

目录 6. 配置 SegmentLab 说明6.1 创建 Segment(1)创建 Web-Segment(2)创建 App-Segment 和 DB-SegmentApp-SegmentDB-Segment 6.2 验证 Segment(1)在 NSX Manager中查看(2)在vSpher…

前端走向未来:真相还是焦虑的贩卖?

目录 一、为什么会出现“前端已死”的言论 二、你如何看待“前端已死” 三、前端技术的未来发展趋势 四、前端人,该如何打好这场职位突围战? 我的其他博客 一、为什么会出现“前端已死”的言论 近来,IT圈内流传着“Java 已死、前端已凉”…

医院污水处理设备远程监控超标报警解决方案

行业背景 近年来,我国医疗机构建设得到了巨大的发展。根据《2022年我国卫生健康事业发展统计公报》,2022年末,全国医疗卫生机构总数达1032918个。截至2022年10月,根据全国排污许可证管理信息平台,共有 13316家医院核发…

修改Docker0和容器的地址

修改Docker0和容器的地址 1. 需求 默认服务器安装完Docker-ce后会给docker0分配172.17.0.1/16地址. 公司新接入一个网段正好与172.17.0.1/16冲突,此时访问这台服务器的容器时就会发生网络不可达. 2. 解决方法 修改/etc/docker/daemon.json 加入一个自定义网段 vim /etc/d…

想要在电脑桌面上使用手机便签怎么操作?

作为一名上班族,我们时常需要在电脑和手机之间同步使用便签,以记录工作、生活中的重要事项。然而,有些时候我们可能更习惯在手机上使用便签,但又希望在电脑桌面上也能够方便地查看和编辑这些便签。那么,如何在电脑桌面…

k8s-8 ingress

ExternalName类型 当集群外的资源往集群内迁移时,地址并不稳定,访问域名或者访问方式等会产生变化; 使用svc的方式来做可以保证不会改变:内部直接访问svc;外部会在dns上加上解析,以确保访问到外部地址。 …

20231214使用WPS将英文SRT字幕的全大写字符转换为首字母大写的小写字幕

20231214使用WPS将英文SRT字幕的全大写字符转换为首字母大写的小写字幕 2023/12/14 13:16 看英文纪录片,发现英文字母是全部大写。 所以需要整理成为小写的字幕【句子的首字符大小!】 https://re.talking.1080p.hdtv.x265.aac.mvgroup.org/index.php?t…

【owt-server】清理日志:owt、srs、ffmpeg

运行一段时间后,云主机的磁盘满了owt的日志和 srs的日志比较多。查看日志文件占用: du 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹 关闭owt-server dist# ./bin/stop-all.sh root@k8s-master-2K4G:~/p2p/zdsvr-20201229/dist# ./bin/stop-all.sh stopp…

Excel函数 - Filter函数六种查询用法

语法:filter(查询区域,条件,查不到结果返回的值) 注意条件是布尔表达式,这个条件为true,filter才返回结果,否则查不到结果。 一、单条件查询,返回多行多列记录 我们要查询“苹果”这个水果&a…

【强化学习-读书笔记】有限马尔可夫决策过程

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. BartoMDP 是强化学习问题在数学上的理想化形式,因为在这个框架下我们可以进行精确的理论说明 智能体与环境的交互 智能体与环境交互,会得到轨迹&…

蓝桥杯网络安全组竞赛

竞赛规则及说明 选拔赛时长:4h 决赛时长:4h 竞赛形式:线上比赛: 个人赛:一人一机,全程机考 大赛制定竞赛系统,在时间内提交答案到比赛系统,超时无法提交 机器环境: 电脑…

Navicat 技术指引 | 适用于 GaussDB 分布式的备份/还原功能

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

鸿蒙Web组件_学习

Web组件概述 Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。 页面加载:Web组件提供基础的前端页面加载的能力,包括加载网络页面、本地页面、Html格式文本数据。页面交互:Web组件提供…

产品经理之如何编写竞品分析(医疗HIS系统管理详细案例模板)

目录 一.项目周期 二.竞品分析的目的 三.竞品分析包含的维度 四.如何选择竞品 五.竞品画布 六.案例模板 一.项目周期 在整个项目的周期,产品经理所做的事情主要在项目前期做市场分析、需求调研等,下面一张图概况了整个项目周期产品经理、开发工程师…

成都工业学院2021级操作系统专周课程设计FCFS,SSTF,SCAN,LOOK算法的实现

运行环境 操作系统&#xff1a;Windows 11 家庭版 运行软件&#xff1a;CLion 2023.2.2 源代码文件 #include <iostream> #include <vector> #include <algorithm> #include <random> using namespace std;// 生成随机数 int generateRandomNumber…

工业级以太网交换机的功能介绍

随着互联网技术的迅猛发展&#xff0c;工业以太网在工业通信领域中发挥着重要作用。在整个工业通信行业中&#xff0c;工业以太网交换机作为关键的通信设备&#xff0c;具有非常重要的功能。那么&#xff0c;什么是工业以太网交换机呢&#xff0c;它有哪些功能呢&#xff1f; …