[从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议

Overview

  • 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议。
  • 为解决分布式一致性问题,在长期的探索过程中,涌现了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法了。

2PC与3PC

  • 分布式系统中,每个机器节点虽然都能明确知道自己在进行事务操作过程中的结果是失败or成功,但却无法直接获取到其他分布式节点的操作结果。
  • 因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为“协调者(Coordinator)”的组件来统一调度所有分布式节点的执行逻辑。而被调度的分布式节点则被称为“参与者(Participant)”。
  • 协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务真正进行提交。基于该思想,衍生出了二阶段提胶片和三阶段提交两种协议。

2PC

  • 2PC,即Two-Phase Commit。是计算机网络尤其是数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性设计的一种算法。
  • 简单来说,就是将一个事务的处理过程分为了投票和执行两个阶段。

协议说明

  • 阶段一:提交事务请求:

    1. 事务询问:协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应;
    2. 执行事务:各参与者执行事务操作,并将Undo和Redo信息记入事务日志;
    3. 各参与者向协调者反馈事务询问的响应:
  • 阶段二:执行事务提交:
    协调者根据各参与者的反馈情况来决定最终是否可以进行事务提交操作。
    • 执行事务提交

      1. 发送提交请求:协调者向所有参与者节点发出Commit请求;
      2. 事务提交
      3. 反馈事务提交结果:参与者完成事务提交后,向协调者发送Ack
      4. 完成事务
    • 中断事务
      1. 发送回滚请求:协调者向所有参与者节点发出Rollback请求;
      2. 事务回滚:参与者利用其在阶段一中记录的Undo信息来执行回滚操作;
      3. 反馈事务回滚结果
      4. 中断事务

优缺点:

  • 优点:原理简单,实现方便
  • 缺点:同步阻塞,单点问题,脑裂,太过保守。
    • 同步阻塞:2PC最大的问题,会极大地限制分布式系统的性能。因为在2PC执行过程中,所有该事务操作的逻辑都处于阻塞状态,也就是说,各个参与者在等待其他参与者响应的过程中将无法进行其他任何操作。
    • 单点问题:一旦协调者出现问题,整个2PC都无法运转。更严重的是,如果协调者在phase2中出现问题的话,那么其他参与者将会一直处于锁定事务资源的状态中,而无法继续完成事务操作。
    • 数据不一致:在phase2,如果协调者向所有的参与者发送Commit请求之后,发生了局部网络异常或是协调者在尚未发送完Commit请求之前自身发生崩溃,最终导致只有部分参与者收到了Commit请求,那么整个分布式系统就会出现数据不一致现象。
    • 太过保守:当协调者无法获取参与者的响应信息时,协调者只能依靠其自身的超时机制来判断是否需要中断事务,这样的策略过于保守。换句话说,2PC提交协议没有涉及较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败。

3PC

协议说明

  • Three-Phase Commit是2PC的改进版。
  • 3PC是有CanCommit、PreCommit和DoCommit三个阶段组成的事务处理协议
时间: 2024-08-05 16:30:01

[从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议的相关文章

《从PAXOS到ZOOKEEPER分布式一致性原理与实践》pdf

下载地址:网盘下载 内容简介  · · · · · · <Paxos到Zookeeper:分布式一致性原理与实践>从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:第一

《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载

内容简介 Paxos到Zookeeper分布式一致性原理与实践从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议.同时,本书深入介绍了分布式一致性问题的工业解决方案--ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法.内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper.全书共8章,分为五部分:前一部分(第1章)主要介绍了计算机系统从集中式向分布式系统

[从Paxos到ZooKeeper][分布式一致性原理与实践]&lt;一&gt;

目录 分布式架构 从集中式到分布式 从ACID到CAP/BASE 一致性协议 2PC与3PC Paxos算法 Paxos的工程实践 Chubby Hypertable Zookeeper与Paxos 初始Zookeeper Zookeeper的ZAB协议 使用Zookeeper 部署与运行 客户端脚本 Java客户端API 开源客户端 Zookeeper的典型应用场景 Zookeeper技术内幕 系统模型 序列化与协议 科幻端 会话 服务器启动 leader选举 ... Zookeeper运维

2月22日 《从Paxos到Zookeeper 分布式一致性原理与实践》读后感

工作中使用的场景: 工作中使用dubbo微服务,其中注册中心是由zk提供的,于是课余时光就读了此本zk经典之作 节点名为java接口的类名 节点下包括了服务提供者,消费者等子节点 提供者: 消费者: 由于是最底层微服务,所以消费的注册的比较多 zk的特点: 分布式一致性的解决方案,包括:顺序一致性,原子性,单一视图,可靠性,实时性 zk的基本概念: 集群角色:not Master/Slave,is Leader/Follower/Observer 会话:TCP长连接 数据节点(Znode) 版本

&lt;从PAXOS到ZOOKEEPER分布式一致性原理与实践&gt;读书笔记-ZAB协议

本文属于分布式系统学习笔记系列,上一篇笔记整理了paxos算法,本文属于原书第四章,梳理zookeeper的目标特性及ZAB协议. 1.介绍zookeeper 1.1ZooKeeper保证一致性特性 ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调通知.集群管理.master选举.分布式锁.分布式队列等功能.ZooKeeper可以保证如下分布式一致性特性. 1.顺序一致性: 从同一个客户端发起的事务请求,最终将严

&lt;从PAXOS到ZOOKEEPER分布式一致性原理与实践&gt;读书笔记-两阶段提交与三阶段提交

一.背景 本书第一章的分布式架构,写了从单机的acid到分布式的CAP.参见之前的文章.本篇是第二章的一致性协议部分,分两篇整理. 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上.为了对用户提供正确的增\删\改\查等语义,我们需要保证这些放置在不同物理机器上的副本是一致的. 为了解决这种分布式一致性问题,有很多经典算法:如二阶段提交.三阶段提交,paxos算法. 二.二阶段提交(2PC) 二阶段提交(Two-phaseC

《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很难定义两个事件谁先谁后 故障总是会发生.系统设计时,需要考虑到任何异常情况 2.分布式环境的各种问题 通信异常.分布式系统中的某些节点之间无法正常通信 网络分区.这有部分节点可以正常通信,有些无法正常通信.这种现象称为网络分区,也称为"脑裂" 三态.节点之间的一次通信存在三种状态:成功.失

从Paxos到Zookeeper 分布式一致性原理与实践(一)

1.分布式一致性问题 假设客户端C1将系统的K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间才能读取到.-------数据库之间复制的延迟问题. 数据复制需求:1.为了增加系统的可用性,以防止单点故障引起的系统不可用.2.提高系统的整体性能,通过负载均衡技术,能够让分布在不同地方的数据副本都能够为用户提供服务. 所谓分布式一致性问题,是指分布式环境中引入数据复制机制后,不同数据节点间可能出现的,并无法依靠计算机应用程序自身解决的数据不一致情况.简单地讲,数据一致性就是指在

zookeeper 分布式锁原理:

1 大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高.利用基于google chubby原理开发的开源的zookeeper,可以使得这个问题变得简单很多.下面介绍几种可能的实现方式,并且对比每种实现方式的优缺点. 1. 利用节点名称的唯一性来实现共享锁 ZooKeeper抽象出来的节点结构是一个和unix文件系统类似的小型的树状的目录结构.ZooKeeper机制规定:同一个目录下只能有一个唯一的文件名.例