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

下面两题,至少选做一题
- 请简述 CAP 原理。 
- 针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。 
CAP
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。
分布式系统设计原则提出 CAP( Consistency, Availability 、 Partition Tolerance )
- Consistency 一致性 
All nodes would give the same data at any given point of time
所有的节点在给定的任意时刻都能给出一样的数据
- Availability 可用性 
All nodes (as long as up) would respond to client request and no request would be rejected.
所有的节点,启动以后将会响应客户端的请求,并且不会拒绝客户端的任何请求。
- Partition Tolerance 分区容错 
A client can talk to all nodes even if they were not able to connect between themselves.
任一客户端都可以和所有的节点对话,即使这些节点之间不能相互连接。

CAP定理在分布式系统中不能同时拥有这三个属性,只能有两个:一个系统可以具有:
- 一致性+分区容错(CP) 
- 可用性+分区容错(AP) 
- 一致性+可用性(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 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。 

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

版权声明: 本文为 InfoQ 作者【旭东(Frank)】的原创文章。
原文链接:【http://xie.infoq.cn/article/8d6d32f9594fadc1b0bdbf58c】。文章转载请联系作者。












 
    
评论 (2 条评论)