架构师训练营 W6 心得

用户头像
telliex
关注
发布于: 2020 年 07 月 15 日

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)

系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。



用户头像

telliex

关注

还未添加个人签名 2018.03.26 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 W6 心得