Paxos协议学习---3.Paxos Made Simple

2024-05-05 15:48
文章标签 学习 协议 simple paxos made

本文主要是介绍Paxos协议学习---3.Paxos Made Simple,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先读Parliament再读simple确实,要好很多。

下面是阅读笔记

Paxos made simple
P2
1.为什么不是采用一个acceptor就好?
答:因为那个节点可能失败。


2.为什么任意qrm的人通过了一个值,就能确定一个值?
答:因为任意qrm至少有一个相同的人,
如果我们能确保一个acceptor只能最多接受
一个值,就能确保任意qrm确认的值都是同一个值。


3.为什么要满足条件P1?
答:因为我们在没有失败和消息丢失的情况下,我们希望即使只有一个值被提议,也应该被选定。
它的意义就在于,我们应该确保有提议能被通过。


4.为什么一个acceptor必须要被允许接受多于
一个的提议?
答:因为存在节点失败的可能性,某一次提议可能无法
找到一个qrm,也就无法确定一个值。这就需要进行多次提议。一个acceptor是可以在不同的提议中接受
不同的值得提议的。
这样遇到2N+1台,有N个选x,有N个选y,还有一台崩了的情况下,有人改变主意,才能选出一个值。


P3
1.为什么要提出条件P2?
答:P2条件直接满足了只要有一个值被选择。
那么它肯定满足一致性。


2.为什么要提出条件P2a?
答:因为P2是说,v被选择后,所有比v
的编号大的并且被选择的提议的值都应该是v。
而P2a是说,v被选择后,在所有编号比v大的提议
投票中,accept只能投有v值的提议。
显然P2a能满足P2。 


3.为什么要提出条件P2b?
现在值为v的提议已经被通过了。
总会有之前没有接受过任何提议的acceptor
同时也会有不知道情况的proposer,提出
编号更高的值不是v的提议。
由于P1的存在,该acceptor会接受编号大于v,
但是值不是v的提议。
这与P2a的要求是矛盾的。
为了解决这个矛盾,我就不能让你提出这种提议。
这就是P2b。


P4
1.为什么要提出P2c?
答:这个P2c就是The Part-time Parliament中的
第3个条件。而P2b就是里面提出的引理1。
这个条件根本就不管有没有通过
都限制了,现在将要提出的这个提议,必须要和
你的qrm中的MaxVote相同。
可以通过反证法证明满足了P2c就满足了P2b。
从而证明满足了P2c就满足了P2。


2.为什么proposer要求acceptor给promise说
不要接受编号比n小的提议?
答:因为为了遵守P2c的规定,proposer在新提议
之前要询问qrm的MaxVote。
为了确保这个MaxVote是最新的,有效的,就必须要求
不能再接受编号小于n的提议。
因为一旦接受编号小于n的提议。
那么MaxVote有可能就变了,传给编号n的提议的proposer的MaxVote信息就失效了。


P5
1.acceptor到底接受还是不接受request呢?
答:无论何时,acceptor不接受request都不会影响
一致性。所以对于acceptor的不接受没有要求。
对于回应请求
①prepare request想回应就回应
②acceptr request只有在没有承诺过不回应的情况下,才能回应。


2.acceptor会忽略对于它已经接受了的提议的prepare
request,为什么一个已经接受了的提议还会有prepare
request呢?
答:因为异步网络会有丢包和重复包存在。


3.一个acceptor需要持久化两样东西。
①它accept过的最大提议
②它promise过的最大提议
为什么?
答:①是为了回答MaxVote
②是为了拒绝一些prepare request
持久化这两个东西可以保证2Pc的顺利进行。


P6
1.acceptor实际的接受行为
答:为了保证协议的快速运行,实际行为如下
①对于prepare request,遇到比自己promise过的
提议编号更大的提议就respond promise
②对于accept request,只要没有遇到promise里面
承诺过不接受的,就accept




原文摘录:
P1.An acceptor must accept the first proposal that it receives.


P2.If a proposal with value v is chosen, then every higher-numbered proposal that is chosen has value v.


P2a.If a proposal with value v is chosen, then every higher-numbered proposal accepted by any acceptor has value v.


P2b.If a proposal with value v is chosen, then every higher-numbered proposal issued by any proposer has value v.


P2c.For any v and n , if a proposal with value v and number n is issued,then there is a set S consisting of a majority of acceptors such that
either (a) no acceptor in S has accepted any proposal numbered lessthan n , or (b) v is the value of the highest-numbered proposal among
all proposals numbered less than n accepted by the acceptors in S .


P1a.An acceptor can accept a proposal numbered n iff it has not responded to a prepare request having a number greater than n.


Question
1.如果总共10个人,通知了8个人,
但是有7个人同意,那么算不算通过?
答:算,只要有任意的qrm全员赞成,就算提议通过。


2.如果有2N+1个acceptor。
有两个提议同时提出,这个时候N个赞成提议1,
N个赞成提议2,第2N+1个acceptor崩了。
好像协议是说,只能accept与自己一样的。
那么只要第2N+1个不出现,不是永远选不出来吗?
答:这里之前的理解有问题。acceptor是可以接受和自己之前接受的提议不一样的值得提议的。
但是对于提议者来说,提议怎样的提议是有要求的。


3.一个proposer怎么知道得到了一个qrm
的acceptor的回应?
是因为在系统设定的时候就会给出一个集群里拥有的
所有的acceptor的数量吗?
那么这个数量怎么维护呢?感觉只能人工给定啊?


4.怎么保证,多个proposer不会提出相同的
编号的提议呢?
答:每一个proposer能够用的编号集是不想交的。
所以不同的proposer没有相同的编号可用。
而对于某一个proposer只要保证不和自己之前的编号一样就好。


5.这个proposer和learner都要选择leader,
那么这个leader选举过程怎么保证一致性呢?
如果将选择leader看成一个提议,那么在实际选上之前
会有多个proposer一起提提议,可能会导致不断地
prepare request冲突,无法进行怎么选择?
原文P7有这样的语句,
 a reliable algorithm for electing a proposer must use
either randomness or real time—for example, by using timeouts. 
但是选出来了,怎么保证一致性,怎么让所有机器知道呢?
答:leader并不要求保持严格的一致性,同时存在一个以上的leader是
允许的。所以只需要通过心跳或者租约来查看leader的存活状况即可。


Summary
1.P1保证了能选出一个值。
2.P2保证了选出的值是一致的。
3.P2a保证了P2的成立。
4.P2b保证了,P1和P2a同时成立,也就保证了P1和P2
同时成立。
5.P2c保证了P2b的成立。

这篇关于Paxos协议学习---3.Paxos Made Simple的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/962061

相关文章

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台