写点什么

架构师训练营第六周作业

发布于: 2020 年 07 月 15 日

作业一:

下面两题,至少选做一题

  • 请简述 CAP 原理。

  • 针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。

CAP原理:



C(Consistency):

一致性-每次读取的数据都应该是最近写入的数据或者返回一个错误.而不是过期数据,也就是说,数据是一致的

A (Availability)

可用性-每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的,也就是说系统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。

  • P (Partition tolerance)

分区容错性即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的.



CAP原理指的是一个分布式系统不可能同时满足C、A和P3个条件。所以系统架构师在设计系统时,不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。由于网络的不可靠性质,大多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C和A中做抉择。



CAP证明:

假设现在有两个节点G1和G2,节点G1和G2都存着数据v0。现在有用户端client访问G1,提交更新,将v0改成v1。



  1. 若保证C和P, 则G1需要将更新操作v0->v1同步给G2, 但因为系统可以保证分区容忍性P, 网络是不可靠的,则这时如果为了需要满足A的话,则G2需要阻塞请求直到G1同步完成,不满足可用性。所以,在保证C和P的情况下,是无法同时保证A的。

  2. 若保证A和P,则为了保证A, 用户请求在访问两个节点时都需要在有限时间内返回。而如果为了保证C的话,同样G2需要阻塞请求直到G1同步完成,与可用性冲突。所以,在保证A和P的情况下,是无法同时保证C的。

  3. 如果要保证C和A,只有在网络情况良好且可靠的情况下才能实现。这样G1才能立即将更新消息发送给G2。但是我们都知道网络是不可靠的,是会存在丢包的情况的。所以要满足即时可靠更新,只有将G1和G2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。



用户头像

还未添加个人签名 2019.01.06 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第六周作业