网站模板框架,站长资讯,做网站要注册第35类商标吗,人力外包公司怎么赚钱分布式系统中的CAP原理 本文已收录至我的个人网站#xff1a;程序员波特#xff0c;主要记录Java相关技术系列教程#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源#xff0c;让想要学习的你#xff0c;不再迷茫。 简介
在分布式系统中…分布式系统中的CAP原理 本文已收录至我的个人网站程序员波特主要记录Java相关技术系列教程共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源让想要学习的你不再迷茫。 简介
在分布式系统中我们经常听到CAP原理这个词它是什么意思呢?其实和C、A、P这3个字母有关C、A、P分别是这3个词的首字母。下面我们就看- -下这3个词分别是什么意思?
C- Consistent, -致性。具体是指操作成功以后所有的节点在同一时间看到的数据都是完全一致的。 所以致性说的就是数据一致性 。A- Availability, 可用性。指服务一致可用在规定的时间内完成响应。P- Partition tolerance;分区容错性。指分布式系统在遇到某节点或网络分区故障的时候仍然能够对外提供服务。 CAP原理指出这3个指标不能同时满足最多只能满足其中的两个。
详解
我们之所以使用分布式系统就是为了在某个节点不可用的情况下整个服务对外还是可用的这正是满足P(分区容错性)。如果我们的服务不满足P(分区容错性)那么我们的系统也就不是分布式系统了所以在分布式系统中P(分布容错性)总是成立的。那么A(可用性)和C(一致性)能不能同时满足呢?我们看一下下面的图例。 A和B是两个数据节点A向B同步数据并且作为一个整体对外提供服务。由于我们的系统保证了P(分区容错性)那么A和B的同步我们允许出现故障。接下来我们再保证A(可用性)也就是说A和B同步出现问题时客户端还能够访问我们的系统那么客户端既可能访问A也可能访问B这时A和B的数据是不一致的所以C(一致性)不能满足。
如果我们满足C(一致性)也就是说客户端无论访问A还是访问B得到的结果都是一样的那么现在A和B的数据不一致需要等到A和B的数据一致以后也就是同步恢复以后才可对外提供服务。这样我们虽然满足了C(一致性)却不能满足A(可用性)。
所以我们的系统在满足P(分区容错性)的同时只能在A(可用性)和C(一致性)当中选择一个不能CAP同时满足。我们的分布式系统只能是AP或者CP。
ACID与BASE
在关系型数据库中最大的特点就是事务处理也就是ACID。ACID是事务处理的4个特性。
A - Atomicity (原子性)事务中的操作要么都做要么都不做。C -Consistency (- 致性)系统必须始终处在强一致状态I - Isolation (隔离性)-个事务的执行不能被其他事务所干扰。D- Durability (持久性)-个已提交的事务对数据库中数据的改变是永久性的。
ACID强调的是强一致性要么全做要么全不做所有的用户看到的都是一致的数据 。传统的数据库都有ACID特性它们在CAP原理中保证的是CA。但是在分布式系统大行其道的今天满足CA特性的系统很难生存下去。ACID也逐渐的向BASE转换。那么什么是BASE呢?
BASE是Basically Available (基本可用)Soft-state (软状态)Eve ntually consistent(最终一致)的缩写。
Basically Available基本可用是指分布式系统在出现故障的时候允许损失部分可用性即保证核心可用。电商大促时为了应对访问量激增部分用户可能会被引导到降级页面服务层也可能只提供降级服务。这就是损失部分可用性的体现。软状态(Soft State)软状态是指允许系统存在中间状态而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有两到三个副本允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。最终一致性(Eventual Consistency)最终一致性是指系统中的所有数据副本经过一定时间后最终能够达到一致的状态。弱一致性和强一致性相反最终一致性是弱一致性的一种特殊情况。
BASE模型是传统ACID模型的反面不同与ACIDBASE强调牺牲高一致性从而获得可用性数据允许在一段时间内的不一致只要保证最终一致就可以了。
在分布式事务的解决方案中它们都是依赖了ACID或者BASE的模型而实现的。像基于XA协议的两阶段提交和实物补偿机制就是基于ACID实现的。而基于本地消息表和基于MQ的最终一致方案都是通过BASE原理实现的。