CAP理论——分布式基础理论

要说明CAP理论,首先要了解C/A/P三个到底是什么意思,C代表Consistency,按照wiki的解释是(Every read receives the most recent write or an error),简单的说就是数据一致性。A代表Availability(Every request receives a (non-error) response – without guarantee that it contains the most recent write),用中文描述就是可用性(不报错,不保证数据一致性)。P代表的是Partition tolerance(The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes),是指两个结点间的任意数据包会丢失或者延迟,系统仍继续运行。

CAP理论说明的是C/A/P三者是不可能同时满足的。当需要P的时候,必须要做出选择,是C还是A。没有P的时候,C和A的共存是没有任何问题的。虽然这个理论现在已经大众耳熟能祥了,但是还是有很多人存在误解。这也是我写这个博客想澄清的。

枯燥的文字远没有图表直观,附张图大家看得更清楚:

CAP理论——分布式基础理论
cap_theory.png

这里有一个简单的视频说明:
https://www.youtube.com/watch?v=Jw1iFr4v58M

最后再补充说明一下,为什么分区了就必须选择是可用还是选择数据一致性。先说明一下不分区的时候,为什么一致性和可用性不冲突。首先不分区就可以把数据放在一个地方,甚至是单个数据库(这里选择数据库是因为数据库比起redis这类nosql来说,更强调一致性)。这样数据一致性天然就得到了保证,剩下的只是保证可用性。

而分区以后,多个结点间需要网络通信,一定有延迟或者是网络错误的情况。对一致性来说,它一定要等待这个延时,还有这个错误恢复(根本上还是延迟)。在等待的这段时间里,数据肯定是不一致的。此时对这些数据的访问就应该不可用,如果是可用的,那就会读到比较老的数据。这就是CAP理论。