架构师训练营 No.6 周作业
请简述 CAP 原理。
针对 Doris 案例,请用 UML 时序图描述 Doris 临时失效的处理过程(包括判断系统进入临时失效状态,临时失效中的读写过程,失效恢复过程)。
CAP理论,作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中:
一致性(Consistency):在分布式系统完成某写操作后,任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。
可用性(Availability): 每次请求可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。
分区容错性(Partition tolerance):指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供服务。
CAP原理
首先,当网络分区故障发生的时候,我们要么取消操作,这样数据就是一致的,但是系统却不可用;要么继续写入数据,但就保证不了数据一致性。
再说,对于一个分布式系统而言,网络故障一定会发生,也就是说,分区耐受性是必须要保证的,那就要在可用性和一致性上要二选一。
总的来说,当网络分区故障,若选择了一致性,系统就可能返回错误或超时,即系统不可用。若选择了可用性,系统总可以返回一个数据,但并不能保证这个数据是新的。更准确来说,在分布式系统必须满足分区耐受性的前提下,可用性和一致性无法同时满足。
CAP三者不可兼得,该如何取舍:
(1) CA: 优先保证一致性和可用性,放弃分区容错。 这也意味着放弃系统的扩展性,系统不再是分布式的,有违设计初衷。
(2) CP: 优先保证一致性和分区容错性,放弃可用性。在数据一致性要求比较高的场合(如:zookeeper, Hbase) 是比较常见的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等恢复之后用户才逐渐能访问。
(3) AP: 优先保证可用性和分区容错性,放弃一致性。NoSQL中的Cassandra 就是这种架构。跟CP一样,放弃一致性不是说一致性就不保证了,而是逐渐的变得一致。
评论