天天看点

【笔记】分布式系统的一致性问题一、分布式系统一致性概述二、三个重要定理

文章目录

  • 一、分布式系统一致性概述
    • 1.分布式系统一致性的概念与模型
  • 二、三个重要定理
    • 1.FLP定理及意义
    • 2.CAP定理及应用
    • 3.BASE定理
    • 4. ACID

一、分布式系统一致性概述

1.分布式系统一致性的概念与模型

  所谓一致性,是指数据要完整、要同步。在一个中心化的系统中,数据的结果或者状态总是一致而同步的,即便这些系统的服务器不止一台,但哦度属于同一中心集群,在内部是可以高效一致而同步的。而对于分布式系统,首要问题就是如何解决一致性的问题,即如何在多个独立的节点之间达成共识,如区块链系统就是分布式的体系。

  一致性模型:

  (1)强一致性。当更新操作完成之后,任何多个后续进程或线程的访问都会返回最新的更新过的值。

  (2)弱一致性。系统并不保证后续进程或者线程的访问都会返回最新的更新股的值。

  (3)最终一致性。是弱一致性的特定形式,系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。DNS是一个典型的最终一致性系统。

  最终一致性模型的变种:

  (1)因果一致性。如果A进程在更新之后向B进程通知更新的完成,那么B的访问操作将会返回更新的值。如果没有因果关系的C进程将会遵循最终一致性的规则。

  (2)读己所写一致性。是因果一致性的特定形式,一个进程总可以读到自己更新的数据。

  (3)会话一致性。是读己所写一致性的特定形式,进程在访问存储系统同一个会话内,系统保证该进程读己之所写。

  (4)单调读一致性。如果一个进程已经读取到一个特定值,那么该进程不会读取到该值以前的任何值。

  (5)单调写一致性。系统保证对同一个进程的写操作串行化。

  上述最终一致性的不同方式可以进行组合。

  分布式系统一致性问题非常难解决的原因:

  (1)分布式系统本身可能出故障;

  (2)分布式系统之间的通信可能有故障或者有巨大的延迟;

  (3)分布式系统中,有些子系统或环节运行很快,有些则很慢,所以导致整个系统运行的速度可能大不相同。

  传统处理一致性问题的方法有两段式、令牌环、时间戳等。

  分布式系统一般希望其具备以下能力:

  (1)系统作为一个逻辑整体,不应该返回错误的结果;

  (2)只要系统里的大部分机器工作正常,整个系统就能有效运行,这也是分布式系统抵抗单点故障的一个优点;

  (3)对于分布式系统来说,总体效能的大小并不取决于个别节点的抵消或失效,即木桶原理失效,所以其系统的性能是可以横向扩展的;

  (4)系统中的每个节点可以按照自己的时序独立工作,没有统一的时间顺序,即分布式系统必须是异步的。

二、三个重要定理

1.FLP定理及意义

  FLP定理:指在可靠网络中,存在节点失效的最小化异步模型系统中,不存在一个可以解决一致性问题的确定型算法。

  即不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法,在允许结点失效的情况下,纯粹异步系统无法确保一致性在有限时间内完成。

2.CAP定理及应用

  CAP定理:指在一个分布式系统中,不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition-Tolerance)这3个基本需求,只能同时满足其中的2个。

  一致性:分布式系统中的所有数据备份,在同一时刻是同样的值,并等同于所有结点访问同一份最新的数据副本。

  可用性:在有限的时间内,确保每个请求都可以收到确定其是否成功的响应。

  分区容忍性:实际中通信产生延时,系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C点和A点之间做出选择。

  CAP定理的应用:

  放弃P:如果放弃P后想避免出现分区容错问题,简单做法就是将所有的数据都放在一个分布式节点中。

  放弃A:放弃A后一旦出现网络分区或者其他故障,受影响的服务就需要等待恢复,并在此期间不能对外提供服务。

  放弃C:放弃一致性不是完全放弃,而是放弃数据的强一致性,而只保留数据的最终一致性。

  设计分布式系统,就是在一致性和可用性之间寻找一个平衡点。对于大多数应用而言,并不需要强一致性,因此牺牲一致性而换取高可用性是目前多数分布式数据库产品的方向。通常来说,可以通过数据的多份异步复制来实现系统的高可用性和数据的最终一致性,用户能感知到一致性的时间窗口则取决于数据复制到一致状态的时间。

3.BASE定理

  BASE定理的核心思想是:即使无法做到强一致性,但应用可以采用适合的方式达到最终一致性。

  BASE定理包含以下三个方面的内容:

  (1)基本可用:是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

  (2)软状态:指允许系统存在中间状态,而该中间状态不会影响系统的整体可用性。

  (3)最终一致性:是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

4. ACID

  ACID是指数据库系统 在写入或更新资料的过程中,为保证事务是正确可靠的,必须具备原子性、一致性、隔离性和持久性。

  原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

  一致性:在事务开始之前和事务结束之后,数据库的完整性没有被破坏。

  隔离性:数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

  持久性:事务处理结束后,对数据的修改是永久性的,即便系统故障也不会丢失。

  BASE定理支持大型分布式系统,并提出通过牺牲强一致性获得高可用性。

  

注:事务隔离分为不同级别:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable)。

继续阅读