Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Paxos 简介

2,199 views

Published on

Published in: Technology
  • Be the first to comment

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! . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..

×