大数据面试:什么是CAP法则?Zookeeper符合了这个法则的哪两个?

引言

作为一名程序员,我们或多或少都会听说过CAP法。但是如果面试官问你。你能够说得清楚吗?zookeeper又符合其中的哪两个法则呢?让我们通过下面文章的学习,一起了解一下吧。

CAP法则

CAP是什么

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错(Partition-tolerance)。在一个分布式系统中三个要素不可同时具有,只能选择其中两个。

 

1)一致性(Consistency)

在分布式系统中,所有节点在同一时刻的数据都是一致的。

2)可用性(Availability)

在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。即每个请求不管成功与否都能得到响应。

3)分区容错(Partition-tolerance)

保证系统中任意信息的丢失都不会影响系统的运行。

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

CAP的取舍策略和应用场景

1)AP

保持可用性和分区容错。如果选择分区容错性和可用性,当节点损坏时,遇到分区事件,受影响的服务不需要等待数据一致,就可以对外提供服务,保证了可用性就必须放弃一致性。

2)CP

保证一致性和分区容错。如果选择分区容错性和一致性,为保证一致性,各个节点之间的数据必须保持一致,当出现分区时,会导致同步时间无限延长,在同步的这段时间就无法对外提供服务,就无法保证可用性。

3)CA

保持一致性的同时保证可用性,这在分布式系统中是不存在的,因为分区问题总是会出现在分布式系统中。出现分区就必然会产生一致性问题和可用性问题,一致性和可用性两者只能选其一。

 

为什么CAP不可以同时满足

不可以同时满足主要原因是可能通信失败(即出现分区容错),此时一致性C和可用性A不可以同时满足。

若想满足C,一个数据结点被写数据时,另一个数据结点必须同步,即不可以进行读写操作,这样的话就不可以回应任何请求,即不可能满足A。

CAP和Base

BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。接下来我们着重对BASE中的三要素进行详细讲解。基本可用:指分布式系统在出现不可预知故障的时候,允许损失部分可用性。

注意,这绝不等价于系统不可用,以下两个就是“基本可用”的典型例子:

响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。

功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

弱状态:也称为软状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

最终一致性:强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。BASE 理论在 NoSQL 中应用广泛,是 NoSQL 系统设计的事实上的理论支撑。

Zookeeper

Zookeeper是一个由多个server组成的集群,分布、开源的应用程序协调服务,符合分布式服务ACP原理中的CP。当Leader挂掉的时候,集群会马上重选Leader。但这个选举时长在30-120秒之间,在这期间Follower都是Looking状态,是不能提供服务的,相当于集群整个就瘫痪了,所以不满足可用性。Zookeeper遵循的是CP原则,也就是选择了一致性,牺牲了可用性。它是集群的管理者,监视着集群中各个节点的状态,根据节点的反馈进行下一步合理操作。主要解决分布式应用经常遇到的数据管理问题,一些RPC框架(如点评pigeon、阿里dubbo的早期版本)使用ZK用来做服务发现和注册,点评的配置管理组件Lion用来做配置数据的获取更新,kafka⽤于检测崩溃,实现主题(topic)的发现,并保持主题的⽣产和 消费状态。zookeeper维护一个类似文件系统的数据结构:

 

每个子目录项都被称作为 znode,和文件系统一样,自由增加及删除,唯一不同其可存储数据,并提供节点的通知机制:客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

总结

通过上面文章的阅读,我们可以知道理论上CAP法则中我们只能选其中俩个。分区容错性,也就是P,在分布式系统中必须携带,所以一致性和可用性我们只能2选1。其中zookeeper用的是cp。BASE是对CAP中一致性和可用性权衡的结果,目前在 NoSQL 中应用广泛。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值