架构师训练营第六周作业
作业一:
下面两题,至少选做一题
请简述 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。
若保证C和P, 则G1需要将更新操作v0->v1同步给G2, 但因为系统可以保证分区容忍性P, 网络是不可靠的,则这时如果为了需要满足A的话,则G2需要阻塞请求直到G1同步完成,不满足可用性。所以,在保证C和P的情况下,是无法同时保证A的。
若保证A和P,则为了保证A, 用户请求在访问两个节点时都需要在有限时间内返回。而如果为了保证C的话,同样G2需要阻塞请求直到G1同步完成,与可用性冲突。所以,在保证A和P的情况下,是无法同时保证C的。
如果要保证C和A,只有在网络情况良好且可靠的情况下才能实现。这样G1才能立即将更新消息发送给G2。但是我们都知道网络是不可靠的,是会存在丢包的情况的。所以要满足即时可靠更新,只有将G1和G2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。
评论