分布式系统理论和CAP
在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency):同一个数据在集群中的所有节点,同一时刻是否都是同样的值。
- 可用性(Availability):集群中一部分节点故障后,集群整体是否还能处理客户端的更新请求。
- 分区容忍性(Partition tolerance):是否允许数据的分区,分区的意思是指是否允许集群中的节点之间无法通信。
为什么CAP不能同时满足
针对AC来说,假设存在两台mysql服务器A和B,A是主服务器,B是从服务器,为了保证AB数据一致性,用户在往A存储数据时候,A同时会发送给B发送一份数据进行存储。如果AB之间通信中断(P分区容忍性存在),那么用户发送发A服务器数据之后A就不能给B发送数据,即AB数据不一致(C一致性不满足)。
- 如果想要保证数据一致性满足(C),那么此时服务器A只能拒绝对外提供服务器。此后服务器A和服务器B的数据就一致了(分区容忍性满足下,可用性和一致性不能同时满足)
- 如果要满足可用性(A),那么服务器A此时可以将数据保存在本地,等待AB通信正常之后把数据发送给B,但是有一段时间服务器A和服务器B的数据不满足一致性。(分区容忍性满足下,可用性和一致性不能同时满足)
- 结论 :分区容忍性满足下,可用性和一致性不能同时满足
为什么分区容忍性必须满足
分区容忍性实际是说允许两台服务器一定时间可以不进行数据交换(允许服务器之间通信不正常),因为服务器之间会产生各种问题,网络延迟,对方机器down机,所以这种情况是不能避免的。
如何选择一致性和可用性
最好在满足可用性的前提下,服务器A可以将数据保存在本地,等待AB通信正常之后把数据发送给B,但是有一段时间服务器A和服务器B的数据不满足一致性。但是程序可以正常执行