一致性算法 Raft Paxos

news/2024/10/21 6:32:07/

背景

存在多个服务实例

  1. 某个实例数据修改,数据一致性问题
  2. 某个实例宕机恢复,数据一致性问题
  3. 跨分区网络异常(脑裂),数据一致性问题

Paxos

是基于消息传递的一致性算法
有 Basic Paxos, Multi Paxos, Fast Paxos 版本

Basic Paxos

角色介绍
client发起请求1
proposer接收client请求,发起提案2,请求提交提案4
acceptor接收proposer提案,投票proposer提案3,执行proposer提案5
learner执行proposer提案
Client   Proposer      Acceptor     Learner|          |           |  |  |       |  | --- First Request ---X----1---->|           |  |  |       |  |  Request|          X-----2---->|->|->|       |  |  Prepare(N)|          |<----3-----X--X--X       |  |  Promise(N,I,{Va,Vb,Vc})|          X-----4---->|->|->|       |  |  Accept!(N,I,V)|          |<----5-----X--X--X------>|->|  Accepted(N,I,V)|<-----------------------------------X--X  Response|          |           |  |  |       |  |
  • 提案编号自增
  • 最新提案才会发起提案 proposer->acceptor
  • 最新提案才会投接受票 acceptor->proposer
  • 获得多数票才会请求提交提案 proposer->acceptor
  • 落地提案最新才会执行提案 acceptor->proposer

问题:多个proposer固执己见,始终出现最新的落地提案,导致活锁
解决:等待随机时间才能发起提案

缺点:效率低(多个老大proposer),活锁问题

Multi-Paxos

第1阶段:

  • 选leader。同于Basi-Paxos
  • 提案被执行的proposer=leader
角色介绍
client发起请求1
proposer接收client请求,发起提案2,请求提交提案4
acceptor接受proposer提案,投票proposer提案3,执行proposer提案5
learner执行proposer提案
Client   Proposer      Acceptor     Learner|          |           |  |  |       |  | --- First Request ---X----1---->|           |  |  |       |  |  Request|          X-----2---->|->|->|       |  |  Prepare(N)|          |<----3-----X--X--X       |  |  Promise(N,I,{Va,Vb,Vc})|          X-----4---->|->|->|       |  |  Accept!(N,I,V)|          |<----5-----X--X--X------>|->|  Accepted(N,I,V)|<-----------------------------------X--X  Response|          |           |  |  |       |  |

第2阶段

角色介绍
client发起请求1
leader接收client请求,请求提交提案2
acceptor接收leader提案,投票proposer提案3,执行proposer提案4
learner执行proposer提案
Client     Proposer      Acceptor        Learner|          |           |  |  |        |  |  --- Following Requests ---X----1---->|           |  |  |        |  |  Request|          X----2----->|->|->|        |  |  Accept!(N,I+1,W)|          |<---3------X--X--X---4--->|->|  Accepted(N,I+1,W)|<------------------------------------X--X  Response|          |           |  |  |        |  |

优点:效率高

Raft

分布式共识协议

第1阶段:选leader

角色介绍
follower所有结点初始都是follower
candidate随机时钟到点成为candidate
leader候选者获得多数票成为leader

第2阶段

角色介绍
client发起请求1
leader接收client请求,记录日志,请求提交提案2
follower接收leader提案,记录日志,投票proposer提案3,执行proposer提案4
Client     Proposer      Acceptor        Learner|          |           |  |  |        |  |  --- Following Requests ---X----1---->|           |  |  |        |  |  |          X----2----->|->|->|        |  |  |          |<---3------X--X--X        |  |  |          |<---4------X--X--X------->|->|  |<------------------------------------X--X  |          |           |  |  |        |  |
  • 未获得多数票,提案不会执行,会记录到日志中

参考

wiki


http://www.ppmy.cn/news/1072702.html

相关文章

WordPress 网站使用 CDN 后获取访客真实 IP

WordPress 往数据库存 IP 的时候似乎用的是 REMOTE_ADDR&#xff0c;这样一来数据库里面的评论信息就全是从各个 CDN 服务器来的 IP。 在 wp-config.php 文件中增加下面代码就可以获取 CDN 后访客的真实 IP。这个函数的核心是用解析后的 HTTP_X_FORWARDED_FOR 替换 REMOTE_ADD…

【局部活动轮廓】使用水平集方法实现局部活动轮廓方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…

C++笔记之单例通过GetInstance传递参数

C笔记之单例通过GetInstance传递参数 code review! 文章目录 C笔记之单例通过GetInstance传递参数例1.普通指针的单例例2.结合智能指针和std::call_once例3.编译不通过的错误例子&#xff0c;在GetInstance内不可以使用std::make_shared来创建对象 例1.普通指针的单例 运行 …

利用fsimage分析HDFS小文件

一、Hive 小文件概述 在Hive中&#xff0c;所谓的小文件是指文件大小远小于HDFS块大小的文件&#xff0c;通常小于128 MB&#xff0c;甚至更少。这些小文件可能是Hive表的一部分&#xff0c;每个小文件都包含一个或几个表的记录&#xff0c;它们以文本格式存储。 Hive通常用于…

深度思考rpc框架面经之五:rpc熔断限流、rpc复用连接机制

11 RPC框架如何实现限流和熔断 推荐文章&#xff1a;RPC实现原理之核心技术-限流熔断 11.1 为什么Dubbo要做服务的限流&#xff1f;(根本原因是服务端进行自我保护) 限流是一种常见的系统保护手段。在分布式系统和微服务架构中&#xff0c;一个接口的过度使用可能会导致资源…

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要&#xff0c;在不同的时候&#xff0c;要使用不同的计算方式。 解决方案 策略模式 定义&#xff1a; 解决思路&#xff1a;

springmvc没有绿标,怎么配置tomcat插件运行?

一、添加插件后&#xff0c;刷新&#xff0c;自动从maven仓库下载tomcat插件 二、写好项目后&#xff0c;添加tomcat配置 三、即可点击绿标运行