1 ACID

传统的单机关系型数据库遵循了ACID原则, 它由如下几个单词的首字母构成

  1. Atomicity (原子性)
  2. Consistency (一致性)
  3. Isolation (隔离性)
  4. Durable (持久性 )

1.1 Atomicity

事物中的所有动作要么全部成功,要么全部失败。因为只有这样,数据才能在逻辑上保持一致。

比如,当账户流水中记录了一笔流水,那么相应的账户余额也应产生变化。如果没有,那么数据就产生的逻辑上的不一致。

1.2 Consistency

相互逻辑关联的数据在逻辑上的一致性。

1.3 Isolation

不同事物之间,各自事物内部对数据的变更,应该不影响其他事物。

1.4 Durable

数据最终应该进行持久化

2 CAP

cap主要用于分布式系统,由如下几个单词的首字母构成:

  1. Consistency (一致性)
  2. Availability (可用性)
  3. Partition tolerance (分区容错性)

提到分布式系统,那么首先想到的是其由 多个节点构成 。这些节点通过使用自己的数据相互进行沟通从而对外统一提供服务。

2.1 Partition tolerance

假设我们有一个数据库为分布式系统中的其他节点提供数据服务,现在它由于某些原因无法为其他节点服务,那么此时整个网络被切分成了两个区域,这里的区域就是分区。 分区产生时,如果整个系统无法再正常对外提供服务,那么就说这个系统不存在分区容错。因此为了能够分区容错,我们需要添加一个数据库镜像(如mysql中的主从)。 而镜像越多,分区容错能力就越强。

可以看到,这里的分区容错性指的就是平时我们所说的高可用性。

2.2 Availability

随着镜像添加的越多,也就是分区容错的加强,系统的响应速度必然会受到影响,这个性能就是可用性。

2.3 Consistency

这里的一致性,指的是当有一个或多个镜像时,为了保持它们之间的数据一致,需要时间对它们的数据进行同步,因此会出现一个数据不一致的时间窗口。

2.4 三者关系

cap三角形

cap(镜像个数,性能,不同步时间窗口长短)只能同时满足两个, 如:

当P(镜像个数)保持不变时,如果想要减少C(不同步时间窗口),那么只能是采取在数据被修改后,直到全部节点都完成同步,才能再次提供服务,显然这样A(性能)会降低。

其他同理

2.5 总结

可以看到,P应该是任何一个分布式系统必须要满足的特征,因此一般对C和A进行取舍。

当消息被切断时,“一致的”(CP)系统会拒绝某些节点的请求,以保持线性一致性。“可用的”(AP)系统虽然能够处理所有节点上的请求,但必须牺牲线性一致性,因为不同的节点对于操作的顺序可能会产生不同意见。当网络情况良好时,系统可以保证一致性与可用性,但由于真实的网络中总会产生分区,因此不存在能够完全做到“一致且可用”(CA)的系统