写点什么

week06 作业

用户头像
追风
关注
发布于: 2020 年 11 月 01 日

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 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。





用户头像

追风

关注

还未添加个人签名 2018.01.08 加入

还未添加个人简介

评论

发布
暂无评论
week06作业