CP与AP的取舍

236 阅读2分钟

这是我参与 8 月更文挑战的第 13 天,活动详情查看: 8月更文挑战

CAP理论

分布式系统设计要考虑三个核心要素:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),而这三个特性不可能同时满足。

  • 一致性:同一时刻同一请求的不同实例返回的结果相同。
  • 可用性:所有读写请求在一定时间内得到正确的响应。
  • 分区容错性:在网络异常情况下,系统仍能正常运作。

由于分布式环境下网络的故障是常态,比如光缆被挖断、专线故障、网络波动、丢包、节点宕机等,所以设计时要考虑的是在满足P的前提下选择C还是A。

以分布式缓存系统为例,如果要保证一致性(C),就要求一个节点写入数据后必须再将数据写入到另一个节点后才能返回成功,当发生网络异常两个服务节点无法相互通讯,为保证一致性必须抛出异常进而牺牲了可用性(A)。如果要保证可用性(A),就要求两个节点数据同步前也必须可用,这就必须牺牲一致性(C)导致在一段时间内两个服务节点所查询到的数据可能不同。

Base理论

Base是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventual consistency)三个短语的简写。

大量的工程实践的经验表明可用性很重要,一致性也很重要,但可以容许一定的时差,只要保证在一定时间内达到一致即可,这也就是最终一致性。因为要实现强一致性的成本很高,尤其是存在很多数据副本的情况下,区块链的PoW及其衍生算法的共识机制是概率强一致性(Probabilistic Strong Consistency),要求大多数节点都接受了这笔交易再真正接受它,这就导致交易的确认严重滞后。

Base方案允许系统在一段时间内存在数据不一致性,存在软状态,但在规定的时间后数据会最终一致性。这样做的好处在于满足可用性的同时也在一定程度上符合一致性的要求。