Paxos 简介

1,837 views
1,715 views

Published on

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,837
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
43
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Paxos 简介

  1. 1. Paxos 简介 Paxos 简介 清无 2012-10-19 Fri . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  2. 2. Paxos 简介Outline 1 Paxos 功能简介 2 Paxos 协议描述 3 生产实践中的问题 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  3. 3. Paxos 简介 Paxos 功能简介Paxos 协议功能 历史……忽略 描述在 proposer/acceptor/learner 3 种结 分布式一致性协议, 点角色之间的交互过程 容灾特性:不管碰到结点失效、 断网或是传输延迟,都能让分 布式系统的各个结点认同一样的 不可变“值” 这个“值”可以是任意数据或操作! . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  4. 4. Paxos 简介 Paxos 功能简介Paxos 协议执行的一般过程 通常每个结点都部署 proposer/acceptor 角色, 读/写比不太 大时不需要 learner 角色 一个 (或多个) 结点通过选举过程成为 leader leader 结点发起提案, 请求其他结点接受某个值 leader 根据其他结点的反馈, 声明该值得到认可或是进行重 试 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  5. 5. Paxos 简介 Paxos 协议描述自然语言描述的 Paxos 协议 - 神会表决 假定每个牧师维护临时如下信息: lastTried[p]: p 试图发起的最后一个表决的编号, 由 如果没有 发起过则记录 -∞ prevVote[p]: p 投票的所有表决中, 编号最大的表决对应的 由 p 的投票, 如果没有投过票则记录 -∞ nextBal[p]: p 发出的所有 LastVote(b,v) 消息中, 由 表决编号 b 的最大值。 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  6. 6. Paxos 简介 Paxos 协议描述自然语言描述的 Paxos 协议 - 神会表决 神会表决执行过程为: 牧师 p 选择一个比 lastTried[p] 大的表决编号 b, 设置 lastTried[p] 为 b, 然后发送 NextBallot(b) 消息给某些牧师。 在从 p 收到一个 b 大于 nextBal[q] 的 NextBallot(b) 消息后, 牧师 q 将 nextBal[q] 设置为 b, 然后发送一个 LastVote(b,v) 消息给 p, 其中 v 等于 prevVote[q]。(b<=nextBal[q] 的 NextBallot(b) 消息将被忽略) 在从某个多数集合 Q 中的每个成员都收到一个 LastVote(b,v) 消息后,牧师 p 发起一个编号为 b, 法定人数集 为 Q, 法令为 d 的新表决, 其中 d 的选择遵守 B3 条件。 然后 他发送一个 BeginBallot(b,d) 消息给 Q 中的每一个牧师。 B3 条件:对于每一轮表决 B, 如果 B 的法定人数集中的任 一个牧师在一个 轮的表决中投过票, B 的法令与所 有这些 轮表决中的最大的 次表决的法令相同 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  7. 7. Paxos 简介 Paxos 协议描述自然语言描述的 Paxos 协议 - 神会表决 在收到一个 b=nextBal[q] 的 BeginBallot(b,d) 消息后, 牧师 q 在编号为 b 的表决中投出他的一票, 设置 prevVote[p] 为这 一票, 然后发送 Voted(b,q) 消息给 p (b != nextBal[q] 的 BeginBallot(b,d) 消息将被忽略) 在 p 收到 Q 中每一个 q 的 Voted(b,q) 消息后 (这里 Q 是表 决 b 的法定人数集合, b=lastTried[p]), 他将 d(这轮表决的法 令) 记录到他的律簿上, 然后发送一条 Success(d) 消息给每 个 q。 一个牧师在接收到 Success(d) 消息后, 将法令 d 写到他的律 簿上。 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  8. 8. Paxos 简介 Paxos 协议描述伪代码表述的 Paxos 协议 神会协议的消息同形式化表述消息对应关系: NextBallot -> prepare LastVote -> promise BeginBallot -> accept Voted -> accept_ok Success -> decided . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  9. 9. Paxos 简介 Paxos 协议描述伪代码表述的 Paxos 协议 proposer 逻辑: § ¤ PROPOSE(v) choose b > lastTried send PREPARE(b) to all if PROMISE(na, va) from majority then va = va with highest na, or choose own v otherwise send ACCEPT(b, va) to all if ACCEPT_OK(b) from majority then save (b, va) to persist storage send DECIDED(b, va) to all ¦ ¥ acceptor 逻辑: § ¤ PREPARE(n) if n > nextBal nextBal = n reply PROMISE(prevVote.na, prevVote.va) ACCEPT(n, v) if n == nextBal prevVote.na = n prevVote.va = v reply ACCEPT_OK(n) DECIDED(n, v) save (n, v) to persist storage ¦ . . . . . . . . . . . . . . . . ¥ . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  10. 10. Paxos 简介 生产实践中的问题Paxos 生产实现 - Chubby/ZooKeeper Google Chubby 实现 Paxos 算法时对其评价: Paxos 算法伪代码表述也就一页纸, 但真正开发出生产可用 的 C++ 代码则需要额外实现很多特性和优化方法,这些方 法有不少都没有在文献中说明 容灾算法研究者习惯于证明简短算法 (一页纸的伪代码) 的 正确性。该方法无法应用于上千行代码的系统,因此要用不 同的方法来证明真实系统的“正确性” 容灾算法仅能容忍有限的一组精心挑选的故障。但真实世界 中, 软件面临广泛得多的故障形式,包括算法错误、实现 bug、 运维失误等等。生产级软件必须具备相应的健壮性,并仔细 设计运维过程 真实系统的功能很少能被精确描述, 实际上系统实现过程中 其功能要求也可能发生变化, 因此实现必须具备可塑性。系 统也可能由于对需求功能理解有误而“出错“ . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  11. 11. Paxos 简介 生产实践中的问题Google Chubby 对 Paxos 的修改和补充 减少消息交互, 提升数据吞吐量 Multi-Paxos - master 身份无变化时不再重复第 1 段的 prepare/promise 过程 Master 身份租约 - master 身份不会被随时抢占, 无机器故障 时会维持一段指定的时间, 这样读取数据不需要发起新的表 决, 可以直接读取 master 本地数据 应对磁盘故障 磁盘文件校验和 - 检查由于磁盘问题造成的本地数据损毁 GFS 标记文件 - 用来在本地数据全部丢失时区分是由于磁盘 故障造成还是全新启动的空结点 Catch-up 机制 - 让因磁盘故障等原因较长时间未参与表决的 结点有机会将本地状态同步至最新 . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  12. 12. Paxos 简介 生产实践中的问题Google Chubby 对 Paxos 的修改和补充 应对其他异常 Master 身份刷新 (Boosting) - master 定期发起完整的 Paxos 表决过程确保自己的提案序号最新, 降低特定故障模式下 master 身份振荡对系统吞吐量的影响 全局 epoch 计数 - 将 master 身份切换次数记录在全局的 epoch 计数中, 并将本地持久化存储的操作全部表达为基于 epoch 的 CAS 操作,避免在表决过程的两段之间产生难以检 测的 master 身份切换造成数据损坏 快照机制 - 避免 Paxos 同步的数据库操作日志无限膨胀, 加 快新增结点同步数据库的速度 提升可运维性 动态组成员 - 原始 Paxos 算法要求选举组内结点数量已知, 现实中这样难以运维, 动态组成员机制可以动态添加/删除选 举组内结点,易于运维。 意:动态 整选举组需要 外 心, 则可能 Paxos 对 法人 数量的要求造成系统无法 ! . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
  13. 13. Paxos 简介 生产实践中的问题 That’s all! . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..

×