本文共 1670 字,大约阅读时间需要 5 分钟。
在一个分布式系统中,
三者不可兼得,最多只能同时满足两点,没法三者兼顾。
分布式系统中的数据应该保持一致。
比如用户更改信息,主库执行更改,自动同步到从库,用户再次查询信息时,在从库查到的信息要是修改后的信息,这时数据库主从节点的数据是一致的。
比如A、B各自都有10万元,A转账给B 1万元,要么操作成功A为9万元、B为11万元,要么操作失败A、B都还是10万元,操作前后的数据得对得上。
一致性分类
分布式系统难以保证数据的强一致性,一般都是保证最终一致性。
系统负载过大时,是否还能处理、响应请求,eg. 原来qps(每秒访问量)是1000,现在飙到10000,系统依然扛得住、可用。
可用指的是在正常时间范围内处理完每个请求,不管是让请求快速失败、还是服务降级,都算可用。
一个节点崩溃、故障,其它节点不受影响。
常见的做法是增加机器数量,做集群,少数节点挂掉,集群整体依然可用。
集群节点越多,分区容错性越强,但完成节点间数据同步所需的时间也越长,节点IO压力大,数据一致性越得不到保证(越差)。
1、满足AC,不满足p
满足A=>在指定时间内处理完请求,满足C=>完成节点间的数据同步
要在指定时间内处理完请求、并完成数据同步,那集群节点就得少,节点多了同步要花大量时间、时间不够,集群节点少所以不满足P。
2、满足CP,不满足A
满足C=>保证数据同步的时间开销,满足P=>集群节点多
节点又多、还要等这些节点都完成数据同步,那就不能保证在正常时间范围内处理完请求,所以不满足A。
3、满足AP,不满足C
满足A=>指定时间内处理完请求,满足P=>集群节点多
节点又多、还要在指定时间范围内处理完请求,那集群节点之间的数据同步就得不到保证,所以不满足C。
一台机器肯定是不行的,一旦该机器发生什么故障,系统就瘫痪了,都要做集群保证分区容错性(P,高可用),所以都是在A、C之间取舍。
选择注册中心时,看项目业务对数据一致性、服务可用性哪个需求更高
BASE理论:实现强一致性往往会严重降低系统性能,导致可用性降低,系统可以根据业务特点,采取适当的方式实现最终一致性。
BASE理论是一致性和可用性的权衡结果,主要涉及三点
转载地址:http://ewhlb.baihongyu.com/