zoukankan      html  css  js  c++  java
  • 分布式系统中的一致性协议

    前言

    在分布式系统设计的过程中,我们需要考虑cap理论的指导思想,如下图所示,P分区容错性,考虑到分布式系统部署在多个结点上,因此分区容错性是分布式系统的最基本要具备的。因此我们只能在一致性和可用性之间作权衡。于是就出现了很多一致性协议。著名的协议有二阶段提交协议,三阶段提交协议和Paxos算法。本文主要介绍二阶段提交协议和三阶段提交协议的理论基础。

    基本概念

    ①二阶段提交。

    2pc,是two-phase-commit的缩写,即二阶段提交。二阶段分为提交事务请求、执行事务提交。

    ②三阶段提交

    3pc,是Three-phase-commit的缩写,即三阶段提交。三阶段分为CanCommit、PreCommit、doCommit。

    ③协调者

    统一调度所有分布式节点的执行逻辑的组件叫作协调者。当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为“协调者”的组件来统一调度所有分布式节点的执行逻辑。

    ④参与者

    被协调者调度的分布式节点叫作参与者。

    2PC

    二阶段提交协议,被认为是一致性协议,用来保证分布式系统的数据一致性。二阶段提交协议顾名思义分成了两个阶段:提交事务请求、执行事务提交

    ①提交事务请求

    (1).事务询问:协调者向所有的参与者发送事务内容,询问是否可于执行事务提交操作,并开始等待各参与者的响应。

    (2).执行事务:各参与者结点执行的事务操作,并将Undo和Redo信息记入事务日志中。

    (3).各参与者向协调者反馈事务询问的响应:如果参与者成功执行了事务操作,就反馈给协调者YES的响应,表示事务可以执行;如果参与者没有成功执行了事务操作,就反馈给协调者NO的响应,表示事务不可以执行。

    ②执行事务提交

    (1).执行事务提交

    假如所有的参与者反馈的响应信息都是YES,则执行事务提交。

    (2).中断事务

    假如任何一个参与者反馈的信息是NO,或者等待超时之后,还没有收集全所有参与者的反馈信息。就会中断事务。

    小结:二阶段提交协议原理简单,实现方便。但是存在同步阻塞,单点问题,脑裂,太过保守。

    3PC

    三阶段提交协议,是二阶段提交协议的改进版,将提交事务请求的过程一分为二。形成了CanCommit、PreCommit、do Commit三个阶段组成。

    ①CanCommit

    事务询问:协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。

    各参与者向协调者反馈事务询问的响应:参与者在接收到来自协调者的canCommit请求之后,如果自身认为可以顺利执行的话,反馈YES,并且进入预备状态。否则反馈NO。

    ②PreCommit

    执行事务预提交:如果协调者从所有的参与者获得的反馈都是YES,那么执行事务预提交。

    事务中断:假如任何一个参与者反馈的信息是NO,或者等待超时之后,还没有收集全所有参与者的反馈信息。就会中断事务。

    ③do Commit

    执行提交:如果协调者接收到所有的参与者Ack响应,那么把预提交状态置为提交的状态。

    中断事务:有任意一个参与者相协调这反馈No响应。那么就会中断事务。

    小结:降低参与者的阻塞范围,并且能够在出现单点故障之后继续达成一致。

     三阶段在降低了参与者阻塞范围的同时,也引入了新的问题,在参与者接收到preCommit消息后,如果出现网络分区,此时协调者所在的节点和参与者无法进行通信,参与者依然会进行事务提交,这必然会引起数据的不一致性。

    2PC和3PC提交协议不能完全的解决一致性的问题,另外一种非常重要的且有效的算法Paxos是具有高度容错的一致性算法。

  • 相关阅读:
    (二)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    (一)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    微服务架构 SpringCloud(四)Ribbon
    微服务架构 SpringCloud(三)注册中心集群篇
    微服务架构 SpringCloud(二)Eureka(服务注册和服务发现基础篇)
    微服务架构 SpringCloud(一)组件和概念介绍
    企业分布式微服务云SpringCloud SpringBoot mybatis (十四)服务注册(consul)
    20 TextView显示阴影
    19 shape
    18 手动发广播扫描sd卡
  • 原文地址:https://www.cnblogs.com/sunshine798798/p/9739291.html
Copyright © 2011-2022 走看看