日常Bug排查-读从库没有原子性?

这篇具有很好参考价值的文章主要介绍了日常Bug排查-读从库没有原子性?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

日常Bug排查系列都是一些简单Bug排查。问题虽小,但经常遇到,了解这些问题,会让我们少走点弯路,提升效率。说不定有些问题你遇到过哦:)

Bug现场

业务开发同学突然问了笔者一个问题,从库读会不会没有原子性?我下意识的反应怎么可能,只要是遵守MySQL主从Replication协议的原子性至少是能够保证的。但他们遇到了一个比较诡异的现象。如下图所示:

 文章来源地址https://www.toymoban.com/news/detail-710203.html

 

这么一看确实像从库没有保证原子性。但这个明显有违背笔者的常识,这个问题背后肯定还有其它的因素没有挖掘到。

数据库拓扑

于是笔者看了看这个库的拓扑,是一主两从的结构。如下图所示:

 

 

真相大白

看到这个拓扑的那一刻笔者立马反应过来,是踩了一个主从延迟变种的坑。由于请求B的两条select是不在事务内的,而且都是select。这两很有可能路由到两个不同的从库,而这两个从库的主从延迟是不一样的。例如一个100ms,一个200ms。那么落到100ms从库的那条sql就会查到请求A的提交,而200ms从库的那条sql查不到。以致与错误的认为从库不保证原子性!

 

 

应该怎么做

遇到这种情况,其实我们所需要做的只是在某次请求中稳定的路由到某个特定的从库上面,这样就能保证原子性(要么能查到,要么都查不到)。

 

 

如上图所示,一般在第一次请求之后,在threadLocal中打上相关粘性标签(SlaveA),那么在这次线程请求中。后来的从库select都走SlaveA即可。这个选择逻辑可以通过重载数据源DataSource的getConnection逻辑来实现。

总结

主从延迟是个非常常见的问题。最常见的是主库写入后读从库没有相应的数据,当然也有本文描述的这种看上去”不符合原子性”的变种。看似违背常识的背后可能有其它的隐变量(多从库不同延迟)。多挖掘一点问题现场的上下文信息就很容易揪出问题的根因。

日常Bug排查-读从库没有原子性?

 

到了这里,关于日常Bug排查-读从库没有原子性?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 日常BUG——SpringBoot关于父子工程依赖问题

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 在父子工程A和B中。A依赖于B,但是A中却无法引入B中的依赖,具体出现的状况如下: config工程依赖于core工程,但是在依赖都引入的情况下,con

    2024年02月12日
    浏览(32)
  • 日常问题记录-Android-Bug-OOM

    大家好哇,我是梦辛工作室的灵,最近的项目中,我又遇到了一个bug,就是我写了一个类 将app会用到的Bitmap缓存起来进行管理,防止OOM嘛,不过莫名奇妙的事情还是发生了,内存依旧上涨,且没有释放 然后我就查到了获取缓存对象的那里的代码,打上了日志数据,然后就发

    2024年02月15日
    浏览(77)
  • 日常BUG——Java使用Bigdecimal类型报错

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 直接上代码: 报错内容: 原来JAVA中如果用 BigDecimal 做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除

    2024年02月13日
    浏览(33)
  • 日常BUG——普通页面跳转tabbar页面报错

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 微信小程序页面跳转的时候出现下面的问题: 报错内容: 微信小程序的 redirectTo 方法不能用于跳转到 TabBar 页面,因为 TabBar 页面在小程序中具有

    2024年02月12日
    浏览(32)
  • 日常BUG——微信小程序提交代码报错

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 在使用微信小程序开发工具进行提交代码时,报出如下错误: 这是远程仓库认证失败导致的。 重新填写远程仓库认证信息。有两种方式: 使用

    2024年02月13日
    浏览(27)
  • 日常BUG—— SpringBoot项目DEBUG模式启动慢、卡死。

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 我们调试程序时,需要使用DEBUG模式启动 SpringBoot 项目, 有时候会发现启动很慢甚至是等了大半个钟头无法启动。 检查下是否打的有断点。 如果

    2024年02月13日
    浏览(32)
  • 日常BUG——通过命令行创建vue项目报错

    😜 作           者 :是江迪呀 ✒️ 本文 : 日常BUG 、 BUG 、 问题分析 ☀️ 每日   一言 : 存在错误说明你在进步! 在使用 vue命令行 创建一个 vue 项目时,出现一下的错误: 这个错误是由于 Windows PowerShell 的执行策略限制导致的,它默认情况下会限制运行脚本

    2024年02月13日
    浏览(31)
  • 正点原子驱动开发BUG(一)--SPI无法正常通信

    使用正点的im6ull开发板进行spi通信驱动开发实验的时候,主机无法与从机进行正常通信。就算使用正点的例程,也无法正常通信。读不到从机寄存器中的值。以读取从机ID为例,例子为正点原子的例程基础上添加了几行 printk 用来打印信息: 读ID失败,读出来ID是0,单纯是因为

    2024年02月03日
    浏览(39)
  • 真正的成长没有速成剂,都是风吹雨打过来的

    一个人真正的成长一定是极其不容易的,如果想通过一两本书,一两个鸡汤文案,一两场培训就能够获得成长,那简直是痴人说梦,真正的成长一定不会是轻松的,一定是经过一次又一次的跌倒,然后爬起,对所做过的事,所经历的事进行一次又一次的复盘,总结,思考,最

    2024年02月04日
    浏览(24)
  • 开发的功能不都是经过上线测试,为什么上线后还会那么多 Bug ?

    你是否也经过这样的灵魂拷问:「开发的功能不都是经过上线测试的吗?为什么上线后还会那么多 Bug ?」。   大家明明都很努力,为什么「输出」的结果没有更进一步?今天我们就水一水这个「狗血」话题,究竟是谁个锅? 本篇只是毫无意义的「故事」,内容纯属「虚构」

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包