分布式CAP

CAP原则:指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。

 

分布在不同的服务器中的数据保持一致;当被调用,需要提供数据则保持可用;网络通信发送故障时,集群的各分区仍然可用,不影响整个系统。分布式最大的价值是保证整个系统的稳定(容错性),所以,大部分的都是保证P的情况下,在A和C直接做取舍。保证CP不要求A, 最典型的是分布式数据库,如Redis、HBase、等。因为他们的数据一致性是基本要求。保证AP不要求C,放弃一致性,典型的应用是抢购场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。

 

另外,一些传统行业,如银行,在保证数据一致性不是做一丝让步,C必须保证,若是网络故障,宁可停止服务,在A和P之间取舍。

 

拓展:Spring Cloud中的Eureka和Zookeeper的区别https://blog.youkuaiyun.com/eson_15/article/details/85561179

CAP理论是分布式系统设计中的一个核心概念,由加州大学的计算机科学家Eric Brewer于1998年提出,在2000年由Eric Brewer教授再次提出,并在2002年由Seth Gilbert和Nancy Lynch正式证明[^2][^4]。 在分布式系统中,CAP是一组描述网络分区(Partition)时系统能提供保证的原则CAP代表Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区容错性)。该理论指出,在分布式系统中,这三个属性不可能同时达到最优,一个分布式系统最多只能同时满足一致性、可用性、分区容错性这三项中的两项,它是分布式系统中最基础最重要的理论[^1][^3][^4]。 ### 性质 - **Consistency(数据一致性)**:指在分布式系统中的所有数据备份,在同一时刻是否同样的值,即数据的更新操作是否能及时同步到各个节点。 - **Availability(可用性)**:指系统在面对各种异常时,仍能保证7×24小时的正常响应,对于用户的每一个操作请求总是能够在有限的时间内返回结果。 - **Partition Tolerance(分区容错性)**:指在分布式系统中,由于网络故障等原因导致部分节点之间无法通信(即产生分区)时,系统仍能继续提供服务。 ### 示例代码 下面是一个简单的Python示例,模拟了一个简单的分布式系统中CAP理论的体现: ```python # 模拟分布式系统中的节点 class Node: def __init__(self, name): self.name = name self.data = {} def write(self, key, value): self.data[key] = value def read(self, key): return self.data.get(key) # 模拟网络分区 class NetworkPartition: def __init__(self): self.partitions = [] def add_partition(self, nodes): self.partitions.append(nodes) def is_connected(self, node1, node2): for partition in self.partitions: if node1 in partition and node2 in partition: return True return False # 创建节点 node1 = Node("Node1") node2 = Node("Node2") # 创建网络分区 partition = NetworkPartition() partition.add_partition([node1]) partition.add_partition([node2]) # 写入数据 node1.write("key1", "value1") # 模拟读取数据 if partition.is_connected(node1, node2): # 如果节点连接,尝试同步数据,保证一致性 node2.write("key1", node1.read("key1")) print(f"Node2读取到的数据: {node2.read('key1')}") else: # 如果节点断开连接,保证可用性,返回本地数据 print(f"Node2读取到的数据: {node2.read('key1')}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值