《Paxos Made Simple》翻译

1 Introduction

可能是因为之前的描述对大多数读者来说太过Greek了,Paxos作为一种实现容错的分布式系统的算法被认为是难以理解的。但事实上,它可能是最简单,最显而易见的分布式算法了。它的本质其实就是共识算法——the "synod" algorithm of。在下一节中我们将展示,该共识算法基本满足了所有我们想要它满足的特性。最后一节则展示了完整的Paxos算法,通过直接应用协商一致的状态虚拟机来构建分布式系统——这种方法应该是广为人知的,因为这可能是分布式系统理论中被引用最多的领域。

2 The Consensus Algorithm

2.1 The Problem

假设有一些进程可以提出value。共识算法保证了在所有提出的value里只有一个会被选中。如果没有value被提出,那么也就没有value会被选中。如果一个value被选中了,那么其他的进程应该能够获取该value。协商一致的要求如下:

  • 只能选择已经被提出的value
  • 只能选择一个value
  • 进程只能获取那些真正被选中的value

我们不会尝试指定精确的要求。但是我们的目标是要确保总有一些被提出的value会被选中,如果一个value最终被选中了,那么其他进程最终要能够获取该value。

我们用三类agent来代表共识算法中的三类角色:proposers, acceptors和learners。在具体的实现中,一个进程可能扮演不止一类agent,但是从agent到进程的映射我们在这里并不关心。

假设agent之间可以通过发送message互相通信。我们使用customary asychronous,non-Byzantine model,其中:

  • Agents以任意速度执行,可能发生故障,可能重启。因为所有的agent都可能在一个value被选中之后故障并重启,因此一般的方法是不可行的,除非agent能记住一些信息,即使发生了故障或重启。
  • 发送的message可以是任意长度的,可能重复,也可能丢失,但是它们不会被损坏

2.2 Choosing a Value

存在一个单一的acceptor agent是最简单的选择value的方式。proposer向acceptor发送提议,后者从中接收最早收到的那个。虽然很简单,但是这种方法是不能满足要求的因为acceptor的故障,因为acceptor的故障就将导致接下来的操作都无法进行。

因此我们需要尝试另一种选择值的方式。这次我们将有多个而不是一个acceptors。proposer将会向一个acceptor的集合发送value。acceptor可能会接受value。但是该value只有在足够多的acceptor都接受它的情况下才算被选择了。那么怎样才算足够大呢?为了确保只有一个value会被选中,我们可以认为一个足够大的agent集合由任意的agent majority组成。因为任意两个majority都至少有一个公共的agent,因此如果一个agent最多只能接收一个value,那么这种方法是可行的。

在没有故障和message丢失的情况下,我们想要有一个value能被选中,即使只有一个proposer提出了一个value。这就需要满足以下要求:

P1. acceptor必须接收第一个它收到的proposal

但是这个要求会引起这样一个问题。不同的proposer可能会在几乎同时提出好几个不同的value,这会导致这样一种情况:每个acceptor都接受了一个value,但是没有一个value是被一个majority接受的。即使只提出了两个value,而它们各自被一半的acceptor所接收,那么任意单个acceptor的故障都将让我们无法获取它选择了哪个value。

P1以及value只有被majority个acceptor接受才被算被选中的要求就导致了我们的acceptor必须能接受超过多于一个的proposal。我们通过给每个proposal赋予一个编号来追踪不同的proposal,所以一个proposal由一个proposal number和一个value组成。为了防止出现歧义,我们要求不同的proposal要有不同的number。这里我们仅仅只是做出这个假设,具体的实现可能有所不同。当一个proposal被一个acceptor的majority所接收时,我们就认为该value被选中了。这种情况下,我们说这个proposal(同时也包括它的value)被选中了。

我们可以允许多个proposal被选中,但是我们必须被选中的proposal必须有相同的value。

时间: 2024-10-13 17:04:20

《Paxos Made Simple》翻译的相关文章

《Remus: High Availability via Asychronous Virtual Machine Replication》翻译

