二段提交协议、三段提交协议

2024-04-25 12:38
文章标签 协议 提交 三段 二段

本文主要是介绍二段提交协议、三段提交协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、二段提交协议

2pc
提交事务阶段------投票阶段
协调者发起事务请求到所有的参与者,参与者接收到事务请求后判断自身情况,如果不能执行事务,则反馈不能提交事务,返回NO,如果可以就执行事务,并将undo和redo信息记录事务日志中,反馈Yes

执行事务阶段
协调者收到所有参与者反馈Yes就发布commit命令,否则如果超时未收到或者收到NO 那么发布回滚命令。

参与者收到commit的请求后正式提交事务操作,提交后释放资源。完成事务后向协调者发送ack消息  协调者收到所有参与者的ack后完成事务。

参与者收到rollback的请求查找undo记录,完成回滚后释放资源。完成事务后向协调者发送ack消息  协调者收到所有参与者的ack后中断事务。

优点:原理简单,实现方便

缺点:同步阻塞,单点问题,脑裂问题,太过保守--超时机制,数据不一致---第二阶段部分事务提交。

2、三阶段提交协议

3pc

第一阶段

cancommit

1、协调者向所有参与者发布包含事务内容的canCommit命令,等待参与者回应。

2、参与者认为自身能执行,则返回yes。否则返回NO

第二阶段

preCommit阶段

1、如果协调者收到的反馈都是yes,那么发出preCommit命令,进入prepared阶段,参与者收到preCommit命令后,执行事务操作。并写入undo和redo信息到事务日志中。然后想协调者反馈ack相应

2、如果协调者收到的返回时NO,那么发布abort命令。各参与者收到abort或者超时,都中断事务。

第三阶段,

docommit阶段

如果协调者收到所有参与者的ack相应,那么会发出doCommit命令,所有参与者收到docommit命令就提交事务,然后释放资源。向协调者发出ack。协调者收到所有参与者的ack详细后完成事务。

如果协调者收到No反馈或者超时响应后,将对所有的参与者发出abort请求。各个参与者收到abort请求后会利用undo信息回滚事务。,然后释放资源,反馈ack。协调者收到所有ack消息后,中断事务。

需要注意的是,在第三阶段如果参与者没有收到docommit命令,那么超时后它会提交事务,毕竟第一阶段所有的参与者都响应了,默认他们都能正常工作。

优缺点:

优点:即第三阶段的超时提交。降低了参与者的阻塞范围,并且能够再出现单点故障后继续达成一致。

缺点:数据可能也会不一致。也存在2pc中的缺点


这篇关于二段提交协议、三段提交协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

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

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

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