01-分布式理论

CAP理论

CAP理论作为分布式系统的基础理论,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),这三个要素最多只能同时实现两点。

  • 一致性(C:Consistency):一致性是指数据在多个副本之间能否保持一致的特性。例如一个数据在某个分区节点更新之后,在其他分区节点读出来的数据也是更新之后的数据。
  • 可用性(A:Availability):可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。这里的重点是”有限时间内”和”返回结果”。
  • 分区容错性(P:Partition tolerance): 分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务。

BASE 理论

BASE 理论, 是对CAP中AP的一个扩展,对于我们的业务系统,我们考虑牺牲一致性来换取系统的可用性和分区容错性。BASE是Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写。

  • Basically Available基本可用:通过支持局部故障而不是系统全局故障来实现的。如将用户分区在 5 个数据库服务器上,一个用户数据库的故障只影响这台特定主机那 20% 的用户,其他用户不受影响。
  • Soft State软状态: 状态可以有一段时间不同步
  • Eventually Consistent最终一致,最终数据是一致的就可以了,而不是时时保持强一致。

FLP不可能性原理:在网络可靠,存在节点失效(即使只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。

提出该定理的论文是由Fischer,Lynch和Patterson三位作者于1985年发表,该论文后来获得了Dijkstra奖,Dijkstra就是发明最短路径算法的那位。

FLP不可能原理实际上告诉人们,不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法。

  • 理解这一原理的一个不严谨的例子是:

三个人在不同房间,进行投票,投票结果是1或者0。三个人彼此可以通过电话进行沟通,但经常会有人睡着。比如某个时候,A投票0,B投票1,C收到了两人的投票,然后C睡着了。A和B则永远无法在有限时间内获知最终的结果。如果可以重新投票,则类似情形每次在取得结果前发生。

FLP原理实际上说明对于允许节点失效的情况下,纯粹异步系统无法确保一致性在有限时间内完成。

这岂不是意味着研究一致性问题压根没有意义吗?

先别这么想,学术界做研究,考虑的是数学和物理上最极端的情形,很多时候现实生活要美好的多,感谢这个世界如此鲁棒!例如,上面例子中描述的最坏情形,总会发生的概率并没有那么大。

科学告诉你什么是不可能的,工程则告诉你,付出一些代价,我可以把它变成可能。

这就是工程的魅力。

那么,退一步讲,在付出一些代价的情况下,我们能做到多少?

回答这个问题的是另一个很出名的原理:CAP原理。