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

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在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