分布式系統架构基础知识(1)-ACID到CAP和BASE【重写】

什么是分布式?为什么要做分布式?分布式要实现什么?

大白话解释(个人理解, 有错指正):
  1. 在不同的地方有好多的节点运行相同的程序叫做分布式
  2. 两种情况:
    • 单一节点或集群,无法满足并发需求,需要扩充更多的硬件资源来支撑并发。但是现实情况是土地资源是有限的,无法在同一地点扩张。所以采取了多地区的方案进行扩展。
    • 需要更快的响应速度
  3. 分布式要实现 单节点的ACID,实现了吗(CAP)?
    • CAP的A(高可用,主备是基础,主从在C中讨论):
      1. 单节点:不存在可用性,挂了整体服务都不可用。
      2. 分布式:如果某节点挂了,其他节点还可以用,但是整体情况下是不可用的, 所以要引入节点备机,当master宕机,slave顶替上来。增加可用性
    • CAP的P (分区)–主备是前提:
      1. 单节点:只有一个master,不存在主备的情况。
      2. 分布式:网络延迟,网络不可用。会引起 slave 在 master 没宕机的情况下成为新的master,这时候同一节点上出现两个master【俗称脑裂】。脑裂不可避免,但是必须确定使用哪个master,放弃使用另外一个,不然就会导致两个master同时修改一份数据,造成数据不一致。常用解决方案就是投票
    • CAP的C(高性能,主从,一致性):
      1. 单节点:可用的数据就一份。(mysql内部有缓存区,先写缓冲, 再写真实表。可用数据指的是真实表)
      2. 分布式:在数据同步过程中,网络问题导致数据更新延迟或者失败,导致数据不一致。解决方案 BASE理论:
    • 强一致性:如果数据在同步过程中失败了, 那就回滚数据, 返回失败。这种会降低可用性,不满足高可用原则。
    • 弱一致性:允许部分数据丢失, 不满足一致性
    • 最终一致性:数据一定会同步,只是需要时间。但是这个时间不确定,间接的满足一致性。虽然这个方案不好, 但是只需要尽快的同步到就没问题,所以采用多从机制增加短时间同步的概率

所以CAP目标是实现单节点的C,最终解决的就是通信问题。


专业解释

分布式系統
概念:
一个组件(硬件或者软件)分布在网络上的系统,组建之间通过传递消息进行通信和动作协调

特点:

  1. 分布式:分布式系统中的计算机分布情况,会根据实际情况来分布
  2. 对等性:分布式系统中的就算计没有主/从之分, 所有节点都是对等的。
  3. 并发性
  4. 缺乏全局时钟:每一台计算机都有物理时钟, 但可能出现偏差
  5. 故障独立性:
  1. 进程可能出异常
  2. 所有计算机都有可能出现故障,
  3. 网络故障

更詳細的分布式请看 《分布式系统概念与设计》这本书

上述会引发数据一致性的问题,解决思路就是:

  1. 强一致性:完全保证数据一致性
  2. 弱一致性:尽量保证数据一致性, 但有可能出问题
  3. 最终一致性:保证数据一致性, 数据最终一定会被同步完成,但这个时间段会出现数据不一致

以下是针对上面3个思路的理论


事务设计理论

ACID(强一致性)
  1. 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性:事务前后数据的完整性必须保持一致。
  3. 隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  4. 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

CAP/BASE
  1. CAP
  1. 一致性:数据在多个副本之间能够保持一致
  2. 可用性: 系统提供的服务必须一直处于可用, 对于用户的每一个操纵请求总能够有限时间内返回结果,如果超过这个时间,即不可用
  3. 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非整个网络环境发生了故障
    在这里插入图片描述

应用
在这里插入图片描述
具体解释参考:CAP 定理的含义


  1. BASE
  1. 基本可用: 分布式系统出现不可预制的故障的时候, 允许损失部分可用性
  1. 相应时间上的损失: 假设:正常情况下接口响应时间是0.5秒,出现故障好,响应时间变成1-3秒
  2. 功能上的损失:最好理解的就是双十一, 关闭了退款等业务,淘宝为了迎接并发。
  1. 弱状态

指数据存在中间状态,但不影响整理的可用性, 即允许不同的节点在同步数据的时候存在延迟

  1. 最终一致性
  1. 因果一致性

节点 A在更新完某个数据项后通知 节点 B, B应该要能获取到A更新后的最新的数据,B更新这条数据也是基于A更新后的最新数据修改的。但是与进程A无关的进程C是没有这个限制的

  1. 读已(自己)之所写

节点 A 更新一个数据后,它自身总是能访问到自身更新过的最新值,而不会看到旧值。其实也算一种因果一致性

  1. 会话一致性

将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现 “读己之所写” 的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。

  1. 单调读一致性

如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧的值。

  1. 单调写一致性

指一个系统要能够保证来自同一个节点的写操作被顺序的执行。


在这里插入图片描述

  • ACID是传统数据库常用的设计理念, 追求强一致性模型。
  • 在设计上 无法做到CAP, 所以CAP紧紧是一个理论。
  • BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

参考:

  1. All Things Distributed [译]最终一致性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值