CAP理论学习
转自:https://zhuanlan.zhihu.com/p/33999708
1.概述
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
1.1 Consistency 一致性
一致性指“all nodes see the same data at the same time
”,即所有节点在同一时间的数据完全一致。并发读写多个数据拷贝的场景。
从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何分布到整个系统,以保证数据最终一致。
分为强/弱/最终一致性三类:
- 强一致性:对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。【要求每次都读到最新的数据】
- 弱一致性:如果能容忍后续的部分或者全部访问不到,则是弱一致性。
- 最终一致性:如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。【允许一段时间内读取到的不一致】
1.2 Availability 可用性
指“Reads and writes always succeed
”,即服务在正常响应时间内一直可用。
好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。
通常和分布式数据库冗余、负载均衡有关系。
1.3 Partition Tolerance分区容错性
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system
”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。
2.权衡
- AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。
- CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。对于涉及到钱财这样不能有一丝让步的场景,C必须保证。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-08-01 算法分析与设计入门-搜索策略