架构23事

分布式理论之CAP&BASE

2021-01-14  本文已影响0人  LCY_RAIN

分布式系统架构

分布式系统概念

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


分布式系统

分布式与集群的区别

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

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

分布式系统的发展

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

分布式架构的演变

分布式系统面临的问题

  1. 由于网络原因,该请求并没有被成功的发送到接收方,而是在发送过程就发生了丢失现象。
  2. 该请求成功的被接收方接收后,并进行了处理,但在响应反馈给发送方过程中,发生了消息丢失现象。

分布式理论

一致性

一致性分类

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理论

  1. 响应时间损失:例如系统正常状态下0.3s将数据返回,出现问题后需要1-2s将数据进行返回
  2. 功能上损失:例如淘宝网站在双11进行大促,或者活动秒杀,当你点击某个功能的时候出现"被挤爆了稍后再试.."等等..都是功能上损失

结束语

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

上一篇 下一篇

猜你喜欢

热点阅读