什么是 CAP 理论
CAP 原则指的是一个分布式系统中,Consistency(一致性),Avaliablity(可用性),Partition tolerance(分区容错性),三者不可兼得。
- 一致性:在分布式环境下,一致性是指数据在多个副本之间能否保持一致的特性。
- 可用性:可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
- 分区容错性:分区容错性约束了一个分布式系统具有如下特性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。
为什么三者不能同时满足
假设现在有两台服务器,一台跑 A 服务和数据库 V1,一台跑服务 B 和数据库 V2,V1 和 V2 是同步的。在满足分区容错性下,A 或 B 一台宕机都不会影响到其他服务的执行。但当 V1 和 V2 的通信断开时,数据库就不能同步。
- 牺牲一致性:A 用 v1 的数据库,B 用 v2 的数据库,两者都没有同步
- 牺牲可用性:禁止 A 和 B 正常服务,直到两种能同步才开启服务。
- 牺牲分区容错性:如果不用分区容错性,则整个系统可以不用分布式来搭建,能保证强一致性和可用性,但如果机器挂了,整个服务也崩了。
什么是 BASE 理论
BASE 就是 Basically Available(基本可用),Soft state(软状态),Eventually consistent(最终一致性),是对 CAP 中一致性和可用性权衡的结果。
- 基本可用:指分布式在出现不可预知故障的时候,允许损失部分可用性。
- 响应时间上的损失:一个在线搜索引擎需要 0.5s 内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发送端点或断网故障)查询结果的响应时间增加到了 1~2s
- 功能上的损失:在购物高峰时,为了保证购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
- 软状态:指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性。 最终一致性:系统中的所有数据副本,在经过一段时间的同步后,最终能够到达一个一致的状态。