1.忍受大法

第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~

如果业务对于数据一致性要求不高,我们就可以采用这种方案。

2.数据同步写方案

主从数据同步方案,一般都是采用的异步方式同步给备库。

我们可以将其修改为同步方案,主从同步完成,主库上的写才能返回。

  1. 业务系统发起写操作,数据写主库
  2. 写请求需要等待主从同步完成才能返回
  3. 数据读从库,主从同步完成就能读到最新数据

这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。

「不过,由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。」

这一点对于现在在线业务,可能无法接受。

3.选择性强制读主

对于需要强一致的场景,我们可以将其的读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。

这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。

不过这种方案相对于浪费了另一个数据库,增加主库的压力。

4.中间件选择路由法

这种方案需要使用一个中间件,所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。

这时流程如下:

  1. 写请求,中间件将会发到主库,同时记录一下此时写请求的 key(操作表加主键等)
  2. 读请求,如果此时 key 存在,将会路由到主库
  3. 一定时间后(经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库

这种方案,可以保持数据读写的一致。

但是系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。

5.缓存路由大法

这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。

这时流程如下:

  1. 写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时
  2. 读请求首先判断缓存是否存在
    • 若存在,代表刚发生过写操作,读请求操作主库
    • 若不存在,代表近期没发生写操作,读请求操作从库

这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。

总结

我们引入主从架构,数据读写分离,目的是为了解决业务快速发展,请求量变大,并发量变大,从而引发的数据库的读瓶颈。

不过当引入新一个架构解决问题时,势必会带来另外一个问题,数据库读写分离之后,主从延迟从而导致数据不一致的情况。,

为了解决主从延迟,数据不一致的情况,我们可以采用以下这几种方案:

  1. 忍受大法
  2. 数据库同步写方案
  3. 选择性强制读主
  4. 中间件选择路由法
  5. 缓存路由大法

Mysql主从延时解决办法相关推荐

  1. mysql 1032_[MySQL] SQL_ERROR 1032解决办法

    一.缘由: 在主主同步的测试环境,由于业务侧没有遵循同一时间只写一个点的原则,造成A库上删除了一条数据,B库上在同时更新这条数据. 由于异步和网络延时,B的更新event先到达A端执行,造成A端找不到 ...

  2. 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法

     mysql安装完之后,登陆后发现只有两个数据库:mysql>show databases; +--------------------+ | Database           | +- ...

  3. mysql客户端连接10060,Navicat远程连接MySQL出现10060解决办法小结

    Navicat远程连接MySQL出现10060解决办法小结 Navicat远程连接MySQL出现10060解决办法小结 问题背景:服务器环境使用的是lnmp一键包,mysql版本5.7.26,phpM ...

  4. .net core 1.1 mysql_Asp.net Core 1.1 升级后操作mysql出错的解决办法

    这篇文章主要介绍了Asp.net Core 1.1 升级后操作mysql出错的解决办法,需要的朋友可以参考下 遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到Miss ...

  5. mysql数据库 中文乱码_数据库 MySQL中文乱码解决办法总结

    MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1 ...

  6. 有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断

    个人不是很喜欢在技术上跟人互喷,尤其是不在同一个岗位上的人.一方面本人的性格如此,另一方面,我自身的口水也确实是不行,人生经历了第一次的双11洗礼,在大促的环境下,总算知道了有些东西是否应该规避,这次 ...

  7. Mysql 主从延时监控(pt-heartbeat)详解

    主从延时在主从环境中是一个非常值得关注的问题,有时候我们可以通过show slave status命令查看Seconds_Behind_Master值来分析主从的延时情况:但是由于该值是来自binlo ...

  8. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 " ...

  9. MySQL ERROR 1878 解决办法

    MySQL ERROR 1878报错解决办法 错误重现 Part1:大表修改字段 mysql> ALTER TABLE `erp` -> ADD COLUMN `eas_status`  ...

最新文章

  1. pxe cobbler ipmi bmc
  2. tensorflow下载鸢尾花数据集
  3. MySQL给一个字段递增赋值
  4. UA MATH565C 随机微分方程I SDE的定义与例子
  5. 三大主流消息中间件优缺点
  6. Hive | 加载数据后,出现字段显示为 NULL的问题
  7. flink sql的datastream与dataset初始化代码汇总
  8. CSS做个Switch开关
  9. 爱奇艺如何开启两指双击触发奇观功能
  10. 初识公有云--公有云的相关概念
  11. android ndk怎样加载o文件_Android开发:JNI与NDK全面剖析与实战
  12. Vue.js实际开发案例(不断整理中...)
  13. 金蝶kis商贸采购单商品代码_金蝶KIS云商贸版(采购模块)常见问题汇总
  14. 【云原生】—— 学习云计算应用开发你需要掌握的五大技能
  15. python mac 启动台 图标 跳跃_详解macOS的Mac电脑上使用“启动台”(Launchpad)
  16. 欢迎光临 Javen-Studio 新网址:http://javenstudio.org
  17. 老年人怎么办理美国旅游签证?
  18. 华为更新云空间配置 显示无法连接服务器,更新服务器连接失败
  19. Godaddy域名与空间解析教程(全)
  20. Linux系统之LVM(逻辑卷管理)

热门文章

  1. 数据结构--------------静态表的希尔排序
  2. 使用js实现换肤功能
  3. 第八课 RNN条件生成与Attention机制
  4. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
  5. 大学python笔记_Python 上手笔记
  6. linux 管道文件上机总结,[转载]LINUX 管道 fifo 等总结
  7. RT-Thread在github上的教程中图片显示不出来问题的解决方法
  8. sdk怎么用_PLC不支持OPC UA怎么办?别问了看完你就懂了
  9. python以下导入包的格式错误的是_ICMP python上的错误数据包
  10. asp.net web开发步骤_WEB开发流程