博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单理解CAP-BASE
阅读量:4033 次
发布时间:2019-05-24

本文共 1228 字,大约阅读时间需要 4 分钟。

1、CAP

CAP是分布式系统的指导理论,是NoSQL数据库的理论基石。CAP其实就是对分布式系统的特性总结,即一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。

先说一下分区容错性,就是CAP中的P,这一项其实是必选项,CAP主要用在分布式系统中,所谓分布式就表示有多个服务器或节点,比如数据库的主从配置。如果不要P,那只是个单机服务,就不需要CAP来指导了。

再说一下数据一致性,就是CAP中C,这一项表示分布式系统中的每个服务或节点对外提供的数据必须得一致,比如数据在A数据库被修改了,必须立刻同步至其他(比如B)数据库服务器上。客户端访问B数据库时必须是最新的数据,否则不提供服务。

最后说一下可用性,就是CAP中A,我个人感觉这一项应该是最重要的原则了,搞分布式系统最主要的目的是实现高可用,即一台服务器崩了,还有其他节点继续提供服务。同时还能实现数据的安全,比如数据库同步备份等。

总结一下,其实同时实现数据一致性和可用性是互相矛盾的,想实现可用性,就要放弃数据一致性。分区容错性是必选的,所以留给我们的选项只有CP或AP。

CP,即实现一致性和分区容错性,此组合为数据强一致性模式,即要求多服务之间数据一定要一致,牺牲了可用性,比如操作A服务时,就要让其他服务不可用,一些对数据要求比较高的场景使用此方式,比如涉及金钱等。这种模式性能很低。实现强一致性的方案有2PC(两阶段提交)。

AP,即实现可用性和分区容错性,此组合为数据最终一致性模式,即要求所有服务都可用,牺牲了数据一致性,比如操作A服务修改数据,同时读取B服务查询时发现数据还是旧数据,但过一会数据就会一致,互联网分布式服务多数基于AP,Base模式也是基于AP组合。实现最终一致性的方案有TCC、消息队列、Saga等,其中消息队列用的最多。

2、BASE

BASE,即Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)。它是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论。互联网中对可用性要求非常高,但对一致性要求要少点,比如发一个消息给用户,用户不用立即收到,晚个一两秒也OK的。所以可以牺牲CAP中C,BASE理论大部分是对AP的补充和权衡。

Basically Available(基本可用),它是要求分布式系统中所有节点要做到高可用。

Soft State(软状态),它定义数据可以有一个中间状态,比如服务A更新数据,读取B服务时,允许存在一定的延迟,客户端读取的为中间状态。

Eventually Consistent(最终一致性),它允许数据存在中间状态,做不到强一致性,但要做到最终一致性,比如消息列表多刷几次,总归能刷出来。常用实现数据一致性的是用消息队列,如下图:

转载地址:http://qfkdi.baihongyu.com/

你可能感兴趣的文章
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>