6.1 什么是共识
受翻译影响,网上讨论 Paxos 或 Raft 的内容多使用“分布式一致性协议”或者“分布式一致性算法”这样的描述。如 Google Chubby 系统的作者 Mike Burrows,他对 Paxos 的评价原话是:“There is only one consensus protocol...”,很多文章翻译成“世界上只有一种一致性算法...”。
虽然“共识”和“一致”在汉语中含义相近,但在计算机领域它们有明显的差异:
- 共识(consensus):所有的节点就某一项提议(如选举、数据复制、分布式锁等)达成一致的过程及其算法;
- 一致(consistency):描述多个节点中存储的数据之间不自相矛盾,侧重于数据最终达成稳定状态的结果。
Paxos、Raft、ZAB 等等属于 consensus 算法,明显使用“共识”描述更准确,而 CAP 定理中的 C 和数据库 ACID 的 C 才是真正的“一致性” —— consistency 问题。
在充满不确定性的环境中(如节点故障、网络不可靠、消息延迟或丢失、顺序错乱,以及缺乏全局时钟导致无法明确事务顺序)可靠地达成共识是一件非常了不起的事情。一旦解决了共识问题,就能为分布式应用提供一套屏蔽内部复杂问题的抽象机制,满足应用层的很多目标需求。例如,一个分布式系统,当主节点故障时,系统需要切换到新的主节点。这时,共识算法可以用来选举出一个全局公认的主节点。如果没有共识,就会出现多个节点同时认为自己是主节点,也就是出现分布式系统中最令人担忧的情况 —— “脑裂”。
总字数:554字