架构师训练营 W6 心得
CAP - 关注的粒度是数据,而不是整个系统
什么是 CAP 原理
CAP,在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)
三者中的两个,另外一个必须被牺牲。
一致性(Consistence)
client 读操作能够获取最新的写结果,因为事务在执行过程中,client 是无法读取到未提交的数据的,只有等到事务提交后,client 才能读取到事务写入的数据,而如果事务失败则会进行回滚,client 也不会读取到事务中间写入的数据。确保数据是一致的。
可用性(Availability)
请求结果不能超时、不能出错,且结果是合理的。
分区容忍性(Partition Tolerance)
网络发生了分区现象,可能是丢包,也可能是连接中断,还可能是拥塞,不管什么原因,系统要能继续依职责运作
选择
分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。
以 N1->Y (同步)==> N2->X,C 访问 N2 为例
CP - Consistency/Partition Tolerance
N1 节点上的数据已经更新到 Y,N1 和 N2 之间的复制通道中断,数据 Y 无法同步到 N2,N2 节点上的数据还是 X。这时客户端 C 访问 N2 时,N2 需要返回 Error,提示客户端 C ,系统现在发生了错误
AP - Availability/Partition Tolerance
当发生分区现象后,N1 节点上的数据已经更新到 Y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 X。所以 C 读到的不是最新写入的 Y。虽不是正确的值,但却是合理的值(不是错误,只是非最新值)
应用思路
完美的 CP 场景是不存在的,即使是几毫秒的数据复制延迟,在这几毫秒时间间隔内,系统是不符合 CP 要求的。
关注的粒度是数据,而不是整个系统。每个系统不可能只处理一种数据,而是包含多种类型的数据,有的数据必须选择 CP,有的数据必须选择 AP。并非数据都是同一策略。
CAP 理论告诉我们分布式系统只能选择 CP 或者 AP,其实前提是系统发生了“分区”现象。如果没有发生分区现象(节点间的网络连接一切正常),便没有必要放弃 C 或者 A,应该 C 和 A 都可以保证,这就要求架构设计的时候既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA。
CAP 理论只是说在分区过程中我们无法保证 C 或者 A,但并不意味着什么都不做。因为在系统整个运行周期中,大部分时间都是正常的,发生分区现象的时间并不长。可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到 CA 的状态。
ACID - 保证数据库事务的正确性
Atomicity(原子性)
一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性)
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
Isolation(隔离性)
数据库允许多个并发事务同时对数据进行读写和修改的能力。
读未提交(Read uncommitted)
读提交(read committed)
可重复读(repeatable read)
串行化(Serializable)
Durability(持久性)
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
BASE -核心思想是即使无法做到强一致性,但应用可以采用适合的方式达到最终一致性。
BASE 理论本质上是对 CAP 中 AP 方案的一个补充。
基本可用(Basically Available)
分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。如登入与注册
软状态(Soft State)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里的中间状态就是 CAP 理论中的数据不一致。
最终一致性(Eventual Consistency)
系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
评论