美文网首页做好自己
Redis中的AFK原理

Redis中的AFK原理

作者: 嘘寒问暖 | 来源:发表于2022-01-23 23:55 被阅读0次

回顾Redis:Redis是单机、单进程的,一般常用于缓存和数据使用。然而我们要进行Redis集群,搭建高可用Redis方式。



Redis 特点:

单机、单进程、单实例

正因为是单机的,所以会有一下问题:

1:单点故障

2:数据容量有限

3:压力(CPU计算压力和socket连接压力)

而假如在面试的时候有被问到设计到“单机”的相关问题,就可以往AKF上面引入

单机劣势

了解AKF:

    AKF是从X、Y、Z三个轴方向去尝试解决上述3个问题

    从X角度,可以使用多台Redis,做第一台Redis的副本,这样就可以解决【单点故障问题】:

    随着发展,这些多台机器也搭建起来了,那这些钱可千万不能浪费呀,能压榨就压榨。客户端可以对主Redis进行增删改,对副Redis进行读   取,就实现了读写分离:

    基于X轴的解决方案,是全量镜像的,什么意思呢?意思就是:X轴上的主Redis和副Redis的容量是一样的,比如主Redis有10G,其他其他的副Redis同样也是10G,那这样的话,问题2【数据容量有限】的问题就出来了。数据有时候会远超10G的!

    从Y轴角度,对库中的数据按照业务进行划分不同的实例去存储:

    这样,不同的数据就会存到不同的Redis中去,如此就可以解决【数据容量有限】的问题。是不是有点像微服务拆分的原则?而AKF正式微服务拆分四项原则中的第一条,而且AKF不仅仅只限定于微服务,如数据库,Tomcat都可以。 了解微服务拆分四项原则:https://www.cnblogs.com/guanghe/p/10978349.html

    基于Y轴一般是按照业务、功能等来划分数据,这是只针对于Y轴来说,但Y轴上的每个节点也要解决【单点故障问题】,所以就需要X轴、Y轴同时部署Redis实例矩阵。

    从Z轴角度,再对Y轴实例(某个业务)的数据进行再次拆分

    假设Y轴上的某个节点存放的是“用户信息”,那么从Z轴的角度来讲,Z轴上的每个节点可以存放100万个用户,不同的用户出现在固定的库里。一般Z轴是按照优先级,或者特定的逻辑再进行拆分,Z轴的出现,是为了确保解决【数据容量有限】和【压力】的问题。

    经过X、Y、Z轴拆分之后,每台实例的数据量已经足够小,当数据量足够小的时候,更能够发挥单机的性能,再也没有了容量的限制。而且,主Redis都还有多台副Redis,就不会出现单点故障问题。而且当数据量足够小的时候,访问量自然不会大。

    AFK三轴拆分后,引入的数据一致性问题

    当客户端对Redis进行写的时候,主Redis先不返回客户端是否写入成功,而是先去通知副Redis同步复制写入,主Redis在阻塞等待着,直到数据全部一致,主Redis再返回客户端写入成功:【强一致性】

这是通过同步方式达成的强一致性,但是强一致性的缺陷也很明显,只要有一个Redis的网络通信不好,就会导致所有的写入失败,所以强一致性极容易破坏可用性。简单说,我用你了,但你不太好用,或者根本不能用。

    只要主Redis写入成功,就直接和客户端说返回成功了,然后副Redis异步复制写入Redis数据;【弱一致性】

这是通过异步方式达成弱一致性,但是弱一致性的缺陷在于,有可能主Redis写入成功,但是副Redis没有成功写入,就导致副Redis丢失部分数据。

    为了解决弱一致性问题,可以在主Redis和众多副Redis钟搭建kafka,jnode等中间件去解决问题。主Redis和kafka是阻塞的,主Redis必须等Kafka返回成功才可以向客户端返回成功。而Kafka中的数据副Redis自己从中去取,然后写入库中。这个叫【最终一致性】。

最终一致性

相关文章

  • Redis中的AFK原理

    回顾Redis:Redis是单机、单进程的,一般常用于缓存和数据使用。然而我们要进行Redis集群,搭建高可用Re...

  • java中的技术原理

    SpringBoot自动装配原理 SpringBoot集成Redis Session存储到Redis中 Sprin...

  • 16. Redis Cluster

    10. Redis Cluster 10.1 Redis Cluster工作原理 在哨兵sentinel机制中,可...

  • Redis

    原理详情参见redis原理总结 Redis原理了解吗?你们是如何使用的? Redis是基于内存、单进程单线程模型的...

  • AFK

    突然明白了简书读者越来越少的原因。 暗部太多。

  • Redis入门到高可用-9.Redis集群伸缩

    1.概要 伸缩原理 扩容原理 缩容原理 2.伸缩原理 Redis伸缩原理.png 3.扩容集群 Redis扩容集群...

  • redis内部原理揭秘

    课程目标 过期时间设置及原理分析 发布订阅模式 Redis持久化及原理分析 Redis的内存回收策略 Redis单...

  • Java-分布式框架-redis-1

    Redis核心原理 Redis的单线程和高性能 Redis 单线程为什么还能这么快? 因为它所有的数据都在内存中,...

  • 7.redis原理

    目录 --1.redis过期时间设置原理 --2.redis数据持久化原理 --3.redis内存回收策略 1.r...

  • redis sentinel高可用性方案

    参考:redis官方文档,Redis 复制、Sentinel的搭建和原理说明 Redis Sentinel(哨兵)...

网友评论

    本文标题:Redis中的AFK原理

    本文链接:https://www.haomeiwen.com/subject/svivhrtx.html