副本读最终一致性探究及其解决方案

副本一致性是指一个数据在不同地点(数据源)存在多份副本,并且各个数据源的数据一模一样。副本读一致性则是不要求任何时刻它们真的相同,而是在读取请求中表现出一模一样的样子,它是在分布式软件架构中最常见的一种一致性保障需求。

其常见的场景如下:缓存和db之间的副本读一致性,es和mysql之间的副本读一致性,主库和从库的副本读一致性。

其实,在读取请求中表现严格相同的样子也是很难的,基本上业务系统只要求在所有数据大部分时间内表现出副本读一致性,而少部分数据是可以在少部分时间内读不一致的,但这个读不一致必须是可随着时间推移无操作自然恢复,这样,我们目标的完整名称其实是【副本读最终一致性】

下面让我们来探讨【副本读最终一致性】可能的架构模式。

一、阻塞单点读写模式

在这种模式中,我们将读、写请求都打到其中一个数据源上面,这个数据源称为主数据源,而当主数据源中的数据不存在时,所有读写请求便来到了停止状态,直到通过辅数据源中的数据填充主数据源的数据为止,请求才能继续从主数据源进行。

数据同步方式:主数据源和辅数据源之间的数据同步可能是在写请求时同步进行的、读请求触发进行、或者异步批量进行的。

以redis和mysql为例,这种模式即是
读请求
若redis有数据,直接返回
若redis无数据,同步的请求mysql,填充redis后,返回数据
写请求
先写redis,后写mysql

接下来列举场景,验证这种架构模式能否在并发请求下保持【副本读最终一致性】,以及可能产生的问题

  1. 不加锁且同步访问
    在读写请求并发时产生了不一致
    由于保存redis比保存mysql快,所以这是实际情况中概率更大的情景

以数据库主从为例,这种模式即是

  1. 主库宕机,发起主库切换,某一从库成为新的主库,主库诞生(相当于数据恢复),继续提供服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值