一、一致性
基于集群角度来考虑,如果集群中同步慢,会有多种情况
1、强一致性:集群中的两个节点数据必须一致
例如:从A节点新增一条数据后,我从B节点必须能够读到此数据,才算满足强一致性。通常使用分布式锁达到强一致性。代表算法为:paxos算法
2、弱一致性:集群中的两个节点数据可以不一致
相当于不需要一致性。
3、最终一致性:
通常遇到的都是最终一致性。
例如:从A节点新增一条数据后,我从B节点暂时没有读取到,稍后我读取到了,这就算满足了最终一致性。
包括mysql中的主从同步。
二、CAP理论
在设计和部署分布式系统时,存在三个明显的需求:
- C(Consistency)一致性。即分布式数据应该同步,保存一致。
- A(Availability)可用性。指系统能够很好的为用户提供服务,主要体现在用户访问之后能很
- 快的得到响应。
- P(Oartition Tolerance)分区容错性。若在系统运行过程中,有部分主机宕机,依然不会影响整个系统的运行。
CAP理论认为在一个系统中对某个数据不存在一个算法同时满足一致性,可用性,分区容错性。往往需要牺牲某一项来满足其他两项。
- 满足CA的例子:MySQL
- 满足CP的例子:Zookeeper(先同步数据,成功后再返回客户端响应)
- 满足AP的例子:Eureka、redis(先返回客户端响应,再同步数据)
由于CAP定理限制了我们三者无法同时满足,这种情况,我们会选择尽量靠近CAP定理,即尽量让C、A、P都满足,在此大势所趋下,出现了BASE定理。
三、BASE理论
- Basically, Available(基本可用),支持分区失败。也就是说,在一定程度上牺牲了可扩展性。例如:响应时间变慢,限流,降级等
- Soft State(软状态),状态可以有一段时间不同步,异步同步。(允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性)
- Eventually Consistent(最终一致)。保证数据在最终是一致的,而无需保证实时数据一致。通常用mq来实现
BASE理论的核心思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的放松来使系统达到最终一致性