CAP
定义
布鲁尔定理,分布式系统中,对一致性,可用性,分区容错性,不可能同时满足,最多满足2个,尤其是在一致性和可用性之间要有所取舍。
C:consistency 一致性;
A: Availability 可用性;
P: Partition Tolerance 分区容错性;
一致性(Consistence)
各节点的数据保证一致(每次成功写入后,无论哪个节点读取的都能读取到同样的最新数据),等于说所有节点的写操作都是原子操作(要么全部失败,要么全部成功)。一致性细分有3种(CAP指的强一致):
- 强一致,一个节点完成写操作后,其它节点都能读取到。
- 弱一致,能容忍部分或全部都不能及时同步更新数据。
- 最终一致,经过一段时间,全部节点的数据保持一致。
可用性(Availability)
每次向未崩溃的节点发送请求,总能保证收到响应数据(允许不是最新的)。cap理论一致性和可用性无法兼顾:
- 若要保证一致性,则必须进行所有节点同步,同步期间数据锁定导致读取失败或超时,和可用性冲突。
- 若保证可用性,则不允许节点间同步时间段内进行锁定,和一致性冲突。
分区容错(Partition Tolerance)
是指:节点之间传递消息的差错(延迟或丢失),不影响系统正常运行。
分布式系统中,P是必须满足,只能在C|A之间取舍。
CAP证明
反证法,假设一个分布式节点,已满足3者特性,由于P必须满足,现a、b节点间网络连接中断或抖动。
- 假设ab有一个变量v=0;
- C客户端,把v改为1写入a,由于可用性,a必须成功响应(但此时a没有成功通知b更新v,b仍然是0)。
- c从b节点读取变量v,由于可用性,b必须成功响应,但响应的是原来的0,而不是最新的1。
- 可见,c 修改了变量,但会读取到原来的数据,没有满足一致性,3个特性在特殊情况下无法同时满足。
应用
cp: 保证一致性,舍弃可用性:Zookeeper / Redis / MongoDB / HBase
还可以舍弃强一致性,但保证最终一致性,如一些高并发场景,秒杀,618,春运抢票。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