CAP的定义
CAP定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是分布式系统设计中最基础、最重要的理论,它的意思是对于一个分布式计算系统来说,不可能同时满足以下三点条件:
- 一致性(Consistency):每次读取要么获得最近写入的数据,要么获得一个错误。
- 可用性(Availability):每次请求都能获得一个(非错误)响应,但不保证获得的数据为最新数据。
- 分区容错性(Partition tolerance):尽管任意数量的消息被节点间的网络丢失(或延迟),系统仍继续运行。
这三个条件的核心都是数据,数据是否一致,数据是否可用,数据是否做了分区容错。
为了更好的理解CAP原理,下面我来为大家介绍各个条件实际的应用场景。
-
一致性
银行系统部署了N个节点,其中一个节点收到了用户的转账请求,在该请求处理的过程中,以及处理结束后,无论访问银行系统的哪个节点,查询到该用户的账户金额都应该是一致的。
需要注意的是,CAP的一致性与ACID的一致并不相同,CAP侧重于不同系统节点的数据一致,ACID则侧重于数据库事务的完整性。 -
可用性
与一致性不同,可用性只要能正常响应请求就可以了,哪怕该请求依赖的数据不是最新的也不要紧。
比如一个卖书网站,用户A在某一时刻看到的库存是1,此时用户B先买了最后一本书,实际库存变成0,但是用户A不知道,也做了下单操作。
如果是一个强调一致性的系统,此时会告诉用户:库存不足,下单失败。而一个强调可用性的系统,则会让用户下单成功,然后通过其它办法补充库存。 -
分区容错性
在不同节点上保存相同的数据副本,当一个节点的数据发生变更时,通知其它节点