分布式理论之CAP&BASE

分布式系统架构

分布式系统概念

通常的理解分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,理论上这些服务节点可以存在任意的位置。
分布式系统

分布式与集群的区别

集群:多个人在一起做同样事情
分布式:多个人在一起做不同的事

特点分布式系统
分布性YES
对等性YES
并发性YES
缺乏全局时钟YES
故障总会发生YES

对比

分布式系统的发展

阿里巴巴发起的"去 IOE"运动 (IOE 指的是 IBM 小型机、Oracle 数据库、EMC 的高端存储)。阿里巴巴2009 年“去IOE”战略技术总监透露,截止到 2013 年 5 月 17 日阿里巴巴最后一台 IBM 小型机在支付宝下线。 ?为什么要去IOE?
1.升级单机处理能力的性价比越来越低
2.单机处理能力存在瓶颈
3.稳定行和可用性指标不容易达到
##分布式架构的演变

  • 阶段1:单体应用架构:也就是我们在开始使用的一个Tomcat一个服务器做了所有的事情
  • 阶段2:应用服务器和数据库服务器分离
  • 阶段3:应用服务器集群
  • 阶段4:应用服务器负载用户
  • 阶段5:数据库读写分离
  • 阶段6:添加搜索引擎减少读库压力
  • 阶段7:添加缓存机制缓解数据库压力
  • 阶段8:数据库水平/垂直拆分
  • 阶段9:应用拆分
  • 阶段10:服务化/微服务
    ##分布式系统面临的问题
  • 通信异常
    网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤、路由、DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够 正常执行,其延时也会大于单机操作,存在巨大的延时差别,也会影响消息的收发过程,因此消息丢失和消息延迟 变的非常普遍。
  • 网络分区
    网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统就会出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才 能完成的功能,包括数据的事务处理,这就对分布式一致性提出非常大的挑战。
  • 节点故障
    节点故障是分布式系统下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或"僵死"现象,根据经验来说,每个节点都有可能出现故障,并且经常发生。
  • 三态
    分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败和超时。 分布式系统中,由于网络是不可靠的,虽然绝大部分情况下,网络通信能够接收到成功或失败的响应,但当网络出 现异常的情况下,就会出现超时现象,通常有以下两种情况:
  1. 由于网络原因,该请求并没有被成功的发送到接收方,而是在发送过程就发生了丢失现象。
  2. 该请求成功的被接收方接收后,并进行了处理,但在响应反馈给发送方过程中,发生了消息丢失现象。

分布式理论

一致性

  • 什么是分布式一致性
    分布式数据一致性,指的是数据在多份副本中存储时,个副本的数据是一致的。
  • 副本一致性
    分布式系统当中,数据往往存在多个副本。如果是一台数据库处理所有的数据请求。那么通过ACID原则,基本是可以保证数据的一致性。而多个副本就涉及到了数据的copy,这就带来了数据的同步问题。因为我们没有办法保证可是同时更新所有机器当中的包括备份的所有数据。网络延迟,即使我在同一时间给所有机器发送了更新数据的请求,也不能保证这些请求被响应的时间保持一致,依然会存在时间差,那么就会存在某些机器数据不一致的情况。
    总的来说,我们无法找到一种能满足分布式系统所有系统属性的分布式一致性解决方案。因此如何既保证数据的一致性,又保证系统的运行性能,是每个分布式系统都需要权衡和考虑的。也正如此,才诞生了数据一致性级别

一致性分类

  • 强一致性
    这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往是对系统的性能影响大。强一致性很难实现。
  • 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读取到写入的数据,也不承诺多久后可以达到数据的一致,但是会尽可能的保证某个时间级别(比如秒级别)后数据可以达到最终一致。
  • 读写一致性:用户读取自己写入结果的一致性,保证用户永远能够第一时间看到自己更新的内容。 比如我们发一条朋友圈,朋友圈的内容是不是第一时间被朋友看见不重要,但是一定要显示在自己的列表上。
  • 单调读一致性: 本次读到的数据不能比上次读到的旧。 由于主从节点更新数据的时间不一致,导致用户在不停地刷新的时候,有时候能刷出来,再次刷新之后会发现数据不见 了,再刷新又可能再刷出来,就好像遇见灵异事件一样
  • 因果一致性:指的是:如果节点 A 在更新完某个数据后通知了节点 B,那么节点 B 之后对该数据的访问和修改都是基于 A 更新后 的值。于此同时,和节点 A 无因果关系的节点 C 的数据访问则没有这样的限制。
  • 最终一致性:最终一致性是所有分布式一致性模型当中最弱的。可以认为是没有任何优化的“最”弱一致性,它的意思是说,我不考虑 所有的中间状态的影响,只保证当没有新的更新之后,经过一段时间之后,最终系统内所有副本的数据是正确的。 它最大程度上保证了系统的并发能力,也因此,在高并发的场景下,它也是使用最广的一致性模型。

