热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

分布式共识算法raft

大纲:共识算法简介结点状态的相互转换结点如何保证数据一致 一、共识算法简介个人理解:在一个分布式系统中,共识算法保证的时CP而不是AP。假设一个分布式存储系统由多个结点组

大纲:



  1. 共识算法简介

  2. 结点状态的相互转换

  3. 结点如何保证数据一致

 

一、共识算法简介

个人理解:在一个分布式系统中,共识算法保证的时CP而不是AP。

假设一个分布式存储系统由多个结点组成,所有结点需要保证数据的一致性。

 

二、结点的状态与竞选leader

每个节点有三种状态:follower,candidate,leader,状态之间是互相转换的

leader-主节点,主节点负责与客户端通讯;给follower发心跳;同步日志与提交命令给follower

follower-从节点,每一个follower有一个倒计时器,时间随机,倒计时结束后自动转换成candidate,结点的初始状态都是follower

candidate-向其他结点发送投票请求,收到半数以上票时,candidate成为leader,并向其他follower发送心跳。如果再给其他follower发心跳同时收到了其他candidate的心跳说明同时当选leader,则本轮竞选无效。再通过重置倒计时器重新竞选。

倒计时器-当受到candidate投票请求,与leader心跳,倒计时器重新刷新倒计时

 

三、结点如何保证数据一致

客户端向服务端发送存储数据的请求,



  1. leader记日志,把消息分发follower记日志

  2. eader提交响应客户端提交成功

  3. 然后通知follower提交

发生网络分区时,

基于raft的分布式系统需要奇数个节点(方便半数投票与分区时一个分区中结点过半),两个分区分别选举leader,出现脑裂,那么超过半数分区的leader可以继续对外服务,另一个分区leader无法提交。恢复网络正常后,小于半数的leader重新变成follower,同时该分区的结点通过主节点日志追加丢失的数据



推荐阅读
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
author-avatar
手机用户2502895461
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有