5 个维度深度剖析「主从架构」原理

f36bc2221a1edd03545d629b83fd18e9.png

若有收获,请记得分享和转发哦

前言

玩过王者荣耀的同学,应该都知道里面有个英雄叫做,她释放技能时,会出现一个长相一模一样的分身,而且动作也是一样的。

bbcb5195a1ecc9862db832cf2386defa.png

那么我们今天要讨论的主从架构原理其实就是多个节点中有一个作为本体,其他节点作为分身存在,但是本体和分身的数据都是一样的,数据总是保持一致,是不是和镜很相似呢?

为了保证缓存的高可用,我们经常听到采用主从架构来保证高可用,那如何去理解主从架构核心原理呢?

这次我们还是用最熟悉的 Redis 缓存来理解主从架构,只要理解了一个主从架构,其他技术的主从架构都是一通百通。

Redis 的主从架构,其实就是利用多副本,将一份数据同时保存在多个实例上。单个实例出现故障后,一般都会过一段时间才能恢复,那么其他节点还是可以提供服务的。

本篇我会带着大家一起探讨缓存的主从架构几个问题:

415584bb1277cd2cfa3370a6b119896a.png
  • Why:为什么需要主从架构?

  • What:主从架构原理?

  • Who:谁需要关心主从架构?

  • When:什么时候用主从架构?

  • Question:主从架构会带来哪些问题?

7452d73a55a088b2ee0530530f50b20c.png

88599c5c8f5116bbf0da568c30209e5d.png

d9b0dbd207607a85ae111f70d59f7ad9.png

一主多从结构:一个主节点,多个从节点,对于读命令较大的场景,可以把读命令分摊到多个从节点。

88d12ce01ee024bce1f0cd1f707ad683.png

而对于一主多从结构,还可以再扩展一点:当日常开发中需要执行一些比较耗时的读命令时,比如 keyssort等,可以用其中一个从节点专门作为耗时查询用的从节点,避免慢查询对主节点造成阻塞,而影响服务的稳定性。我们也可以用图来进行说明:

0c3a731b9614f5d095ba4ac89340f75d.png

8e1d5709253fa62fcbd9175a1e459ebf.png

0c00c1d5b10dfc6cef223dedca71102c.png

015d3ffeed67c058072e4389190d834b.png

  • 命令传播:将写命令持续发送给所有从服务器,保持主从数据一致。这个就可以理解为持续复制了。

  • 复制积压缓冲区:其实就是一个有界队列,保存着最近传播的写命令,而队列里面的每个字节都有一个偏移量标识。复制积压缓冲区的作用和原理在部分复制的时候再细讲。

全量复制

用于主从节点第一次复制的场景。这在我们的软件开发中也很常见,比如你要把第三方的用户数据同步到自己的系统中,一开始肯定是把存量用户一次性给复制过来,后续有新增或更新的用户就采用增量更新就可以了。

d84e0bedeb7b3259c285c2fc79888702.png

61e993d7381ac30279fd08b07075b1c0.png

全量复制总共可以分为 9 步:

(1)从节点发送 psync 命令进行数据同步,会发送 psync 命令,来告诉主节点我想干啥。

psync 命令格式如下:

psync {runId} {offset}

runId 是 每个 Redis 实例启动时随机生成的一个 ID,用来唯一标记这台 Redis 实例。由于第一次复制时,刚启动时会随机生成 runId,只有自己知道,外人是不知道的,所以从节点是不知道主节点的 runId 的,这个时候发送 psync 命令时 runId 就是一个问号。第一次复制时,offset 默认为 -1。

b8b76c4a6afac039e04b2e578d5910e7.png

4fc534db2cb2115665df4f5eb6a8386a.png

ba3619ee9d96fceb97e1c715e86df4c0.png

fad54c1d2e3f84d894cd47d4bd350129.png

1c284943694af5cc0a18b25376a38360.png

e27a13a0d388df5ae6dfafa125081340.png

be79c06d78d3e17e1341fb0dfcb49fbf.png

a27f63180890a3a818748baf4d28f4a0.png

fb27945a02192f16589a0831ec87cec4.png

3ffc915b0009799abd076f01d3a5c147.png

d637b09ec6018dccd97c79c0c117e167.png

02caeeff21a42a351eef581ec859b38c.png

af301b139e907b28442a34b2fd3687e8.png

fee3889ee944783502cba0d2c56c4098.png

ce511f40321b6c2cadbf7ab152527605.png

a6ad73b4107391fded9dcd1256d15cbd.png

总结

本篇从宏观和微观上讲解了主从架构的原理:

微观视角:涉及了主从架构的三种拓扑结构来应对不同的场景,然后深入讲解了持续复制、全量复制、部分复制的区别。以及大家特别关心的复制积压缓冲区,客户端缓冲区的使用场景,以及会遇到的坑。

宏观视角:讲解了主从架构谁需要来关心、什么时候用、以及主从架构会带来的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值