「架构师训练营」第六周作业

用户头像
旭东(Frank)
关注
发布于: 2020 年 07 月 15 日
「架构师训练营」第六周作业

下面两题,至少选做一题

  • 请简述 CAP 原理。

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



CAP

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。



分布式系统设计原则提出 CAP( Consistency, Availability 、 Partition Tolerance )



  1. Consistency 一致性

All nodes would give the same data at any given point of time

所有的节点在给定的任意时刻都能给出一样的数据

  1. Availability 可用性

All nodes (as long as up) would respond to client request and no request would be rejected.

所有的节点,启动以后将会响应客户端的请求,并且不会拒绝客户端的任何请求。

  1. Partition Tolerance 分区容错

A client can talk to all nodes even if they were not able to connect between themselves.

任一客户端都可以和所有的节点对话,即使这些节点之间不能相互连接。



image.png



CAP定理在分布式系统中不能同时拥有这三个属性,只能有两个:一个系统可以具有:

  1. 一致性+分区容错(CP)

  2. 可用性+分区容错(AP)

  3. 一致性+可用性(CA)



为什么只能CA两个属性选择?



现在,鉴于在分布于整个网络的分布式系统中可能发生网络故障,因此除非您有单节点系统,否则就不可能放弃分区容错。这样就可以在“可用性”或“一致性”之间进行权衡。



  • 如果我们选择“ 可用性” ,则意味着当几个节点出现故障时,其他节点可供用户进行更新。

  • 如果选择“一致性” ,则必须锁定所有节点以进行进一步写入,直到出现故障的节点重新联机为止。



CAP 证明





假设有两个节点-N1和N2都具有数据-D0。现在要牢记分区容忍度,让我们假设一下他们不会互相交谈。但是客户端C1可以同时连接两者。

如果我们选择可用性,这意味着客户端C1暂时写入N1节点,并将数据更新到D1。如果C1读取N2,则否,那么N2将返回D0。因此N1和N2均可用,但处于不一致状态。



如果我们选择一致性-假设C1写入N1节点并将数据更新到D2。为了保持一致,N1必须将数据复制到N2并将数据D0更新到D2。正如我提到的那样,节点N1和N2目前无法彼此通信。由于N2没有最新数据,因此即使系统已启动并正在运行,也应将其视为不可用,因为它处于不一致状态,并且这违反了可用性规则。



为了在某种程度上解决此问题,有一个最终一致性的概念- 所有节点最终都将在一个时间段内同步,但是如果网络不会一直处于关闭状态,并且所有节点最终都将处于同步状态,则所有节点将始终可用。能够相互交流。但是不能在分布式系统中具有完全的一致性级别和完全的可用性。



一致性策略



CAP 的应用场景



CAP在数据库和NOSQL中的应用

Cassandra,Dynamo DB是AP(可用性+分区容忍)类别的示例,而Mongo DB是CP(一致性+分区容忍)类别的示例。





CAP 在微服务中的应用

微服务是一种分布式的应用注定也逃脱不了CAP原理的“经箍咒”,所以设计微服务时除了要考虑业务的拆分(领域的拆分和微服务粒度的拆分)还需要针对不同的业务场景去平衡取舍CA。如何CAP中权衡及取舍以及典型的案例。孰优孰略,没有定论,只能根据场景定夺,适合的才是最好的。对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务,这是保证CP,舍弃A。比如前几年支付宝光缆被挖断的事件,在网络出现故障的时候,支付宝就在可用性和数据一致性之间选择了数据一致性,用户感受到的是支付宝系统长时间宕机,但是其实背后是无数的工程师在恢复数据,保证数数据的一致性。



CAP 与BASE 和ACID 的关系



参考



http://www.julianbrowne.com/article/brewers-cap-theorem



https://www.hollischuang.com/archives/666



Doris 临时失效的处理过程



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



image.png

下图Node3为空闲物理节点或者日志节点



第六章作业-第 2 页.png



发布于: 2020 年 07 月 15 日 阅读数: 16
用户头像

旭东(Frank)

关注

世事洞明皆学问,日思一刻,日拱一卒。 2011.04.01 加入

微信公众号:ThinkingInDev,记录工作过程中点滴思考。这里有坑,有料,有思,有想的开发工作日记

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签
2020 年 07 月 15 日 10:56
回复
OK

4 小时前
回复
没有更多了
「架构师训练营」第六周作业