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

\n

\n

如果计算机都运行良好 , 它们之间的通信也完全同步 , 实现这个目标并不困难 。 但现实不是如此 , 主要有以下两类问题:

\n

某台 / 某些计算机出现故障 , 它可能无法计算出结果 , 也可能连接不上系统 。

\n

如果不同计算机收到事件的顺序不同 , 对事件的处理顺序就会不同 , 导致输出结果也不同 。 比如(a+b)×c 与 a+(b×c)就是两种不同的计算顺序 , 会带来不同的计算结果 。

\n

这些问题是常见且不可避免的 , 而一旦出现问题 , 就无法实现全部的计算机都同意某一个输出结果 。 著名的分布式系统「FLP 不可能原理」是这样描述的:在网络可靠 , 但允许节点失效的最小化异步模型系统中 , 不存在一个可以解决一致性问题的确定性共识算法 。 通俗而言就是:只要系统中有一台计算机出问题 , 该系统就无法在输出值上达成共识 。

\n

FLP 不可能原理告诉我们:不要浪费时间去为分布式系统设计面向所有场景的共识算法 , 那是不可能实现的 。

推荐阅读