一、前言
分布式架构下,某个操作必然会经过数个服务,自然会经过多个数据库,需要多个数据库同时成功或同时失败。而想要达到数据的一致性,必须对数据库进行协调。
二、CAP理论是什么
CAP理论,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),不能同时成立。
1.一致性(Consistency)
指写操作后的读操作可以读取到更新后的值,数据分布在多个节点时,我们在主服务器写,在从服务器上读,而在任意节点上读取到的数据应该是最新的。
而上述行为中,当我们在写如数据后,此时写入的服务器正在和其他从服务器同步数据,此时再去读取此数据,可能就会造成读取到的时还没有更新的数据。那么这时我们应该给锁定正在同步的数据库,同步完成后再进行操作,保证数据的一致性。
2.可用性(Availability)
指任何事务操作都可以得到响应的结果并且不会出现响应超时或者响应错误的情况发生。
同样从主服务器写入数据,再进行读取操作时,我们应该立即能够响应到数据库查询的结果,不允许响应超时或者响应错误。所以不能通过上述保证一致性一样将从数据进行加锁。那么查询数据时,即使有新的数据还没有同步过来,我们也需要立刻将旧数据返回,或者返回一个默认值。
3.分区容忍性(Tolerance)
指如果出现了分区问题,我们的分布式存储系统还需要继续运行。不能因为出现了分区问题,整个分布式节点全部就熄火了,罢工了,不做事情了。
分布式的存储系统会有很多的节点,这些节点都是通过网络进行通信。而网络是不可靠的,当节点和节点之间的通信出现了问题,此时,就称当前的分布式存储系统出现了分区。但是,值得一提的是,分区并不一定是由网络故障引起的,也可能是因为机器故障。
比如,我们的分布式存储系统有 A、B 两个节点。那么,当 A、B 之间由于可能路由器、交换机等底层网络设备出现了故障,A 和 B 通信出现了问题,但是 A、B 依然都在运行,都在对外提供服务。这时候,就说 A 和 B 发生了分区。
还有一种情况也会发生分区,当 A 出现了宕机,A 和 B 节点之间通信也是出现了问题,那么我们也称 A 和 B 发生了分区。
综上,我们可以知道,只要在分布式系统中,节点通信出现了问题,那么就出现了分区。
三、CAP的权重
1.AP
追求分区容忍性和可用性
比如在更新某些数据后,用户不需要查询到最新的数据,能够接收一定时间的延时。
2.CP
追求一致性和分区容错性
比如跨行转账,一次转账需要等待双方银行都完成整个事务才能算完成
3.CA
追求一致性和可用性
此时可以不做一个标准的分布式系统,一个数据库写,同一个数据库进行读即可。
4.误解
虽然说CAP不能全部满足,但也不是说需要完全抛弃某一个,而是在其中的一个相对做一些取舍。