CAP 和 BASE

集中式与分布式

大型主机的人才培养成本高;大型主机自己价格昂贵;集中式系统有明显的单点问题。算法

随着PC机性能的提高和网络的普及,大型主机市场份额愈来愈小,不少企业开始放弃大型机,改用小型机和普通PC服务器来搭建分布式的计算机系统。数据库

集中式的特色

集中式系统是指由一台或多台主计算机组成中心节点,数据集中存储在这个中心节点中,而且整个系统的全部业务单元都集中部署在中心节点上,系统全部功能均由其集中处理。服务器

其最大的特色就是部署结构简单。集中式系统每每基于底层性能卓越的大型主机。网络

分布式的特色

分布式系统有以下定义:分布式系统是一个硬件或软件组件分布在不一样的网络计算机上,彼此之间仅仅经过消息传递进行通讯和协调的系统。并发

通常来讲,一个标准的分布式系统有以下特征:异步

  1. 分布性:分布式系统的多台计算机都会在空间上随意分布,同时,机器的分布状况也会随时变更。
  2. 对等性:分布式系统中的计算机没有主从之分,组成分布式的全部计算机节点都是对等的。 副本:分布式系统对数据和服务提供的一种冗余方式,为了对外提供高可用的服务,每每对数据和服务进行副本处理。
  3. 并发性:统一分布式系统中的多个节点,可能会并发地操做一些共享的资源
  4. 缺少全局时钟:进程经过交换消息来进行相互通讯。所以,在分布式系统中,很难定义两个事件谁先谁后。
  5. 故障总会发生

分布式环境的问题

  1. 通讯异常:网络不可用的风险;即便通讯能正常运行,其延时也会远大于单机操做。所以消息丢失和消息延迟变得很是广泛。
  2. 网络分区:分布式系统中部分节点间的网络延时不断扩大,最终致使只有部分节点之间能正常通讯,另外一些节点则不能,称之为网络分区。
  3. 三态:分布式系统的每一次请求与响应,存在成功、失败和超时三态。
  4. 节点故障

分布式系统设计

中心化设计

分布式集群中的节点按照角色分工,分为领导和干活的。分布式

领导一般负责分发任务并监督其余节点,发现空闲节点则为其安排任务;若是有节点宕掉,则把任务分给其余节点。性能

存在如下问题:.net

  1. 领导节点出问题后,整个集群崩溃。
  2. 领导节点的领导能力问题,没法领导大规模的节点。

系统能够采用主备两个“领导”的设计方案,自动选举切换领导,来提高系统可用性。设计

去中心化设计

分布式事务

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不一样节点之上。一般一个分布式事务中会涉及对多个数据源或业务系统的操做。

咱们指望实现严格知足ACID特性的分布式事务,极可能出现的状况就是在系统的可用性和严格一致性之间出现冲突,也就是当咱们要求分布式系统具备严格一致性时,极可能就须要牺牲掉系统的可用性。

CAP 定理

CAP理论告诉咱们,一个分布式系统不可能同时知足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本需求,最多只能同时知足其中的两项。

一致性

一致性是指数据在多个副本之间是否可以保持一致的特性,也就是知足ACID的特性。

从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

强一致性

在分布式系统中,若是可以作到针对一个数据项的更新操做执行成功后,全部用户均可以读取到最新的值,那么这样的系统被认为有强一致性。

可用性

可性质是指系统提供的服务必须一直处于可用状态,对于用户的每个操做请求老是能在有限时间内返回结果

有限时间是指用户的一个操做请求系统必须能在指定时间内返回对应的处理结果,若是超过了这个时间范围,就被认为是不可用的。

返回结果是可用性的另外一个重要指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果,也即成功或失败。

分区容错性

分区容错性约束了一个分布式须要具备以下特性:分布式系统在遇到任何网络分区故障的时候,仍然须要可以保证对外提供知足一致性和可用性的服务,除非是整个网络环境都发生了故障。

网络分区是指因为某种缘由,网络被分红若干个孤立的区域,而区域之间互不相通。

放弃CAP

