浅谈CAP理论到BASE理论跨度变化

@[toc浅谈CAP理论到BASE理论跨度变化]

一.CAP理论剖析

概要:CAP 定理指出了,在一个跨区域网络连接,共享数据的分布式系统中,一致性(Consistency),可用性(Availability)和分区容错性(Partition Tolerance) 这三个约束属性最终只能同时满足二个。

个人笔记如下:
在这里插入图片描述在这里插入图片描述

1.1.CAP原理细节举例分析

假设有两个节点 data1 和 data2,以及一个变量数据 number = 1;这时有写请求向 data1 提交了更新,将数据number改变为2。

    接着 data1 就需要将更新后的数据同步给 data2 ,让 data2 更新number的最新值。

就3个场景去分析:

1.在保证CP的情况下
为了保证数据数据一致性,data1 需要将数据复制给 data2,那么两个节点之间需要建立通信,可由于网络原因,通讯出现了问题,导致失败了,比较网络是不可靠的。不过系统又保证了分区容错性,这时候 data2 就不一定能够及时的收到 data1 推送来的数据同步信息。当客户端有请求来访问 data2 的number数据时,为了保证数据一致性,data2 只能阻塞,或者返回错误,提示系统发生了错误,然后等待数据真正同步完成后再返回。

    所以,在保证C and P的情况下,是无法同时保证A的。

2.在保证AP的情况下
为了保证系统的高可用性,data1 和 data2 都需要在有限时间内返回。同样的由于网络的不可靠,在有限时间内,data2 有可能还没有收到 data1 发来的数据同步信息,这时候返回给客户端的可能就是旧数据,和访问 data1 的数据是不一致的,并不满足C。

    所以,在保证A and P的情况下,是无法同时保证C的。

3.在保证AC的情况下
如果要保证高可用和一致性,只有在网络情况良好且可靠的情况下才能实现。这样 data1 才能立即将更新的消息发送给 data2。但是我们都知道网络是不可靠的,是会存在丢包的请客。所以要满足及时可靠更新,只有将两个节点data1 data2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。

    理解CAP理论的最简单方式:可以想象两个节点分处在分区两侧。允许至少一个节点更新状态会导致数据的不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点互相通信,才能既保证C又保证A,这又会导致丧失P性质。

1.2.CAP原理总结

我们设计系统不能同时具备CAP这三种特性。但是也并不是说,保证了其中2点后,就完全抛弃了另外一点。只是相对的要做一些牺牲。比如在保证CP的情况下,虽然没办法保证高可用性,可这不意味着可用性就为0,我们可以通过合理的设计尽量的提高可用性,让可用性尽可能的接近100%。同理,在AP的情况下,也可以尽量的保证数据的一致性,或者实现弱一致性,即最终一致性。

结合实际的业务场景、和具体需求,基于CAP定理来进行权衡和设计可用且稳定的分布式系统。

二.BASE理论剖析

摘要:BASE理论源于eBay的架构师Dan Pritchett对大规模分布式系统的实践总结,BASE理论是对CAP理论的延伸,其核心思想是即使无法做到强一致性(CAP中的C),但应用可以采用合适的方式达到最终一致性。   BASE是指基本可用、软状态和最终一致性。

个人笔记如下:
在这里插入图片描述

2.1 BASE原理细节举例分析

一.最终一致性可以分为五种:
1.1 因果一致性(Causal Consistency):
  因果一致性指的是:如果节点A在更新完某个数据后通知了节点B,那么节点B之后对该数据的访问和修改都是基于A更新后的值。于此同时,和节点A无因果关系的节点C的数据访问则没有这样的限制。

1.2 读己之所写(Read your writes):
  读己之所写指的是:节点A更新一个数据后,它自身总是能访问到自身更新过的最新值,而不会看到旧值。其实也算一种因果一致性。

1.3 会话一致性(Session consistency):
  会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现 “读己之所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。
  
  例如,有些分布式数据库的读、写有不同节点提供服务。在一次会话中,先修改了某个值,然后去读这个值,发现读到了旧值,值没有更新,如果还按旧值给用户使用,则导致用户体验不好。这时不去读数据库中的值,而是直接用会话上下文新增值为用户服务。使此时有其他会话修改了数据,也要保证本会话连贯,不更新最新值。
1.4 单调读一致性(Monotonic read consistency):
单调读一致性指的是:如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧的值。
  该节点相当于中间逻辑层,缓存从数据层得到的数据。如果再读到旧的副本,则不使用旧数据,只用读到的最新版本的数据返回给前端进行处理。
1.5 单调写一致性(Monotonic write consistency):
  单调写一致性指的是:一个系统要能够保证来自同一个节点的写操作被顺序的执行。

三.CAP理论到BASE理论过渡的分析理解

3.1.什么时候需要用到BASC理论?

在CAP理论中,其中CP系统强调的强一致性,意味着当出现网络分区,服务无法快速给出正确的反馈。举例子,集群的可用性是每个节点可用性的乘积,比如,假设 3 个节点的集群,每个节点的可用性为 99.9%,那么整个集群的可用性为 99.7%,也就是说,每个月约宕机 129.6 分钟,这是非常严重的问题。 而解决可用性低的关键在于,根据实际场景,尽量采用可用性优先的 AP 模型。

3.2.实现BASC理论的方法

 流量削峰、延迟响应、体验降级、过载保护
 流量削峰 —— 12306购票系统:出售不同区域的票,将访问请求错开,削弱请求峰值。比如,在春运期间,深圳出发的火车票在 8 点开售,北京出发的火车票在 9 点开售。
 延迟响应 —— 12306购票系统:提交的购票请求,会在队列中排队等待处理,可能几分钟或十几分钟后,系统才开始处理,然后响应处理结果。
 体验降级 —— 互联网系统:突然出现网络热点事件,大量用户涌进来,产生了海量的突发流量,系统过载了,大量图片因为网络超时无法显示,用小图片来替代原始图片,通过降低图片的清晰度和大小,提升系统的处理能力。
 过载保护 —— 比如把接收到的请求放在指定的队列中排队处理,如果请求等待时间超时了(假设是 100ms),这个时候直接拒绝超时请求;再比如队列满了之后,就清除队列中一定数量的排队请求,保护系统不过载,实现系统的基本可用。—— 过载保护。

小结

BASE 理论是对 CAP 中一致性和可用性权衡的结果,它来源于对大规模互联网分布式系统实践的总结,是基于 CAP 定理逐步演化而来的。它的核心思想是,如果不是必须的话,不推荐实现事务或强一致性,鼓励可用性和性能优先,根据业务的场景特点,来实现非常弹性的基本可用,以及实现数据的最终一致性。 BASE 理论主张通过牺牲部分功能的可用性,实现整体的基本可用,也就是说,通过服务降级的方式,努力保障极端情况下的系统可用性。 ACID 理论是传统数据库常用的设计理念,追求强一致性模型。BASE 理论支持的是大型分布式系统,通过牺牲强一致性获得高可用性。BASE 理论在很大程度上,解决了事务型系统在性能、容错、可用性等方面痛点。另外我再多说一句,BASE 理论在 NoSQL 中应用广泛,是 NoSQL 系统设计的事实上的理论支撑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值