分布式系统简介与分布式一致性算法

分布式架构

集中式的特点

集中式是指一台或多台计算机组成中心节点,数据集中存储于这个中心节点中。集中式系统的最大特点是部署结构简单,不需要考虑多个节点之间的分布式协作问题。

分布式特点

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

分布式系统有以下几个特征:

  • 分布性。多台机器随意分布
  • 对等性。分布式系统中的计算机没有主从之分。分布式系统会对数据和服务提供一种冗余方式,也就是副本的概念。
  • 并发性。如何准确高效的协调分布式并发操作是分布式系统架构与设计中最大的挑战之一
  • 缺乏全局时钟。因为分布式系统在空间上多个进程随机分布,因此很难判断事件的先后顺序,原因就是分布式系统缺乏一个全局的时钟序列控制。
  • 故障总是会发生。组成分布式系统的所有计算机,都有可能发生任何形式的故障。

分布式系统的问题

  • 通信异常。由于网络的不可靠性,所以可能会对节点的通信造成影响。另外网络通信会带来延迟的问题。
  • 网络分区。当网络延时不断增大时,可能会出现只有部分节点能正常通信的情况,这样就出现了局部小集群的现象。这样对于分布式一致性提出了非常大的挑战。
  • 三态。三态是指分布式系统在请求与响应过程中出现的成果、失败与超时三种情况。但是如果网络发生异常,还可以出现请求消息丢失或者响应消息丢失的情况,这样的话就无法确定请求是否被成果处理
  • 节点故障。指分布式系统服务器节点出现宕机或“僵死”现象

从ACID到CAP/BASE

事务的四个特性:ACID

  • 原子性。原子性指事务的各项操作要么全部成果执行,要么不执行。
  • 一致性。指事务的执行不能破坏数据库的完整性和一致性。
  • 隔离性。指事务在并发的环境中,一个事务的执行不能被其他事务干扰。
  • 持久性。指一个事务一旦提交,对数据库中对应数据的状态变更就应该是永久性的。

事务的四个隔离级别

  • 未授权读取(读未提交,Read Uncommitted)。指一个事务在处理某数据时,在事务尚未完成的情况下允许另一事务访问改数据。其他事务可以看到这一事务的中间数据并且可以读取。
  • 授权读取(读已提交,Read Committed )。与未授权读取比较接近,区别在于授权读取只允许获取已经被提交的数据。
  • 可重复读取(Repeatable Read)。就是保证在事务处理过程中,多次读取同一个数据时,其值和事务开始时刻是一致的。
  • 串行化(Serializable)。串行化要求所有事务都串行执行,不能并发执行,是最严格的隔离级别。

分布式系统简介与分布式一致性算法_第1张图片

隔离级别 脏读 可重复读 幻读
未授权读取 存在 不可以 存在
授权读取 不存在 不可以 存在
可重复读取 不存在 可以 存在
串行化 不存在 可以 不存在

CAP/BASE理论

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。

为了构建一个兼顾可用性与一致性的分布式系统,出现了诸如CAP和BASE这样的分布式经典理论。

CAP定理

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

  • 一致性。指数据在多个副本之间是否能够保持一致的特性。
  • 可用性。指系统提供的服务一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
  • 分区容错性。分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络都发生了故障。

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。核心思想是即使无法做到强一致性,也可以采用适当的方式使系统达到最终一致性。

  • 基本可用。指出现不可预知故障时,允许损失部分可用性。比如响应时间上的损失或功能上的损失。
  • 弱状态。指允许系统中的数据存在中间状态。即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
  • 最终一致性。最终一致性强调最终数据能达到一直,而不需要实时保证数据的强一致性。

一致性协议

分布式系统中引入了“协调者(Coordinator)”组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为“参与者(Participant)”。

2PC(二阶段提交协议)

二阶段提交协议分为投票和执行两个阶段。

投票阶段:协调者向所有参与者发送事务内容,询问是否可以执行,各参与者执行事务,并将Undo和Redo信息记入事务日志中,然后给协调者返回响应。

执行阶段:如果所有参与者都返回yes响应就会执行事务提交。协调者向所有参与者发送Commit请求,参与者完成事务提交并释放资源后向协调者发送Ack消息,协调者收到所有ack消息后完成事务。

中断事务:如果协调者收到了no响应,或者等待超时,就会中断事务。协调者向所有参与者发送Rollback请求,参与者利用Undo信息执行回滚,并向协调者发送Ack,协调者收到所有ack消息后完成事务中断。

二阶段提交的方式存在下面几个问题:

1、同步阻塞。参与者在等待其他参与者响应的过程无法进行其他操作。

2、单点问题。一旦协调者出现问题,就无法继续完成事务操作。

3、数据不一致。在阶段二也就是执行阶段,如果发生局部网络异常,部分参与者可能没有完成Commit。

4、太过保守。没有容错机制,任何一个节点的失败都会导致整个事务的失败。

3PC(三阶段提交协议)

三阶段提交协议将二阶段提交协议的“提交事务请求”过程一分为二,形成了由CanCommit、PreCommit、do Commit三个阶段组成的事务处理协议。

阶段一:CanCommit。协调者向所有参与者发送事务内容的CanCommit请求,参与者返回是否能够执行的响应。

阶段二:PreCommit。这一阶段分为两种情况。一是所有的参与者都返回yes,就会执行事务预提交。协调者向所有参与者发送PreCommit请求,参与者执行事务操作并将Undo和Redo信息记录到事务日志中,参与者成果执行就返回ack消息并等待最终指令:提交(commit)或终止(abort)。二是如果有参与者返回no或者协调者等待超时,进入事务中断流程。协调者向所有参与者发送abort请求,参与者收到abort请求或者等待超时就会中断事务。

阶段三:do Commit。这一阶段也有两种情况。一是协调者正常工作并且收到所有参与者的ack消息,就会从“预提交”状态转换到“提交”状态,并向所有的参与者发送“doCommit”请求。然后就是参与者执行事务,发送ack,协调者完成事务。二是有参与者发送no或者等待超时,协调者会向所有参与者发送abort请求,参与者利用Undo执行回滚然后发送ack,最后完成事务中断。

阶段三可能会出现协调者出现问题或者网络故障,这时参与者会在等待超时后继续进行事务提交。

三阶段提交协议优点:降低了参与者阻塞范围,能够在出现单点故障后继续达成一致。

缺点:参与者收到PreCommit消息后,如果出现网络分区,参与者依然会进行事务提交,这种情况会出现数据不一致。

Paxos算法

Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

算法原理参考:Paxos算法原理与推导

你可能感兴趣的:(大数据,数据库,hive,分布式,大数据,zookeeper)