概念
- C(Consistency):一致性
- 代表更新操作成功后,所有节点再同一时间的数据完全一致
- A(Availability):可用性
- 代表用户访问数据时,系统是否能够在正常响应时间返回预期结果
- P(Partitioning):分区容错性
- 分布式系统再遇到某节点或网络分区故障时,依然能够对外提供满足一致性或可用性的服务
三者不可能同时满足,要么满足CA,要么满足AP,要么满足CP
举例
如下图,当前有两个系统,一个订单系统,一个库存系统,俩系统是独立的,通过网络进行数据传输。当用户下了订单后,库存系统需要进行减库存的操作,下面是几种不同的设计思路:
- CP模式
- 订单创建后一直等待库存减少才返回结果
- 优点:保证了数据的强一致性
- 缺点:用户体验差,如果库存系统出了问题,用户会一直等待
- AP模式
- 订单创建后不等待库存减少就立即返回结果
- 优点:用户体验好
- 缺点:牺牲了数据的强一致性,库存异步处理,如果库存因为各种问题没有减少成功,数据出现了不一致,系统就需要做一些补偿机制,比如说重新发起请求、人工进行补录,采用数据校对程序把数据补全等等。来保证最终数据是一致的!
- AC模式
- 把订单系统和库存系统放一起的单体系统中。
- 在一个数据库的一个事务中完成操作
- 数据不在分区(没有了P)
使用场景
- CP:常用在银行、金融、证券对数据一致性要求很好的场景
- AP:常用在互联网的应用中,照顾用户的使用体验
- AC:小公司,数据要一直,响应要快,没分区
- ACP:做不到!又要快又要一致,又要分区。
本文首发于:CAP定理-向东的笔记本
《CAP定理》留言数:0