• 分布式协议学习笔记(二) 日志复制


    一旦Leader选定之后,我们将复制所有的操作到每个节点上。

    这个是通过心跳包中的Append Entries message结构体来进行实现的

    客户端发送一个操作到Leader中(即使客户端发送操作到Follower,操作也会被转发到Leader处理)

    Leader将操作附加到自己的Log日志中

    基本操作记录

    Leader将随后将操作发送给Follower,Follower再回复给Leader,当Leader确认该操作被一半以上设备接受,则提交该操作Log(正式记录),并且回复给客户端操作处理结果

    再追加一个+2操作

    网络分区

    现在假设有5个服务器节点,由于某种原因被切割成两个网络分区.根据之前得的论述,在经过一段选举超时间后,各个区域都会选举出各自的Leader(当然 如果被隔开的是两个Folloer 那么就只能选举出一个新的Leader和两个长期处于选举状态的节点)

    假设有不同的客户端分别给不同的区域的Leader发送操作. 设置8的操作会被提交,因为该操作可以被过半的节点接受,而设置3的操作不行。

    撤销网络分割后,我们会看到,由于后选举出来的Leader具有更高的TERM计数,所以设置8的操作被更新到每个节点上

    A B节点会回滚自己之前的Log,并且更新新的Leader的Log记录

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    记一次线上OOM问题分析与解决
    理解JAVA内存模型
    SpringBoot+Shiro+JPA+LayUI的后台管理系统
    学会使用BeanUtils,提高你的开发效率
    一篇文章教你快速上手接口管理工具swagger
    js 多维数组转一维数组(根据字段展示)
    记一次阿里云服务器中部署egg遇到的问题 (docker vim)
    react 封装tab组件
    js 添加 好玩的注释
    js 下载文件流
  • 原文地址:https://www.cnblogs.com/itdef/p/9640286.html
Copyright © 2020-2023  润新知