分布式系统CAP理论
C是一致性,A是可用性,P是分区容错。
前两个没什么好说的,主要是P我不太清楚。然后我看文章中最后的证明,有点明白了。
分区是指两个服务器之间发送信息失败。而分区容错就是系统允许发生这种两个服务器之间无法传输数据的情况。
也就是说C和A如果算是正面的、好的性质,那么P就是负面的、坏的性质。
那为什么允许这种负面的情况发生?我的理解是如果只有一个服务器,那肯定不会发生两个服务器无法传输数据的情况,因为本来就只有一台服务器,但现在讨论的是分布式系统,不止一台服务器,那么就很可能出现这种情况,比如停电啊、失火啊、误操作啊、地震把电缆震断了啊,等等等等。
所以我认为不是系统允许发生这种情况,而是目前根本不存在一个分布式系统能保证分区不发生。因此一般认为P总是成立的,总会有两个服务器之间无法传输数据。
证明:
假设,如果有一个分布式系统同时满足CAP这三个条件,也就是说
1.一个服务器的数据改了之后,再次访问其它服务器,会得到修改之后的结果或者其他人对该数据修改后的结果,而不是原来的值。
2.对任意一个服务器的访问的时候,如果服务器没崩溃(不是分布式的锅),那么服务器必须给出结果。
3.这个系统设计的时候就允许分区的情况发生(你也没法不允许),即可能会出现两个服务器之间无法传输数据。
那么对于这个系统,先模拟一下分区的情况发生,两台服务器无法传输数据。这是一个人把一台服务器(X)的一个数据a改成b,然后向另一台服务器(Y)询问这个数据结果是什么。由于分区发生了,两个服务器之间无法传输数据,所以接下来有两种情况:
1.因为满足可用性,Y返回a,但用户本该收到b,这就违背了一致性;
2.因为满足一致性,所以Y在数据同步前,不会返回数据给用户,这就违背了可用性。
假设矛盾,所以无法同时满足CAP三个指标。