4 种数据库缓存最终一致性的优缺点对比?最终选择方案四!

2023-06-02 0 549

叶诸篇 jjuejin.im/post/5d5c99b66fb9a06ae072060d

大背景

内存是甚么

为甚么须要内存

存有难题

redis做为mysql内存

归纳

大背景

内存是软件设计中两个十分管用的基本概念,资料库内存着实在工程项目中必定会碰到的情景。而内存连续性的确保,着实在复试中被反反复复问到,这儿展开呵呵归纳,特别针对相同的明确要求,优先选择恰如其分的连续性计划。

内存是甚么

储存的速率是有区别的。内存是把匀速储存的结果,临时性留存有高速路储存的控制技术。

4 种数据库缓存最终一致性的优缺点对比?最终选择方案四!

总的来看,圆顶更下面的储存,能做为下面储存的内存。

他们此次的探讨,主要就特别针对资料库内存情景,将以redis做为mysql的内存为事例来展开。

为甚么须要内存

储存如mysql通常支持完整的ACID特性,因为可靠性,持久性等因素,性能普遍不高,高并发的查询会给mysql带来压力,造成资料库系统的不稳定。同时也容易产生延迟。根据局部性原理,80%请求会落到20%的热点数据上,在读多写少情景,增加一层内存十分有助提升系统吞吐量和健壮性。

存有难题

储存的数据随着时间可能会发生变化,而内存中的数据就会不一致。具体能容忍的不一致时间,须要具体业务具体分析,但是通常的业务,都须要做到最后一致。

redis做为mysql内存

通常的开发模式中,都会使用mysql做为储存,而redis做为内存,加速和保护mysql。但是,当mysql数据更新之后,redis怎么保持同步呢。

强连续性同步成本太高,如果追求强一致,那么没必要用内存了,直接用mysql即可。通常考虑的,都是最后连续性。

解决计划

计划一

通过key的过期时间,mysql更新时,redis不更新。这种方式实现简单,但不一致的时间会很长。如果读请求十分频繁,且过期时间比较长,则会产生很多长期的脏数据。优点:开发成本低,易于实现;管理成本低,出难题的概率会比较小。不足完全依赖过期时间,时间太短容易内存频繁失效,太长容易有长时间更新延迟(不一致)

计划二

在计划一的基础上扩展,通过key的过期时间兜底,并且,在更新mysql时,同时更新redis。

4 种数据库缓存最终一致性的优缺点对比?最终选择方案四!同时更新redis优点相对计划一,更新延迟更小。不足如果更新mysql成功,更新redis却失败,就退化到了计划一;在高并发情景,业务server须要和mysql,redis同时展开连接。这样是损耗双倍的连接资源,容易造成连接数过多的难题。

计划三

特别针对计划二的同步写redis展开优化,增加消息队列,将redis更新操作交给kafka,由消息队列确保可靠性,再搭建两个消费服务,来异步更新redis。

4 种数据库缓存最终一致性的优缺点对比?最终选择方案四!

优点

消息队列能用两个句柄,很多消息队列客户端还支持本地内存发送,有效解决了计划二连接数过多的难题;

使用消息队列,实现了逻辑上的解耦;

消息队列本身具有可靠性,通过手动提交等手段,能至少一次消费到redis。

不足依旧解决不了时序性难题,如果多台业务服务器分别处理特别针对同一行数据的两条请求,举个栗子,a = 1;a = 5;,如果mysql中是第一条先执行,而进入kafka的顺序是第二条先执行,那么数据就会产生不一致。引入了消息队列,同时要增加服务消费消息,成本较高。

计划四

通过订阅binlog来更新redis,把他们搭建的消费服务,做为mysql的两个slave,订阅binlog,解析出更新内容,再更新到redis。4 种数据库缓存最终一致性的优缺点对比?最终选择方案四!

优点

在mysql压力不大情况下,延迟较低;和业务完全解耦;解决了时序性难题。缺点要单独搭建两个同步服务,并且引入binlog同步机制,成本较大。

归纳

计划选型

首先确认产品上对延迟性的明确要求,如果明确要求极高,且数据有可能变化,别用内存。通常来说,计划1就够了,笔者咨询过4,5个团队,基本都是用计划1,因为能用内存计划,通常是读多写少情景,同时业务上对延迟具有一定的包容性。计划1没有开发成本,其实比较实用。如果想增加更新时的即时性,就优先选择计划2,不过没必要做重试确保之类的。计划3,计划4特别针对于对延时明确要求比较高业务,两个是推模式,两个是拉模式,而计划4具备更强的可靠性,既然都愿意花功夫做处理消息的逻辑,不如一步到位,用计划4。

结论

一般情况,计划1够用。若延时明确要求高,直接优先选择计划4。如果是复试情景,从简单讲到复杂,复试官会一步一步追问,咱们就一点点推导,宾主尽欢。猜你喜欢

1、GitHub 标星 3.2w!史上最全控制技术人员复试手册!FackBoo发起和归纳

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台控制技术栈

4、程序员一般能从甚么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结论懵了…

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务