首页 > 编程知识 正文

分布式缓存中间件,分布式缓存redis 方案

时间:2023-05-06 07:51:19 阅读:44615 作者:3177

什么是分布式系统?

答:分布式和集群是必须合并在一起的两个概念,多个服务器共同处理一件事时称为集群。 多个服务器处理不同的事情,相互协调协作,共同进行整个系统的工作,这叫做分布式系统。

Redis-Cloud是集群,还是分布式缓存系统?

答:既是集群,也是分布式系统。 这取决于从哪个角度看。

从存储数据是否相同来看,假设Redis-Cloud中每个节点有不同的16384个时隙(0~16383 ),且Redis-Cloud中有3个节点,则这16384个时隙对应于各节点的性能第一个节点负责0~5000插槽,第二个节点负责5001~10000插槽,第三个节点负责10001~16383插槽,三个节点分别负责不同范围的数据存储,最终整个数据范围的压力这显然是分布式系统。

但是,从Redis-Cloud提供的缓存功能来看,每个节点都是用于缓存的,每个节点提供的功能相同,如果内存不足,也可以横向添加节点来扩大内存容量,显然是在集群中

所以说Redis集群是分布式集群系统。

(面试题)你知道哪些分布式缓存,如果要你设计一个分布式缓存,你会怎么去设计?

答:主要有Memcached和Redis。 使用Redis创建分布式缓存。

第一个Redis的操作都是独立版,Redis的速度很快,但在特别高的同时运行中,Redis也存在性能瓶颈。 Redis的数据都在内存中,但内存会有多大? 64个g,已经很大了。 64G满了吗? 还能进去吗? 是的。 内存已满后,它将放入硬盘中的虚拟内存中。 使用虚拟内存会降低性能,因此尽量不要超过内存容量。 如果无法保存,但数据很多,需要放入缓存中,该怎么办? 乘坐Redis集群扩展内存空间。 官方给出的Redis集群名为Redis-Cluster。

Redis-Cluster架构图如下:

群集通常有入口,有群集管理工具,但Redis群集没有入口。 也就是说,没有代理层,群集中的节点相互连接,通过PING-甜高山机制实现各节点之间的通信,从而判断各节点的状态。 客户端要连接到群集,只需连接到群集中的任何节点即可。

集群中有很多节点,存储在节点上的数据是否相同? 不是。 如果是一样的话,那就叫主备。 既然是集群,就应该可以扩展容量。 如果存储容量不足,可以添加节点、添加服务,从而增加存储容量。 所有节点的内存容量加起来就是整个集群内存的总容量,如果每个节点包含相同的数据,则总容量只是Redis的内存容量。

在Redis群集中,每个节点保存的数据不同。 否则,如果一个节点锁定,则整个群集将变得不完整,如果不完整,则不可用。 因此,为了确保Redis群集的高可用性(长时间可用而不停机),必须在每个节点上添加备份计算机。 当此节点锁定时,备份节点必须被向上推,以便群集可以继续服务。

Redis群集有投票。 容错机制。 群集通常有群集管理工具,但Redis群集中没有。 那么,我怎么知道哪个节点挂起? Redis群集有投票机制。 众所周知,在选举过程中,少数服从多数的原则,要确定Redis群集的某个节点是否锁定,必须由我们群集的半数以上的节点进行投票,半数以上的节点判断锁定如果认为群集有五个节点,并且三个节点已经挂起,则群集认为该节点真的挂起了。 此时,需要确认是否存在备份节点。 如果没有备份节点,群集将关闭。 如果有备份节点,则向上推动备份节点继续整个群集的工作,管理员必须立即修复该节点。 那么,集群中最少有多少个节点呢? 三个! 虽然可以在三个节点上构建一个Redis群集,但在实际开发中,要确保每个节点都有备份计算机,请在最小的群集上构建六个节点。

只需连接到Redis群集的其中一个节点,就可以连接到整个群集。

在Redis群集中,每个节点存储的数据不同,因此存在问题

,如何把数据分散到不同的节点进行存储呢?为解决这个问题,Redis集群中引入了一个概念,叫slot(槽,哈希槽)。Redis集群中一共有16384个槽(0~16383),这是固定的。这些槽有什么作用呢?

当要在Redis集群中放置一个key-value对时,先要对key使用crc16算法得出一个数,然后再用这个数对16384求余数,肯定会得到一个0~16383之间的数,这样每一个key值都会对应一个0~16383之间的哈希槽,然后将key-value键值对放在这个槽对应的Redis结点上就可以了。

槽如何进行分配呢?

要看Redis集群中有几个结点,还要看每个结点的性能怎么样。假如有3个结点,每个结点的性能都是完全一样的,那么我们就可以把这16384个槽平均分到3个结点上。

0~5000个槽分到第一个结点上

5001~10000个槽分到第二个结点上

10001~16383个槽分到第三个结点上(为了好计算,这样划分)

有个问题,Redis集群中最少有几个结点?Redis集群中最多有多少个结点?

答:最少有3个,最多有16384个结点。这里不考虑备份机的问题。

架构细节:

(1)所有的redis节点彼此互联(PING-甜甜的高山机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点







版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。