在单机中,数据库很容易满足ACID特性的事务,但是在分布式数据库中,ACID的分布式就很难满足了。所以CAP、BASE这样的分布式理论,就诞生了。
CAP理论:一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance),最多只能满足其中的两个。
- 一致性:在分布式环境中,是指数据在多个副本能否保持一致的特性!
- 可用性:系统提供的服务必须一直处于可用的状态,用户的请求都能在指定的时间内得到服务端的结果。
- 分区容错性:分布式环境中,某个节点或网络出现分区时,都不影响对外提供一致性和可用性的服务。
我们看看两个Mysql数据库同步的例子:
C保证了两个MySQL数据库数据的一致性,当master数据有更新,slave数据也必须更新。
A保证了master数据库和slave数据库都是可用的。
P保证了master数据库和slave数据库出现网络分区时,对外都是可用的。
由于是分布式系统,我们的节点都是在不同的网络中,肯定会出现网络分区,所以P是我们必须要满足的。如果不想满足,那又回到单机了。
现在的场景是这样的,master和slave出现了网络分区,导致数据同步不了,这样两边的数据就不一样了,破坏了一致性C。如果我们想要保证C,那只能停到master,不让写数据,这个时候,又破坏了可用性A。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。