概述
概念
CAP定理中的CAP就是三个单词的缩写,分别是:
C:Consistency 一致性(在分布式系统中的所有数据备份,在同一时刻都是同样的值)
A:Availability 可用性(保证每个请求不管成功或者失败都有响应)
P:Partition tolerance 分区容错性(系统中任意信息的丢失或失败不会影响系统的继续运作)
定理的概念是,对于一个分布式系统来说,不可能同时满足以上三点,最多只能同时满足其中两点。
场景
我们把CAP两两组合,每种场景都用两个例子来解释,方便理解。
①以订单库存系统为例。
②以数据库主从同步为例 。
CP
牺牲可用性,保证一致性和分区容错性。
例①,用户通过订单系统创建订单后,通知库存系统,并等待库存系统反馈后,再返回创建订单的结果。
两个系统的拆分保证了分区容错性,等待库存系统的反馈保证了数据在两个系统中的一致性,但是等待的过程会导致用户体验变差,也就是牺牲了可用性。
例②,数据库主从架构,并采用同步复制策略。保证一致性和分区容错性,同步复制会在一定程度上影响可用性。
AP
牺牲一致性,保证可用性和分区容错性。
例①,用户通过订单系统创建订单后,通知库存系统,但是不等待库存系统的反馈,直接返回创建订单的结果。
两个系统的拆分保证了分区容错性,库存的异步处理保证了系统的可用性,但如果库存系统出现故障,就会造成两个系统之间数据不一致。这种情况下,系统需要考虑设置一些补偿机制。
例②,数据库主从架构,并采用异步复制策略。保证可用性和分区容错性,但是异步复制会导致短时间内的主从数据不一致。这种情况可以考虑强制读主库或延迟读从库。
AC
牺牲分区容错性,保证可用性和一致性。
例①,订单系统和库存系统不再拆分,合并成单体应用,所有操作均在同一事务下,仅可以保证可用性和一致性。且这样设计不再是分布式系统,不具备分区容错性。
例②,数据库单体架构,保证可用性和一致性,但数据库成为单点,不具备分区容错性。
总结
一致性 | 可用性 | 分区容错性 | 场景 | |
---|---|---|---|---|
CP | √ | × | √ | 要求数据的强一致性和容灾容错能力 通常是银行、金融类项目 |
AP | × | √ | √ | 大部分的互联网应用会采用AP设计原则 允许短时间内的数据不一致,但是不能牺牲可用性 |
AC | √ | √ | × | 在生产环境中,分区容错性非常重要 很少采用AC设计原则 |
最后
以上就是爱听歌冷风为你收集整理的什么是CAP定理的全部内容,希望文章能够帮你解决什么是CAP定理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复