CAP理论

CAP理论

请添加图片描述
CAP理论为:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

一致性(Consistency)

一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1。接下来,用户的读操作(从G1或G2读)就会得到 v1。这就叫一致性。

原理:在 G1 写操作时,锁定 G2 的读操作和写操作。只有G1完成写操作并且把修改数据同步到G2之后,G2服务器才能重新开放读写操作
请添加图片描述

可用性(Availability)

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。

意思是只要收到用户的请求,服务器就必须给出回应。

用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。

分区容错性(Partition tolerance)

分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

如下图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。所以在cap原则里面,分区容错性是必须要有的

请添加图片描述

C和A的矛盾

如果保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读操作和写操作。只有G1和G2把修改后的数据同步后,才能让G2服务开放读写操作。但是在G2服务器锁定期间,G2 服务器是不能进行读写操作的,所以此时可用性是不可能实现的。

然后如果保证 G2 的可用性,那么势必不能锁定 G2的读写操作,所以刺死一致性不成立。

综上所述,G2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。

### CAP理论的核心概念 CAP理论指出,在分布式系统设计中,无法同时满足 **一致性(Consistency)**、**可用性(Availability)** 和 **分区容错性(Partition Tolerance)** 这三个特性[^1]。这意味着任何分布式系统都必须在这三项之间做出取舍。 #### 一致性和其重要性 在分布式环境中,**一致性**意味着所有的节点在同一时间拥有相同的数据副本。当客户端向任意节点请求数据时,都能获得最新的更新版本。然而,为了实现完全的一致性,可能需要牺牲系统的响应速度或者增加额外的同步开销[^4]。 #### 可用性的定义与挑战 **可用性**是指无论何时何地,只要有一个正常的请求到达系统中的某个健康节点上,那么该节点就应该返回有效结果给用户而不是错误信息或超时等待状态。高可用通常依赖冗余机制来保障服务连续运行即使部分组件失效也能继续工作。 #### 分区容忍度的意义及影响 最后一点也是最基础的要求——即所谓的“P”,代表的是对于网络分割情况下的适应能力或者说抗断连性能(Partition Tolerance)。由于现代互联网架构不可避免存在跨地域部署以及物理链路不稳定等问题,所以几乎所有的实际应用都需要考虑并接受一定程度上的PT约束条件[^2]。 实际上,“strong partition tolerance”被描述成一种非常严格的标准;而回顾CAP定理的发展历程可以发现关于这一术语的确切含义曾经有过不同的解释方向。 综上所述,在构建具体的解决方案之前,工程师们往往先明确业务需求优先级从而决定偏向哪种组合形式:CA(no P), CP(low A) 或 AP(flexible C)。 ```python class DistributedSystem: def __init__(self, consistency=True, availability=True, partition_tolerance=False): self.consistency = consistency self.availability = availability self.partition_tolerance = partition_tolerance def choose_tradeoff(self): if not self.partition_tolerance and all([self.consistency,self.availability]): return 'CA system' elif self.partition_tolerance and not self.availability: return 'CP system' elif self.partition_tolerance and not self.consistency: return 'AP system' ds_example = DistributedSystem(partition_tolerance=True) print(ds_example.choose_tradeoff()) ``` 上述代码片段展示了如何基于不同场景选择合适的CAP模型实例化对象,并判断属于哪一类权衡策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值