week06 作业
1、请简述 CAP 原理。
一致性Consistency:
每次读取的数据都应该是最近写入的数据或者返回错误,而不是过期的数据。
可用性Availability:
每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最新的,意思就是系统需要一直可用正常使用,不会引起调用者异常,不保证响应的数据是最新的。
分区耐受性Partition tolerance:
因网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然可操作。这里应该指系统还能正常提供服务
CAP应用
虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。实际情况,大部分时间系统网络还是稳定可靠,还是需要考虑网路正常下实现CA。
CP
如下图所示,为了保证一致性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 需要返回 Error,提示客户端 C“系统现在发生了错误”,这种处理方式违背了可用性(Availability)的要求,因此 CAP 三者只能满足 CP。
AP
如下图所示,为了保证可用性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 将当前自己拥有的数据 x 返回给客户端 C 了,而实际上当前最新的数据已经是 y 了,这就不满足一致性(Consistency)的要求了,因此 CAP 三者只能满足 AP。注意:这里 N2 节点返回 x,虽然不是一个“正确”的结果,但是一个“合理”的结果,因为 x 是旧的数据,并不是一个错乱的值,只是不是最新的数据而已。
CAP关键细节
CAP关注的数据,而不是整个系统。
一个系统中存在多套数据,可以保证其中部分数据满足CP或者AP,而不是从整个系统角度保证所有数据满足CAP。
CAP 是忽略网络延迟的。
实际情况下,从节点 A 复制数据到节点 B,总是需要花费一定时间的。理论中的 C 在实践中是不可能完美实现的,在数据复制的过程中,节点 A 和节点 B 的数据并不一致。可以考虑数据分片。
正常运行情况下,不存在 CP 和 AP 的选择,可以同时满足 CA。
既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA。
放弃并不等于什么都不做,需要为分区恢复后做准备。
分区发生后,可以写入日志,待分区恢复后,通过日志恢复,重新保证数据一致性。
2.针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。
评论