Skip to content

Latest commit

 

History

History
86 lines (51 loc) · 4.25 KB

File metadata and controls

86 lines (51 loc) · 4.25 KB
layout post
category 分布式
description 分布式算法Paxos的介绍和相关参考资料,Paxos算法原文,Paxos算法解读,ZooKeeper的灵魂Paxos
keywords 分布式算法
title 分布式一致性算法Paxos
tags
分布式
Paxos
ZooKeeper
summary 分布式算法Paxos介绍

####一.简介 Paxos是基于消息传递的一致性算法,解决的是分布式系统中的一致性问题。

Paxos算法的核心和精华就是确保每次表决只产生一个Value。

Google的Chubby和Apache的ZooKeeper都基于此实现。

Paxos假设发生在一个可信的网络环境中,不会有拜占庭的问题。

Leslie Lamport的Paxos算法原文

####二.简单理解Paxos算法:Paxos岛上的议案 假设有个叫Paxos的岛,岛上的所有事情都是有一群叫议员(Senator)的人决定的,这些议员组成了一个议会。

岛上的所有事务都必须要经过一个叫议案(proposal)来决定的,每个proposal都有个编号,且编号不断往前长。

一个议案只有超过议会一半的议员通过才会生效。

每个议员都会有个笔记本,记录自己当前的提议编号。

每个议员只会通过比自己编号大的议案。

议会不能保证每个议员笔记本上的编号都相同。

#####无冲突的议案 好,现在议会开始运作,所有议员一开始记事本上面记录的编号都是0。

有一个议员发了一个提议:将电费设定为1元/度。他首先看了一下记事本,嗯,当前提议编号是0,那么我的这个提议的编号就是1,于是他给所有议员发消息:1号提议,设定电费1元/度。其他议员收到消息以后查了一下记事本,哦,当前提议编号是0,这个提议可接受,于是他记录下这个提议并回复:我接受你的1号提议,同时他在记事本上记录:当前提议编号为1。发起提议的议员收到了超过半数的回复,立即给所有人发通知:1号提议生效!收到的议员会修改他的记事本,将1好提议由记录改成正式的法令,当有人问他电费为多少时,他会查看法令并告诉对方:1元/度。

#####有冲突的议案 假设总共有三个议员S1-S3,S1和S2同时发起了一个提议:1号提议,设定电费。S1想设为1元/度, S2想设为2元/度。结果S3先收到了S1的提议,于是他做了和前面同样的操作。紧接着他又收到了S2的提议,结果他一查记事本,咦,这个提议的编号小于等于我的当前编号1,于是他拒绝了这个提议:对不起,这个提议先前提过了。于是S2的提议被拒绝,S1正式发布了提议: 1号提议生效。S2向S1或者S3打听并更新了1号法令的内容,然后他可以选择继续发起2号提议。

####三.ZooKeeper中的Paxos

小岛:ZooKeeper集群

议员:ZooKeeper中的server

议案:ZNode的变更

议案编号:ZXID

在ZooKeeper中只有leader才能发起议案,因此还有leader的角色。

以上第二、三小节引用自: Zookeeper全解析——Paxos作为灵魂

####四.算法详述 #####(一).Wiki上的Paxos算法介绍

分布式系统上的节点通信包含两种方式:共享存储和消息传递。

基于消息传递的系统,可能发生进程慢、重启、崩溃等状况,消息可能出现延迟、丢失和重复,因此需要一个算法能在此环境中保证状态一致。

假设一个分布式的系统中,初始状态一致,如果应用相同顺序的操作,那么最终它将到达一个一致性的状态。

######角色划分 议员的角色被分为三种:

  1. proposer
  2. acceptors
  3. learner

proposer可以提出一个提案,acceptors可以选择接受它,只有大部分的acceptors接受后,提案才能通过,成为决议。

learner只能学习决议的内容,不参与提案决定的过程。

#####(二).陈国庆的Paxos算法介绍

####参考资料

  1. Zookeeper研究和应用
  2. zookeeper跟经典paxos的对比(附源码)