一个分布式系统不可能同时知足一致性、可用性和分区容错性三个需求。可是,对于一个分布式系统而言,分区容错性是一个最基本的要求。由于分布式系统中的组件必然须要被部署到不一样节点,所以必然出现子网络;同时分布式系统必然会面对网络的异常状况,所以分区容错性是分布式系统必须面对和解决的问题。所以当发生网络分区的时候,若是咱们要继续服务,那么强一致性和可用性只能2选1。也就是说当网络分区以后P是前提,决定了P以后才有C和A的选择。

放弃A:一旦遇到分区容错故障,收到影响的服务须要等待必定时间,在等待期间系统没法对外提供服务。

放弃C:放弃数据的强一致性,保留数据的最终一致性。

CAP理解

一致性等同于可串行化这个术语。系统对一个数据的读和写虽然包含多个子步骤而且可能持续一段时间才执行完,可是调用者看来,读和写操做都是单个的即时完成的操做。对一个写操做,若是系统返回了成功,那么以后到达的读请求都要督导这个新数据;若是系统返回失败,那么全部的读都不能读到这个数据。

可用性指的是全部的操做都必需要能终止。

分区容忍性是指系统中会任意的丢失报文。

在实践过程当中,若是为了扩展数据容量将数据分布式存储,事务的要求又不能下降,则系统可用性会大大下降,通常采用对这些数据不分散存储的策略。也就是关系型数据库为了保证C、A而牺牲P,尽可能避免分布式事务。

虽然 CAP 中只能保证 CP 或者 AP,可是并非牺牲了一致性C,就必定能同时得到可用性A和分区容忍P,还有一个很重要的因素是延迟。所以,A和P并非牺牲C的借口,由于即便牺牲了C,也不必定能保证A和P。

CAP 理论说在一个系统中对某个数据不存在一个算法同时知足 Consistency, Availability, Partition-tolerance。注意,这里边最重要和最容易被人忽视的是限定词“对某个数据不存在一个算法”。这就是说在一个系统中,能够对某些数据作到 CP, 对另外一些数据作到 AP,就算是对同一个数据,调用者能够指定不一样的算法,某些算法能够作到 CP,某些算法能够作到 AP。

BASE理论

BASE 是 Basically Avaiable 基本可用、Soft state 软状态和 Eventually consistent最终一致性三个短语的简写。BASE 是对 CAP 中一致性和可用性权衡的结果,其核心思想是及时没法作到强一致性,可是每一个应用都应该根据自身业务特色,采起适当方式来使系统达到最终一致性。

基本可用

基本可用是指分布式系统在出现不可预知故障的时候,容许损失部分可用性,可是不等价于系统不可用。

弱状态

也称为软状态,是指容许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的总体可用性,即容许系统在不一样节点的数据副本之间进行数据同步的过程存在延时。

最终一致性

最终一致性强调的是系统中全部数据副本,在通过一段时间的同步后,最终能达到一个一致的状态。也就是须要保证系统最终数据到达一致,而不须要实时保证系统数据的强一致性。

一般经过数据的多份异步复制来实现系统的高可用和数据的最终一致性。

最终一致性存在五种变种。

  1. 因果一致性:若是进程A更新完数据后通知了B,则B以后对该数据的访问都应该能获取到进程A更新的最新值,若是进程B要在进程A更新后的值之上更新该数据项,不能丢失更新。与进程A没有因果关系的进程C访问没有这样的限制。
  2. 读己所写:进程A更新数据后,老是能访问到更新过的最新值。
  3. 会话一致性:系统能保证同一个有效的会话中实现“读己所写”。执行更新操做以后,客户端能在同一会话中始终读取到该数据的最新值。
  4. 单调读一致性:一个进程从系统中读取出一个数据项的值后,系统对该进程后序的任何数据访问都不该该返回更旧的值。
  5. 单调写一致性:一个系统须要能保证来自同一进程的写操做被顺序地执行。

BASE 理论面向的是大型高可用可扩展的分布式系统,不一样于ACID的强一致性模型,而是提出经过牺牲强一致性来得到可用性,并容许数据在一段时间是不一致的,最终达到一致状态。

参考资料

相关文章
相关标签/搜索