跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
CAP理论
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= CAP理论 = '''CAP理论'''是分布式系统设计中的核心理论之一,由计算机科学家Eric Brewer在2000年提出。它阐述了在分布式系统中,'''一致性(Consistency)'''、'''可用性(Availability)'''和'''分区容错性(Partition Tolerance)'''三者不可兼得,最多只能同时满足其中两项。这一理论为NoSQL数据库的设计和选型提供了重要指导。 == 基本概念 == CAP理论中的三个核心属性定义如下: * '''一致性(Consistency)''':所有节点在同一时间看到的数据完全相同。即每次读取都能获得最新的写入数据或错误。 * '''可用性(Availability)''':每个请求都能得到响应(不保证是最新数据),系统始终可用。 * '''分区容错性(Partition Tolerance)''':系统在网络分区(节点间通信中断)时仍能继续运行。 根据CAP理论,分布式系统只能满足其中两项: * '''CA系统''':保证一致性和可用性,但无法容忍网络分区(如传统关系型数据库)。 * '''AP系统''':保证可用性和分区容错性,但可能返回旧数据(如Cassandra、DynamoDB)。 * '''CP系统''':保证一致性和分区容错性,但在网络分区时可能不可用(如MongoDB、HBase)。 == 数学表达 == CAP理论可以用数学方式描述为: <math> \text{Consistency} \land \text{Availability} \land \text{Partition Tolerance} \equiv \text{False} </math> == 权衡示例 == 以下是一个简单的键值存储示例,展示不同选择下的行为差异: === CP系统示例 === <syntaxhighlight lang="python"> # 模拟CP系统(如MongoDB) class CP_Database: def __init__(self): self.data = {} self.locked = False def write(self, key, value): if not self.locked: self.data[key] = value return True return False # 网络分区时拒绝写入 def read(self, key): if not self.locked: return self.data.get(key) return None # 网络分区时不可用 </syntaxhighlight> === AP系统示例 === <syntaxhighlight lang="python"> # 模拟AP系统(如Cassandra) class AP_Database: def __init__(self): self.data = {} self.partition = False def write(self, key, value): self.data[key] = value return True # 总是接受写入 def read(self, key): if self.partition: return "stale_data" # 网络分区时可能返回旧数据 return self.data.get(key) </syntaxhighlight> == 实际案例 == '''案例1:电商库存系统''' * '''CP选择''':确保库存一致性,但在网络问题期间可能拒绝订单 * '''AP选择''':允许超卖,但保证服务始终可用 '''案例2:社交媒体''' * Twitter选择'''AP''':允许不同用户短暂看到不同内容,但服务不中断 * 银行系统选择'''CP''':必须保证账户余额一致,允许短暂服务不可用 == 可视化说明 == <mermaid> graph TD A[CAP理论] --> B[一致性 C] A --> C[可用性 A] A --> D[分区容错 P] B --> E[CA系统] C --> E C --> F[AP系统] D --> F B --> G[CP系统] D --> G </mermaid> == 常见误解 == * '''误解1''':必须在所有时间三选二。实际上只在网络分区时需要权衡。 * '''误解2''':可以完全放弃P。现实中网络分区不可避免,P是必须项。 * '''误解3''':CAP是绝对的。实际系统常在不同场景下动态调整策略。 == 现代发展 == 后来的研究对CAP理论进行了细化: * '''PACELC理论''':扩展CAP,考虑无分区时的延迟与一致性权衡 * '''BASE'''(Basically Available, Soft state, Eventually consistent):AP系统的常见实现哲学 == 总结 == 理解CAP理论有助于: 1. 根据业务需求选择合适的数据库 2. 设计系统时明确优先级 3. 故障发生时预测系统行为 大多数现代NoSQL数据库会在文档中明确其CAP倾向,开发者应根据业务场景的容忍度(如能否接受短暂不一致)做出选择。 [[Category:计算机科学]] [[Category:面试技巧]] [[Category:NoSQL数据库]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)