2021-08-11

Paxos 算法难以理解吗?

Views: 15048 | Add Comments

Paxos 被冠以"晦涩难懂"的恶名, 一方面来源于它自身的定位不清, 边界模糊, 另一方面来源于它并不直接解决工程上广泛的强烈需求. 工程师们需要一个算法(规则, 协议), 用来开发一个分布式多副本系统, 并让多副本对外表现得像一个单一副本的效果(强一致性, 线性一致性, 外部一致性). 坦率地说, Paxos 距离这个需求有十万八千里. 所以, 广大的工程师便认为 Paxos 算法难以理解.

首先, 我们需要理解 Paxos 的算法的定位. 不幸地是, 在这第一步, 我们就遇到的麻烦! 大多数人接触到 Paxos 都是从 Basic Paxos 的两个步骤(1a, 1b, 2a, 2b)开始的. 人们花费了大量的精力来记忆这当中的操作步骤, 但是, 却看不到为什么要这样做.

第一个问题也出现了, Paxos 是不是等于 Basic Paxos? Paxos 是不是就等于那两个步骤? 我们还没谈到 Multi Paxos, 另一个极不完善的理论.

如果把 Basic Paxos 理解为 Paxos 算法的全部, 那么, Paxos 算法其实非常容易理解, 只需要记住两个步骤即可. 这两个步骤, 从头到尾围绕着 3 个变量在做操作, 没什么难的.

那么接下来的问题就是, Basic Paxos 能解决什么问题? 空泛地讲, Basic Paxos 用于决定多副本的最终状态, 也即共识. 这时候, 工程师们又犯迷糊了:

  • 副本的粒度多大? 一个表? 一行记录?
  • 决定最终状态? 那我不能 update 一行记录了?

这些问题都是工程师们的拦路虎绊脚石, 如果不解答的话, 寸步难行. 答案很简单:

Paxos 对这些问题没有直接卵用!

Basic Paxos 从来就没有想去直接解答这些问题, 它把责任推给你了! Paxos 说:"我就是决定实例的值, 其它的我都不管." 到了这里, 你知道为什么 Paxos 被冠以恶名了吧? 工程师面前绕不过去的亟待解决的重要工程问题, 全在它的边界之外... 你说, Paxos "难"不难? 你是否弄懂了 Paxos 的边界?

所以说, Paxos 难就难在, 所谓的 Prepare, Accept, Chosen, 通通没有直接的工程意义, 要解决工程问题, 你可以利用它, 再做 99% 的工作. 如果没有那 99% 的工作, 即使有 Paxos, 你一行代码也写不出来.

Paxos 难并不难在所谓的数学证明, 数学之美, 因为并不是所有人都需要去理解数学证明, 证明不证明与我无关. 有时候, 我们只需要知道科学家已经证明过了即可.

Paxos 难就难在, 它不解决广泛的强烈需求. 如果你先有需求, 再找解决方案的话, 那么, Paxos 确实非常难, 因为它不解决你的问题. 如果你陷入自我怀疑, 尝试去弄懂所谓的优美数学证明, 依然没用, 就算弄懂了数学证明, 你也解决不了任何问题. 这时候, 你只会陷入更深的自我怀疑, 只能找个理由说:"Paxos 太难了..."

所以说, Paxos 很简单, 因为 Basic Paxos 的两个步骤只关注 3 个变量, 完完全全照着做就行了, 没什么难度. Paxos 非常难, 因为它不直接解决问题, 你还要做 99% 的工作, 而那 99% 的工作对你来说是黑洞, 才是最难的地方.

进一步阅读:

Related posts:

  1. Paxos 与分布式强一致性
  2. 关于 Paxos 论文中的迷惑之处
  3. Paxos vs Raft 的争论
  4. 什么是 Paxos 的日志空洞?
  5. 为什么 Leader Based 的分布式协议 Raft 是更好的
Posted by ideawu at 2021-08-11 21:29:19 Tags:

Leave a Comment