CAP定理

CAP 理论含义是,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A:Availability)和分区容错 性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。 为什么这么说?我们先看下面的表格。

选项描述
C 一致性分布式系统当中的一致性指的是所有节点的数据一致,或者说是所有副本的数据一致
A 可用性Reads and writes always succeed. 也就是说系统一直可用,而且服务一直保持正常
P 分区容错性系统在遇到一些节点或者网络分区故障的时候,仍然能够提供满足一致性和可用性的服务

商品案例

C

Consistency:一致性是值写操作后读操作可以读到最新的数据状态,当数据分布在多个节点上时,从任意节点读取到的数据都是最新的。

  • 商品信息满足一致性需要实现如下目标
  1. 商品写入主数据库成功,则想从数据库查询数据也成功
  2. 商品服务写入主数据库失败,则向从数据库查询也失败
  • 那么如何实现一致性呢?
  1. 主库写入数据要同步到从库
  2. 写入主库后,在向从库同步期间要将从库锁定。等待同步完成后再释放锁,以免在写入新数据后向从库中查询到旧的数据。
  • 分布式一致性特点
  1. 由于存在数据同步,写操作响应会存在一定延时
  2. 为了保证数据一致性对资源暂时锁定,等待数据同步完进行锁释放
  3. 如果请求了同步失败的数据库节点,那么该节点一定不能返回旧数据,进行错误信息提示
A

Availability:可用性是指任何操作都可以得到响应的结果,且不会出现响应超时或响应错误

  • 商品信息读写满足可用性需要实现如下目标
  1. 从库接收到查询请求一定可以返回查询结果
  2. 数据库不允许出现响应超时或者错误
  • 如何实现可用性
  1. 写入主库要将数据同步到从库
  2. 要保证数据库的可用性,不能将资源锁定
  3. 即使数据没有同步过来,从库也要返回查询结果,哪怕是旧数据。但是绝对不允许超时或者出现错误
P

Partition tolerance:分布式系统的各个节点部署在不同的子网中, 不可避免的会出现由于网络问题导致节点之间通信失败,此时仍可以对外提供服务, 这个就是分区容错性 (分区容忍性)

  • 商品信息读写要满足分区容错性需要如下目标
  1. 主数据库想从数据库同步数据失败不影响写操作
  2. 其中一个节点挂掉不会影响另一个节点对外提供服务
  • 如何实现分区容错性
  1. 尽量使用异步取代同步操作,使用异步方式将数据从主数据库同步到从数据库,这样节点之间能有效的实现松耦合
  2. 添加数据库节点,其中一个从节点挂掉由其他节点提供服务
思考:CAP定理为什不能同时满足?

用户向N1发送了请求更改了数据,将数据库从V0更新成了V1。由于网络断开,所以N2数据库依然是V0,如果这个时候 有一个请求发给了N2,但是N2并没有办法可以直接给出最新的结果V1,这个时候该怎么办呢?

这个时候有两种解决办法:一种是将错就错,N2直接将V0返回给用户。另一种就是等到N1和N2的通信恢复,将更新之后的数据返回给用户。显然第一种方式牺牲了一致性,第二种方式牺牲了可用性。

我们在对CAP进行取舍的时候一定要对实际的情况进行分析,当然P是肯定存在的,没有P也就意味着没有了分布式。当然看到这里证明你在思考,那么就不能最大限度的满足这个三个吗?我们继续往下看。

BASE理论

  • 什么是BASE理论
    全称:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个 短语的缩写,来自 ebay 的架构师提出
    BASE是对CAP中一致性和可用性权衡的结果,BASE理论的核心思想是:即使无法做到强一致性,但是每个应用可以根据自身业务特点,采用适当的方式来使系统达到最终一致性
  • Basically Available:基本可用
    基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但请注意,这绝不等价于系统不可用。
  1. 响应时间损失:例如系统正常状态下0.3s将数据返回,出现问题后需要1-2s将数据进行返回
  2. 功能上损失:例如淘宝网站在双11进行大促,或者活动秒杀,当你点击某个功能的时候出现"被挤爆了稍后再试…"等等…都是功能上损失
  • Soft state:软状态
    什么是软状态呢?相对于一致性,要求多个节点的数据副本都是一致的,这是一种 “硬状态”。软状态指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同 节点的数据副本之间进行数据同步的过程中存在延迟。
  • Eventually consistent:最终一致性
    最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

结束语

分布式理论对于我们来说主要是思想,知其然更要知其所以然。“革命先烈”已经将成熟的东西交给了我们,那么我们一定要去珍惜。希望这篇文章可以给“干饭人”带来“干饭魂”。欢迎下方留言讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值