架构师训练营第六周作业
CAP 原理:
C:Consistency,一致性;数据在多个副本之间是否能够保持一致的特性。
A:Availability,可用性;每次请求都应该得到一个响应,而不是返回一个错误或者失去响应。
P:Partition tolerance,分区容错性;分布式系统在遇到网络分区故障时,仍然需要保证对外提供一致性和可用性的服务,除非整个网络都发生故障。
在分布式系统中这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数 Web 应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
以老师课上举的例子,当节点 A 与节点 B 发生网络通讯故障无法同步数据时,客户端 1 向节点 A 写入数据 id 为 55 的商品价格 99 元,同时,客户端 3 向节点 B 写入的数据 id 为 55 的商品价格 75 元;客户端 2 读取节点 A 中的数据,与客户端 4 读取的节点 B 中的数据,就存在不一致性。这是就是满足了可用性 A,而无法满足一致性 C;相反,当一定要保持数据一致,就无法保证系统可用(满足了 C 一致性,舍弃了 A 可用性)
评论