C consitency一致性
A available 可用性
P partion tolerence 分区容忍性
说的那么学术化,搞得人晕头转向的!!!
我来通俗的说一下吧,分布式中假如有一个客户端client,两台服务器service1 ,service2 。
分区容忍性就是service1,和service2之间由于网络的原因,数据传输会发生延时,这是肯定的,谁叫这是靠网络传输呢。即使是理想化的网络,都会发生数据传输延时,更不用说是实际的网络环境呢,你要容忍网络传输慢!!也就是你要承认分布式的这个缺点!!哎,谁叫这是高大上的分布式呢??如果是单体应用就不会有这个东西了,因为都在一台机器上,根本就没有网络传输
可用性:说的再具体一点,叫做高可用性,强调的是速度,再说一遍,强调速度!!!比如client给service1发了一条数据A,然后立刻向service2要数据,这时,service2要立刻马上迅速的给我返回数据,数据是否正确不打紧,反正我强调的是速度,是立刻马上迅速返回数据给我!!!速度!!!速度!!速度!!速度!!
一致性:一致性强调的是准确,强调的是同一份数据!!!同一份数据!!!同一份数据!!!比如client向service1发送了一条数据A,然后client向service2要数据(注意:这里不用马上向service2要数据,可以歇下来喝杯茶,然后再向service2要数据,反正只要最终拿到的是数据A就行了),这时service2返回的数据必须是数据A,不能是其他的,强调的是同一份数据,如果不是同一份数据,就违反了一致性!!!同一份!!!同一份!!!同一份!!!
因此你说CAP能三者合一吗?肯定不能呀,就是因为P的存在(如果没有P,AC自然而然就存在了,不过这样就变成单体应用了,不是分布式了),导致可以容忍网络延时,所以如果要一致性,client向service2要的是同一份数据(client发给service1的数据A),就必须要阻塞!!这时client就没法向service2立即索要数据了,必须得等会儿,等数据传到service2再去要,这样就没有高可用性了
其他两种情况现在应该很好理解了吧,就不写了,哈哈