零基础一文读懂分布式系统(11)

\n

显而易见 , 我们只能二选一 , 如果要求结果确定 , 就不能保证一定能等到结果;如果要求拿到结果 , 就无法保证该结果一定是最终结果 。

\n

分布式系统就是这样 , 只能二选一 , 第一种选择被称作 Finality , 即「结果的确定性」或安全性;第二种选择被称作 Liveness , 即网络的活性或可用性 。

\n

这两种选择决定了分布式共识两种不同的设计思路:

\n

追求 Finality , 是优先结果 , 就要对网络做出要求 。 PBFT、Tendermint 都是这一类型的算法 , 它们走的是网络的同步性假设路线 , 使用这类算法的系统不会出现分叉 。

\n

追求 Liveness , 是优先网络 , 就要对结果做出让步 。 中本聪共识是这一类型的算法 , 它走的是结果的非确定性路线 , 使用这类算法的分布式网络始终可用 , 而且任意节点都可以随时加入 / 离开系统 。

\n

题外话 , 在 Finality 和 Liveness 中二选一也是分布式系统 CAP 定理(不可能三角)的体现 。 该定理说的是:对于一个分布式系统来说 , 不可能同时满足一致性、可用性和分区容错性 。 因为分区容错性是指该系统要能容忍网络出现分区 , 而现实网络是一定会分区的 , 所以这个条件必须满足 , 那么实际上 , CAP 定理说的是一个分布式系统不可能同时满足一致性和可用性 , 这其中 , CAP 一致性体现的是 Finality , CAP 可用性体现的是 Liveness 。

推荐阅读