《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC

2024-05-28 04:18

本文主要是介绍《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

两种角色:
参与者(Participant): 被调度的分布式节点
协调者(Coordinator):同意调度所有分布式节点的执行逻辑,并最终决定参与者是否把事务真正进行提交。


一、两个阶段
         2PC就是把事务的提交郭晨共分为两个阶段进行处理
         (1)提交事务请求
                   也成为“投票阶段”, 即各参与者投票标明是否要继续执行接下去的事务提交操作。
                   (i) 协调者向参与者发送事务内容,询问是否可以提交并等待各参与者响应
                   (ii)执行事务:参与者执行操作写日志(包括undo redo等)
                   (iii)各参与者想协调者返回事务询问的响应。 (参与者成功执行事务操作)?Yes:No
         (2)执行事务提交
                   (i)发送提交请求:协调者向所有参与者发送commit请求
                   (ii)参与者收到commit请求,会执行事务提交。提交后,释放事务资源
                   (iii)参与者向协调者返回事务提交结果(Ack消息)
                   (iv)完成事务:协调者收到所有参与者反馈的Ack消息后,完成事务。

二、中断事务
         任何一个参与者向协调者发送了No响应,或者在等待超时之后,协调者无法收到所有参与者对的反馈响应,就会中断事务
         (1)协调者向所有参与者发送回滚请求
         (2)事务回滚:利用undo日志信息,回滚完之后释放执行事务期间占用的资源
         (3)中断事务:协调者收到所有参与者反馈的Ack,完成事务中断


三、缺点
         (1)同步阻塞
                   所有参与该事物操作的逻辑都出于阻塞状态:各个参与者等待其他参与者响应过程中,无法进行其他操作
         (2)单点问题
                   协调者出现问题后果严重。 如果是阶段二出现问题,其他参与者会一直处于锁定事务资源的状态,无法继续完成事务。

         (3)数据不一致
                   如果协调者发送Commit请求,但是发生局部网络异常或者协调者未发完就出现故障,导致最终只有部分参与者收到Commit并提交,于是分布式系统数据不一致
         
         (4)保守。
                   参与者出现故障,协调者无法获得所有参与者的响应信息的时候,参与者只能靠超时机制判断是否需要中断事务。没有完善的容错机制,任意一个节点失败都会导致整个事务的失败。












这篇关于《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009522

相关文章

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

MySQL中的两阶段提交详解(2PC)

《MySQL中的两阶段提交详解(2PC)》:本文主要介绍MySQL中的两阶段提交(2PC),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言两阶段提交过程sync_binlog配置innodb_flush_log_at_trx_commit配置总结引言在Inn

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my