分布式的网络环境很复杂,容易出现的很多网络问题,各节点的状态如何同步很关键。
CAP 定理是这方面的基本定理,也是理解分布式系统的起点。
C:一致性 :
分布式系统中所有节点的数据备份同一时间都一致
A:可用性:
一部分节点出现故障后,非故障节点依然可用,集群依然能够预期时间内响应
P:分区容错性:
在节点之间不能通信时,系统可以继续正常服务。
分布式环境下,避免不了节点之间网络波动等原因导致服务调用失败,不能因为这个原因导致系统整体不可用。因此必须要满足 P(分区容错性)
那还能不能同时满足 C(一致性) 和 A(可用性)呢?
保证分区容错性的前提下,C和A就是矛盾的。C 要花费时间做到数据一致性,A要预期短时间内快速得到响应,因此在时间上无法同时满足的。
牺牲可用性:客户等待网络恢复后获得响应
牺牲一致性:返回给用户没有更新的数据
分布式部署的项目往往要保证 A(可用性),牺牲C(一致性),即满足AP。
基于Base理论,并不是不需要数据一致,而是要保证数据的最终一致性即可。