在分布式系统中不可能同时满足CAP要求,因为为了保证可用性(A),让发生故障时整个系统仍然能正常工作,我们就必须要对集群分区(P),而一旦分区就可能出现网络丢包的情况,就不能满足强一致性(C)。
所以在设计分布式集群的时候我们只能尽量保证AP或者CP,不能保证CAP。
因为分布式,就必须要保证P,A和C只能偏向性选择一个。该怎么选应该根据实际情况而定,如果强调数据的一致性必须保证就选择CP(一般在银行金融方面选择这类设计),如果强调功能必须保证就选择AP(比如淘宝、微博这种,对用户来说功能必须满足,一些(点击、浏览次数)统计数据就不必强调一致性)。
BASE是经过大量分布式集群设计的实践和资料,根据CAP原则所总结出的结论,一种取舍方案。
BASE是指Basically Available(基本可用),Soft State(软状态),Eventually Consistent(最终一致性)
基本可用:就是在一部分节点发生故障时,仍然保证系统基本功能可用。
在发生故障时虽然基本可用,但是可能会导致响应时间增加,部分功能不可用。
软状态:在访问量过大时,允许数据在同步时发生延迟,但是必须保证不会影响功能使用。
最终一致性:在大量访问过后,一段时间内,所有数据会最终同步保证数据一致性。而不用实时保证数据一致性。