暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

对线面试官-Redis(六 如何保证 Redis 高并发 主从复制原理)

码上遇见你 2023-07-05
34

面试官:既然聊了这么多Redis,还没有说到Redis线程模型:

派大星:因为Redis基于reactor模式开发了网络事件处理器,这个事件处理器叫做:文件事件处理器(File Event Handler
),这个文件事件处理器是单线程的,从而Redis才叫做单线程的模型。采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件。

面试官:不错,那如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?

面试官心里剖析:其实问这个问题,主要是考考你,redis 单机能承载多高并发?如果单机扛不住如何扩容扛更多的并发?redis 会不会挂?既然 redis 会挂那怎么保证 redis 是高可用的?

派大星:如果你用 Redis 缓存技术的话,肯定要考虑如何用 Redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 Redis 保证自己不是挂掉以后就直接死掉了,即 Redis 高可用。

派大星:这部分可以主要从两方面:

  1. Redis主从架构,

Redis实现高并发主要依靠主从架构,一主多从,一般来说,很多项目其实已经足够了,,单住用来写入数据,单机几万QPS,多从用来查询数据,,多个实例可以提供每秒近上万(10w)的QPS。

当然如果想要在实现高并发的同时,容纳大量的数据,那么就需要Redis集群,使用Redis集群之后,可以提供每秒近几十万的读写并发也是可以的。

  1. Redis基于哨兵实现高可用。

Redis高可用,如果是做主从架构部署,那么加上哨兵即可,就i可以实现,任何一个实例宕机,可以进行主备切换。或者还有Redis官方的Cluster 集群模式,Redis Cluster是一种服务器 Sharding 技术,3.0版本开始正式提供

面试官:什么是Redis主从架构

主要从核心机制和工作流程两个方面来回答

派大星:Redis replication的核心机制:

  • Redis采用异步方式复制数据到slave node上,不过从Redis2.8开始,slave node会周期性的确认自己每次复制的数据量;

  • 一个master node是可以配置多个slave node的。

  • slave node也可以连接其它的slave node。

  • slave node做复制的时候,不会block master node的正常工作。

  • slave node做复制的时候,也不会block自己的查询操作,它会用旧数据来提供服务,但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了。

  • slave node主要用来进行横向扩容,做读写分离,扩容的slave node也可以提高读的吞吐量。

派大星:Redis 主从复制的核心原理(面试问题最多的问题,也可理解为工作流程):

当启动一个slave node的时候,它会发送一个PSYNC
命令个master node,如果这是slave node初次连接到master node,那么会触发一次full resynchronization
全量复制。此时master会启动一个后台线程,开始生成一份RDB
快照文件,同时还会将从客户端新收到的所有写命令缓存在内存中。RDB
文件生成完毕后,,master会将这个RDB
发送给slave,,slave会先写入磁盘,然后再从本地磁盘加载到内存中,接着master会将内存中缓存的写命令发送到slave,slave也会同步这些数据。slave node如果跟master node有网络故障,断开了连接,会自动重连,连接之后master node仅会复制给slave部分缺少的数据。从Redis2.8开始,支持了主从复制的断点续传,

同时我们如果像开启无磁盘化复制:也就是master在内存中直接创建RDB,然后发送给slave,不会落盘,只需要在配置文件中repl-diskless-sync yes
即可。

repl-diskless-sync yes

# 等待 5s 后再开始复制,因为要等更多 slave 重新连接过来
repl-diskless-sync-delay 5

面试官:那主从复制的时候如何处理的过期key的呢?

派大星:slave不会过期key,只会等待master过期key,如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一个del命令发送给slave node

面试官:刚刚有提到断点续传,可以聊一聊主从复制断点续传的原理:

派大星:好的,首先master node会在内存中维护一个back log,master 和 slave都会保存一个replica offset还有一个master run id,offset就是保存在backlog中的。如果master 和slave网络连接断掉了,slave会让master从上次replica offset开始继续复制,如果没有找到对应的offset,会执行一次resynchronization

面试官:不错,那我们继续聊一了Redis 高可用这个问题吧。

派大星:下次吧,这次有点累啦,嘿嘿。


文章转载自码上遇见你,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论