2021-07-30

为什么极少有开源的Paxos库?

Views: 9324 | Add Comments

你是不是也很奇怪, Paxos 既然被称为唯一的共识算法(分布式一致性算法), 是分布式系统的基石, 那么为什么极少看到开源的 Paxos 库呢? 反观 Raft, 有 etcd 开源的 go 语言写的库, 有 PingCap(tidb)开源的 Rust 语言写的, 还有百度, 阿里等等公司开源的各种语言的库. 既然 Paxos 那么牛逼, 为什么江湖中只有它的传说, 却从来没有人见过它的身影呢?

原因很简单, Paxos(准确的说是 Basic Paxos) 是共识算法, 用于对一个实例的状态形成共识, 这个用途和工程上的一致性协议基本是金属铁块和汽车的关系. 工程师对 Paxos 最大的疑问经常是:

  • 什么是实例? 一整个 database 是一个实例吗? 一个 key 是实例吗?
  • 共识是什么? 是一个 key 对应的 value 吗? 形成共识之后就不能更改? 有什么用?

所以, Basic Paxos 不是问题的解决之道. 有所谓的 Multi Paxos, Paxos 的论文中对这个模型(有人认为就是复制状态机)的定义和讨论非常不完善, 一千个人有一千种看法, 而且大多还是错的.

Raft 提出了工程上的分布式一致性协议的核心本质: 选主和日志复制状态机.

管你什么 Multi Paxos, Fast-Paxos, X-Paxos, ABC-Paxos, 通通都是日志复制状态机. 管你成员显式选主还是客户端认主, 通通都是选主.

你说 Paxos 不需要 Leader, 那还不是要求客户端根据 Hash 算法认定一个节点作为 Leader? 你说你的日志序列支持空洞, 还支持乱序 Apply 日志(执行指令), 但两条指令执行的顺序不同必然导致结果不同, 结果(状态)都不相同, 你还谈什么一致性?

做来做去, 还不是 Raft 所总结的那一套方法吗? - 就是选主和日志复制状态机!

所以, 为什么没人开源 Paxos 库? 因为工程上要做的工作, Paxos 只占 1% 的工作量, 你把 1% 的微小工作包装成一个库? 有啥卵用? 没有人会用的, 因为这个库什么功能也没有, 什么问题也没解决(准确地说只解决了 1%).

还要什么 Paxos 开源库? 要的是选主, 日志复制状态机, 成员变更, 就是 Raft 那个样子, 即使你心里面极度排斥 Raft, 但最终你还是会把一个 Paxos 库实现成 Raft 的样子.

Related posts:

  1. Paxos 和 Raft 的结构差异
  2. Paxos和Raft读优化 – Quorum Read 和 Read Index
  3. Paxos 与分布式强一致性
  4. 分布式存储名词解析 – 一致性
  5. 什么是 Paxos 的日志空洞?
Posted by ideawu at 2021-07-30 00:24:42 Tags: ,

Leave a Comment