Redis集群之AKF架构原理
创始人
2024-04-30 05:48:03
0

当我们搭建集群之前,先要想明白需要解决哪些问题,搞清楚这个之前先回想一下单节点、单实例、单机有哪些问题?

  1. 单点故障:只有一台Redis的话,如果出现故障,那么整个服务都不可用
  2. 缓存容量:单台Redis的缓存容量有限,在多数据的场景下不适合使用
  3. 访问压力:单台Redis在高并发的生产环境下是会承受很大压力,有可能压力过高而崩溃

问题是知道了,那么怎么解决这些问题呢?为了解决这些问题,我们需要对服务器进行集群,这儿引入一个概念:AKF拆分原则。

在了解AKF拆分原则前,先分析单节点的单点故障这个问题。既然单节点容易宕机,那么就可以进行复制,一变多。就会涉及到三个概念:主从、主主、主备。

主主:多台服务器同时对外提供读写。

 主从:主机可以读写,但是一般只对外提供写,从机对外提供读:

主备:主机提供读写,备机不对外提供服务,当主机挂了的时候,备机通过选举产生主机对外提供服务。

AKF拆分原则

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

X轴

从X角度,可以使用多台 Redis,做第一台Redis的副本,这种拆分可以看成另一台机器的镜像。这个主要是为了解决单点故障的问题!

 如上图所示,将 Redis 的数据复制到多台 Redis 上,这样就算其中一台Redis出故障了,也还有其他Redis可以提供服务。

随着发展,客户端还可以对主Redis进行增删改,对副Redis进行只读,这就要实现了读写分离。

基于X轴的解决方案,是全量镜像。

X轴上的主Redis和副Redis的容量是一样的,意思是主Redis有40G,其他其他的副Redis同样也是40G,因此数据容量有限问题就出来了。

Y轴

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

例如一台服务器中被频繁访问,涉及到的数据频繁读写,其他数据基本不怎么访问,这时候可以将这部分数据独立出来,根据功能、业务继续拆分服务器,这种拆解就是AFK中的Y轴拆分,因此就可以解决数据容量有限的问题。这个维度主要是为了解决Redis缓存容量不够大的问题!

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

Z轴

X轴和Y轴拆分之后,对节点做了主从主备复制,然后拆分不同的业务,根据不同的节点分配负责不同的业务请求。而从Z轴角度,是对Y轴进行再次拆分。

如果Y轴上一个节点访问特别大时,就需要对请求进行AFK的Z轴拆分。例如根据数据情况或访问来源分为华北、华中、华东、华南等。虽然不同的Redis虽然是负责不同的数据,但是负责的业务是一样的。

 Z轴的出现是按照优先级或者特定的逻辑再进行拆分,是为了确保解决数据容量有限和访问压力的问题。

结论

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

  • X轴拆分:水平复制,就是讲单体系统多运行几个实例,做集群加负载均衡的模式,主主、主备、主从。
  • Y轴拆分:基于不同的业务拆分
  • Z轴拆分:基于数据拆分。

AFK三轴拆分后,会涉及到数据一致性问题

强一致性

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

强一致性的缺陷也很明显,当有一个节点出现问题,就会导致所有的写入失败,所以强一致性极容易破坏可用性。

弱一致性

主Redis写入成功后就直接和客户端说返回成功了,然后副Redis异步复制写入Redis数据。

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

最终一致性

为了解决强一致性和弱一致性问题,可以在主Redis和众多副Redis钟搭建MQ去解决问题。主Redis和MQ是阻塞的,主Redis必须等MQ返回成功才可以向客户端返回成功,而MQ中的数据副Redis自己从中去取,然后写入库中。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...