首页 > 其他分享 >主从架构如何保证读写一致性(主从网络延迟)

主从架构如何保证读写一致性(主从网络延迟)

时间:2023-06-14 15:55:26浏览次数:47  
标签:主库 读写 key 一致性 从库 主从 路由

问题

在高并发的场景下,一般是读写分离,写主库,读从库。

但是主从同步存在延迟,原因可能有

a. 主库的从库太多

b. 从库硬件配置比主库差

c. 慢 SQL 语句过多

d. 主从库之间的网络延迟

e. 主库读写压力大

如果数据写入主库之后还未来得及同步到从库,此时读从库就会读到脏数据

解决方案

1、基于数据库中间件(canal)

1)所有的读写请求都走数据库中间件,通常情况下,写请求路由到主库,读请求路由到从库

2)记录所有路由到写库的key,在主从同步时间窗口内(假设是500ms),如果有读请求访问中间件,此时有可能从库还是旧数据,就把这个key上的读请求路由到主库。

3)在主从同步时间过完后,对应key的读请求继续路由到从库。

能保证一致但是数据库中间件的成本较高

2、基于缓存

写流程

1)如果key要发生写操作,记录在cache里,并设置“经验主从同步时间”为的cache超时时间,例如500ms

2)然后修改主数据库

读流程:

1)先到缓存里查看,对应key有没有相关数据

2)有相关数据,说明缓存命中,这个key刚发生过写操作,此时需要将请求路由到主库读最新的数据。

3)如果缓存没有命中,说明这个key上近期没有发生过写操作,此时将请求路由到从库,继续读写分离。、

成本低,但对数据库的操作增加了对缓存的操作

标签:主库,读写,key,一致性,从库,主从,路由
From: https://www.cnblogs.com/yogayao/p/17480502.html

相关文章

  • 用java做操作系统内核:软盘读写
    在前两节,我们将一段代码通过软盘加载到了系统内存中,并指示cpu执行加入到内存的代码,事实上,操作系统内核加载也是这么做的。只不过我们加载的代码,最大只能512byte,一个操作系统内核,少说也要几百兆,由此,系统内核不可能直接从软盘读入系统内存。通常的做法是,被加载进内存的512Byte程......
  • CPU 缓存一致性:MESI
    概述MESI(也称伊利诺斯协议)是一种广泛使用的支持write-back策略的缓存一致性协议。MESI状态我们假设CPU中共有$k$个核;CPU中每个cacheline使用$4$种状态进行标记:状态介绍所有核中该状态的个数MODIFIED实际上是exclusivedirty,说明该核的缓存数据被修改......
  • CPU 缓存一致性:MESI
    概述MESI(也称伊利诺斯协议)是一种广泛使用的支持write-back策略的缓存一致性协议。MESI状态我们假设CPU中共有$k$个核;CPU中每个cacheline使用$4$种状态进行标记:状态介绍所有核中该状态的个数MODIFIED实际上是exclusivedirty,说明该核的缓存数据被修改......
  • 2020-09-10 mysql主从复制
    mysql主从复制解决问题:高并发,灾难恢复,读写分离,故障转移mysql01mysql02数据实时同步:是通过执行的dmlsql语句(包括增删改),写入到二进制日志binlog文件中,来实现数据同步的.从数据库开启一个io线程读取主数据库中的binlog文件,读取到后,开启一个sql线程,执行binlog文件.达......
  • MySQL8.0轻松搞定GTID主从复制
    selecttable_catalog   ,table_schema   ,table_name   ,enginefrominformation_schema.tableswhereengine='MyISAM';   MySQL命令查询所有MyISAM数据库     为什么需要主从复制? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器......
  • 产品价值观:逻辑的一致性与产品的易用性
    编辑导语:对于产品而言,一致性是很重要的,本文的一致性主要强调计元素的一致,交互的一致和逻辑的一致。但事实上,好像并非如此。关于产品的一致性与易用性,作者阐述了自己的一些产品价值观,分享了自己的思考,一起来看。写这篇的原因是,我脑子里积攒了许多个悬而未决的问题:为什么苹果闹钟的默......
  • MySql5.7主从同步配置(gtid模式)
    mysql数据库主从同步配置是开发中比较常见的需求,在MySql里,主从同步主要有两种,bin-log和gtid。下面就主要总结一下使用gtid模式配置主从同步的过程。1.概念全局事务标识:globaltransactionidentifiers;GTID是一个事务一一对应,并且全局唯一ID;一个GTID在一个服务器上只执行一次,避免......
  • 【操作系统】【硬件结构】CPU 缓存一致性
    1  前言我们看了存储器的层次结构,知道CPU中有多级缓存,有共享的也有私有的,那么不可避免的一个问题就是缓存的一致性,这节我们来看看哈。2  CPUCache的数据写入随着时间的推移,CPU和内存的访问性能相差越来越大,于是就在CPU内部嵌入了CPUCache(高速缓存),CPUCache离CPU......
  • 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据
    一致性哈希算法摘自:http://blog.codinglabs.org/articles/consistent-hashing.html算法简述一致性哈希算法(ConsistentHashing)最早在论文《ConsistentHashingandRandomTrees:DistributedCachingProtocolsforRelievingHotSpotsontheWorldWideWeb》中被提出。简单来......
  • 老话新谈之缓存一致性
    前言缓存一致性常见的更新策略也比较多,如先更新数据库再更新缓存,先删缓存再更新数据库等等,我在理解的时候有些混乱,所以这个文章提供了一些理解上的技巧去理解缓存一致性。为什么会有缓存一致性的问题缓存与数据库是两套中间件,存在网络抖动之类的原因导致没有更新任一方的可能......