redis部分重同步实现

本文介绍了分布式系统中部分重同步的实现原理,涉及主服务器和从服务器的复制偏移量、复制积压缓冲区、服务器运行ID等关键概念,详细阐述了如何根据这些元素判断重同步操作的类型。
摘要由CSDN通过智能技术生成

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 持续学习,不断总结,共同进步,活到老学到老
  • 人生的本质是追寻自我的提升,包括思想、能力、意志等等。
  • 直面变化,找到背后更基础的东西,更基础的东西是用户的需求。
  • 我们的成功是我们的现在和将来决定的。今天和明天已经由昨天决定,你还可以决定后天。

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

6.部分重同步实现

部分重同步功能由以下三个部分构成:

  • 主服务器复制偏移量和从服务器的复制偏移量(replication offset)
  • 主服务器的复制积压缓冲区(replication backlog)
  • 服务器的运行 ID(run ID)

复制偏移量
主服务器和从服务器会分别维护一个复制偏移量:

  • 主服务器每次向从服务器传播 N 个字节的数据时,就将自己的复制偏移量的值加上 N
  • 从服务器每次收到主服务器传播的 N 个字节数据时,就将自己的复制偏移量加上 N

通过对比偏移量可以知道主从服务器是否处于一致状态。

复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度(fixed-size)先进先出(FIFO)队列,默认为 1 MB,模型是滑动窗口

主服务器进行命令传播时,不仅会将写命令发给所有从服务器,还会将写命令入队到复制积压缓冲区里面,且队列中每个字节记录相应的复制偏移量

image-20220917115130074

当从服务器重新连上主服务器后,从服务器会通过 PSYNC 命令将自己发复制偏移量 offset 发送给主服务器,主服务器根据此来决定对服务器执行何种同步操作:

  • 如果 offset 之后的数据仍在复制积压缓冲区中,则进行部分重同步操作
  • 相反,如果已经不存在复制缓冲区中则进行完整重同步操作

根据需要调整复制缓冲区大小

默认为 1 MB,最小跟由公式 second * write_size_per_second 估算

second:服务器断线后重新连上主服务器的平均时间,单位秒
write*size_per_second:服务器平均每秒产生的写命令数据量(协议格式的写命令的长度总和)
安全起见,实际大小可以设置为:2 * second _ write_size_per_second,可以保证绝大部分断线情况都能用部分重同步处理

服务器运行 ID

  • 每个服务器都有自己的运行 ID
  • 运行 ID 在服务器启动时自动生成,由 40 个随机的十六进制字符组成

从服务器进行初次复制时,主服务器会将自己的运行 ID 传送给从服务器,而从服务器会将其保存,当从服务器断线并重新连上一个主服务器时,从服务器将当前连接的主服务器发送之前保存的运行 ID:

  • 如果 ID 与当前连接的主服务器 ID 相同,则说明断线之前就是与这个主服务器连接,则继续尝试部分重同步操作
  • 如果 ID 不同,断线之前不是这个主服务器,执行完整重同步操作

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值