Abstract 想要让应用能够躲过硬件故障是一项非常昂贵的任务,因为这通常意味着对软件进行重构,使它包含复杂的恢复逻辑的同时需要部署专用的硬件,而这些对于提升大型的或者遗留的应用的可靠性是巨大的障碍.我们接下来将描述一个通用的高可用服务,它能够为那些已经存在并且未经修改的软件,在其运行的物理机故障的时候,提供保护.Remus提供了非常强的容错能力,它可以在发生故障的时候,让一个正在运行的系统无缝迁移到另一台物理机上,只需要短暂的停机时间,并且完全保留所有的主机状态,例如网络连接等等.我们采用的

Eclipse failed to create the Java Virtual Machine问题解决

1.问题描述 如标题所示,在开启Eclipse的时候,出现这个问题,以前是不曾出现过的问题,很奇怪: 2.问题解析 Failed to create the Java Virtual Machine,翻译过来的意思是,无法创建java虚拟机. 看到这样的问题,首先想到的是两个问题,第一,是否有文件缺失,导致虚拟机无法启动.想想不是太可能,文件缺失的话,应该之前就无法启动:再考虑是否有文件被安全软件回收了(360老干这种事情),打开360似乎也没有发现这种问题. 那么第二种情况,可能是内存不足,导

Windows Azure Virtual Machine (1) 相关技术

<Windows Azure Platform 系列文章目录> 1.Microsoft Azure是否由System Center和Hyper-V构成? Microsoft Azure虽然支持Hyper-V的VHD直接上传至Azure云端进行管理,但是Azure底层技术是微软自己研发的.独有的技术,且不对外提供.如果客户想构建属于自己的私有云平台,可以使用Azure Pack,采用微软的System Center + Windows Server产品,构建自己的私有云平台. 2.我是否可以在M

PatentTips - System and method to deprivilege components of a virtual machine monitor

BACKGROUND INFORMATION An embodiment of the present invention relates generally to virtualization platforms and, more specifically, to a system and method to run components of a virtual machine monitor at a reduced privilege level. Various mechanisms

[SQL in Azure] Provisioning a SQL Server Virtual Machine on Azure

http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-provision-sql-server/ Provisioning a SQL Server Virtual Machine on Azure The Azure virtual machine gallery includes several images that contain Microsoft SQL Server. You can sel

How to Downgrade VMware ESXi 5.5 Virtual Machine Hardware Version to 9 from 10

Shut down the virtual machine in the vSphere client. Remove your virtual machine from the ESXi inventory. Browse your Datastore and find the virtual machine's .vmx file.   Download it to your desktop. Open the .vmx file in Notepad or your favorite te

【cl】解决Fail to create the java Virtual Machine

eclipse打开,提示Fail to create the java Virtual Machine 解决方法: 1.到eclipse安装目录下,找到eclipse.ini 2.按键盘ctrl+F,复制以下字符“launcher.XXMaxPermSize”,去掉引号,查找 3.将随后出现的两个216m改成128m

虚拟机打不开错误:VMware Workstation cannot connect to the virtual machine.

错误提示: VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for temporary files. The VMware Authorization Service is not running. 解决

用Virtual Machine Manager做虚拟机储存迁移

用Virtual Machine Manager做虚拟机储存迁移 下面是迁移虚拟机存储的例子 1.选中所要项迁移的虚拟机的存储---点击迁移存储 2.该路径 3.选择一个你事先弄好的共享文件夹---确定 4.下一步 5.移动 6.返回查看迁移情况 7.迁移完成 8.查看属性 9.查看存储位置

启动Myeclipse报错“Failed to create the Java Virtual Machine”的解决办法

我安装的是Myeclipse 10.7.1.装上好久没用,今天启动突然报错:Failed to create the Java Virtual Machine. 检查Myeclipse安装好使用时好的啊,近期也没用,可能是近期升级了本地单独安装的jre版本导致的吧(Myeclipse使用自己的jre的). 整理了如下2个解决办法,可以选择一个使用,我选择的是第2个.经测试都ok. 方法一: 找到Myeclpise路径下的myeclipse.ini文件: 编辑将Xmx(JVM Heap最大允许的尺