首页 > 编程知识 正文

cap base理论及其应用,cap理论的核心思想

时间:2023-05-06 01:51:19 阅读:31955 作者:2495

分布式系统

举个最简单的例子吧。 例如,我们的图书管理系统。 以前的系统包括所有功能,包括用户注册登录、管理员功能和图书借阅管理。 这叫做集中式系统。 也就是说,一个人做了好几件事。

此后,随着功能的增加,用户数量也在增加。 集中管理系统很麻烦,可扩展性也不好。 因此,考虑了分离这些功能。 一般的理解是,本来需要一个人做的事情,现在分n个人做,各自做各自的事情,最终得到和一个人做一样的效果。

稍微正规的定义是,一个业务被分割成多个子业务,导入到不同的服务中。 而且,通过一定的通信协议,能够在这些子业务之间相互通信。

既然分成了n个人,就涉及这些人的交流合作问题。 要解决这些问题,首先要谈分布式系统中的CAP理论。 请不要被这个伟大的概念所迷惑。

CAP理论:

作为分布式系统的基础理论,说明分布式系统的三个特性

http://www.Sina.com/(一致性)所有节点上的数据对于每次同步的http://www.Sina.com/(avail ability )请求都可以收到一个响应,并且响应(partitiontolerance ) :系统应该能够持续提供服务,即使系统内部存在信息丢失(分区),Lynch也会与他人证明Brewer的预想,从而将CAP提升为定理,实现CAP的

一致性:一致性称为原子对象,任何读写都应该看起来像“原子”的或串行的。 以后读一定能读前面写的内容。 所有读写请求似乎都是全局排序的。可用性:对于未失败的节点,必须在有限的时间内响应请求。 (请求可中断性)分区容错性)允许节点之间丢失任意数量的消息,并且如果发生网络分区,节点之间的消息可能会完全丢失

http://www.Sina.com/http://www.Sina.com /

C:在分布式系统上完成写入后的读取操作必须获取该写入操作写入的最新值。 相当于分布式系统中的每个节点都需要始终保持数据的一致性。

A:可以一直正常读写操作。 简而言之,客户端始终可以正常访问并获得系统的正常响应。 在用户看来,系统操作不会失败,访问也不会超时。

P是指即使分布式系统中的节点或网络分区出现故障,整个系统也可以对外提供满足一致性和可用性的服务。 也就是说,有些故障不影响整体的使用。

实际上,分布式系统是考虑到错误、硬件、网络等各种原因引起的故障而设计的,因此即使某些节点或网络发生故障,也要求继续使用整个系统

(不继续使用意味着只有一个分区,也没有后续的一致性和可用性。)

最多只能实现其中的两个特性,不能三者兼顾。分布式系统要么满足AP,要么CA,要么CP。无法同时满足CAP。

如果提前保证分区的容错能力,这意味着即使节点发生故障,用户也可以继续访问。 在这种情况下,用户在访问过程中可能会出现无法同时满足一致性和可用性的情况。 请参考下图。

如图所示,假设分布式系统中有G1、G2两个节点,初始值均为v0。 现在,一个客户端向系统写入了值v1。 这里假设直接写了节点G1。 写完后客户端去读这个值,那时读了G2节点。

由于G2节点和G1节点失去连接,G1节点上的数据在该点不与G2节点同步,从而客户端读取修改前的值v0。 这变成了不满足一贯性的状况。 相当于满足了可用性,失去了一致性。

同样,如果系统保证较强的一致性,则在客户端写入G1节点后,G1将数据同步到G2节点时会出现问题。 此时,如果客户端再次去读取G2节点上的数据,则客户端将处于等待状态,因为系统中的每个节点

要同步数据,必须等待同步后再使用。 这相当于满足了一致性,失去了可用性。

考虑多个客户端访问时,一致性和可用性还可以理解为: 如果客户端1将值更改为G1,并且写入尚未完成,则客户端2将开始读取该值并正在读取G2节点。 此时,为了满足一贯性,

必须使客户端2暂时不可用。 要使用client2,检索到的数据不是最新的,系统就不满足一致性。

I. 一致性、可用性和分区容错性解析:

)1)一致性:优先保证一致性和可用性,放弃分区容错。 这意味着放弃了系统的可扩展性,系统不再是分布式的,违背了设计的初衷。

)2)可用性:优先保证一致性和分区容错,放弃可用性。 如果对数据完整性的要求相对较高(

per,Hbase) 是比较常见的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等恢复之后用户才逐渐能访问。

(3) AP: 优先保证可用性和分区容错性,放弃一致性。NoSQL中的Cassandra 就是这种架构。跟CP一样,放弃一致性不是说一致性就不保证了,而是逐渐的变得一致。

权衡三者的关键点取决于业务

放弃了一致性,满足分区容错,那么节点之间就有可能失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会容易导致全局数据不一致性。对于互联网应用来说(如新浪,网易),机器数量庞大,节点分散,网络故障再正常不过了,那么此时就是保障AP,放弃C的场景,而从实际中理解,像门户网站这种偶尔没有一致性是能接受的,但不能访问问题就非常大了。

对于银行来说,就是必须保证强一致性,也就是说C必须存在,那么就只用CA和CP两种情况,当保障强一致性和可用性(CA),那么一旦出现通信故障,系统将完全不可用。另一方面,如果保障了强一致性和分区容错(CP),那么就具备了部分可用性。实际究竟应该选择什么,是需要通过业务场景进行权衡的(并不是所有情况都是CP好于CA,只能查看信息但不能更新信息有时候还不如直接拒绝服务)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。