我是靠谱客的博主 精明含羞草,最近开发中收集的这篇文章主要介绍CAP理论和BASE理论,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CAP理论

在设计和部署分布式系统时,存在三个明显的需求:

  • C(Consistency)一致性。即分布式数据应该同步,保存一致。
  • A(Availability)可用性。指系统能够很好的为用户提供服务,主要体现在用户访问之后能很
    快的得到响应。
  • P(Oartition Tolerance)分区容错性。若在系统运行过程中,有部分主机宕机,依然不会影响整个系统的运行。

CAP理论的忠告是:架构师不要将精力浪费在如何设计满足三者完美分布式系统,而是应该进行取舍。
CAP理论认为在一个系统中对某个数据不存在一个算法同时满足一致性,可用性,分区容错性。往往需要牺牲某一项来满足其他两项。对于满足CA的例子也很常见,例如MySQL。

关系型数据库的ACID模型

关系型数据库是典型的CA模型。
- Atomicty(原子性)。对于一个事物,所有的操作都是一次性完成,所以我们可以把它看成是原子的,不可分割的。
- Consistency(一致性)。在事物开始和结束的过程中,数据库中的数据应该是不变的,也就是说,这个过程是一致的状态。
- Isolation(隔离层)。事物在操作的过程,并不知晓其他事物的存在。
- Durability。一旦事物完成就不能返回。

BASE模型

BASE模型完全不同于ACID模型。它强调:

  • Basically, Available(基本可用),支持分区失败。也就是说,在一定程度上牺牲了可扩展性。
  • Soft State(软状态),状态可以有一段时间不同步,异步同步。
  • Eventually Consistent(最终一致)。保证数据在最终是一致的,而无需保证实时数据一致。

NoSQL就继承了BASE的思想。

CAP理论模型的挑战者

Aomikos CTO Guy Pardon试图想达到CAP三种都符合要求的理想状态。他提出了如下思想:

  • 程序如果能够读数据库就读数据库,否则就使用缓存代替。(保证了一致性)。
  • 所有的读取操作使用版本号或者其他乐观锁,比如CAS。(高可用)
  • 客户端的所有更新操作均放在队列中顺序处理,同时应该更新版本号信息。(一致性)
  • 当分区数量足够少的时候,可以处理队列中的更新操作。主要思路还是在更新的时候比较版本号。如果版本号相同则返回失败,否则返回成功。(可扩展,分区容错)
  • 通过消息队列发送给客户端(高可用)

    该思想存在如下缺点:

  • 读数据不一致,写操作可能还在排队。

  • 分区容错必须在有限的时间内解决。
  • 更新操作必须在所有结点上保存同样的顺序。(比如在1号机中先写入一行再更新,那么再2号机中也是按同样的顺序进行更新)


另外又有人提出,将CRUD操作变成CR操作,所有的Update都变成Append操作,也就是说,只包含Create和Read操作,通过最终一致性模型,也能满足CAP三种都达到理想状态。

最后

以上就是精明含羞草为你收集整理的CAP理论和BASE理论的全部内容,希望文章能够帮你解决CAP理论和BASE理论所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部