金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(上篇)

简介: 金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(上篇)

背景介绍

最近大家都相比遇到了就业瓶颈了,很多公司要不就是不招人了,要不就是把门槛抬的很高,所以针对于一些分布式角度而言的技术知识点,更是必备条件以及重中之重了。那么今天笔者就针对于分布式协议以及一些算法原理进行详细的分析和原理介绍。

分布式体系

分布式体系管理的主要内容是面对于分布式节点进行执行事务的操作流程。



整个分布式体系主要包含了几个要素:

  • 分布式节点
  • 本地操作
  • 分布式组合操作

如何可以将分布式节点的每个本地操作达成整齐划一,并且实现统一化的数据状态管理,这将是分布式协议 的重点管理目标和方向。

执行失败状态将会不一致

但是如果一旦出现了其中某一个节点的本地执行出现错误,如下图所示。



就会出现很严重的问题,导致分布式节点的执行不完整,最终造成了数据状态不一致的问题。

分布式协议(2PC+3PC)

每一个分布式节点明确的知道自己执行的事务结果是成功还是失败,但无法知道其他节点的执行结果, 因此为了保持事务的ACI特性, 需要引入一个“协调者”(Coordinator)来调度所有的分布式节点称为“参与者”(Participant) 。基于这种思想衍生出了二阶提交与三阶提交两种协议。

二阶提交(Two-Phase Commit,2PC)

概念介绍

使基于分布式架构下的所有节点在进行事务处理过程中保持原子性与一致性而设计的一种算法。

执行流程

  • 阶段一:提交事务请求
  • 阶段二:执行事务提交


阶段一:提交事务请求

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


  1. 执行事务:各参与者节点执行事务操作, 并将undo与redo信息写入事务日志中。

  1. 各参与者向协调者反馈事务询问的响应如果参与者成功执行了事务, 就返回YES,如果不成功,就返回NO。

该阶段相当于各个参与者对协调者发送的事务内容进行是否可以执行的投票。

阶段二:执行事务提交

根据参与者的响应,正常情况下有两种情况:

  • 成功:YES
  • 失败:NO
执行事务提交(响应都为YES)
  1. 发送提交请求
  2. 事务提交,协调者向所有参与者节点发出Commit请求,参与者接收到Commit请求后,会正式执行事务提交操作,并在完成后释放事务,执行期间占用的资源
  3. 反馈事务提交结果,参与者完成事务提交以后,向协调者发送Ack消息
  4. 完成事务,收到所有参与者节点的Ack消息后,完成事务


中断事务(响应有NO,或有超时)
  1. 发送回滚请求,协调者向所有参与者节点发出Rollback请求
  2. 事务回滚,参与者接收到Rollback请求后,会根据undo信息执行执行事务回滚操作,并在完成后释放事务执行期间占用的资源。
  3. 反馈事务回滚结果,参与者完成事务回滚以后,向协调者发送Ack消息。
  4. 中断事务,收到所有参与者节点的Ack消息后,完成事务中断


优点

  • 原理简单
  • 实现方便

缺点

同步阻塞(性能较差)

在二段提交过程中,所有参与该事务操作的逻辑都处于阻塞状态,也就是各个参与者在等待其他参与者响应的过程中都无法执行其他操作。

单点问题(容易造成崩溃)

协调者的角色在整个二段提交协议中起到了非常重要的作用,如果协调者出现问题,参与者将锁定事务资源无法继续完成事务操作。

数据不一致(在二阶段的问题)

在阶段二过程中, 有可能因为网络等原因出现只有部分参与者收到了Commit请求。而出现各个节点数据不一致的问题。

从太过保守

没有容错机制,任何一个节点的失败都会导致整个事务的中断。


三阶提交(Three-Phase Commit,3PC)

概述

2PC的改进版本,将2PC二阶段提交的过程一分为二, 形成了Can Commit, Pre Commit, Do Commit三个阶段组成的事务协议。


Can Commit阶段

1. 事务询问

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

2.各参与者向协调者反馈事务询问的响应

如果参与者认为可以顺利执行事务, 就反馈YES, 并进入预备状态, 否则反馈NO


该阶段相当于各个参与者对协调者发送的事务内容进行是否可以执行的投票

Pre Commit阶段

根据参与者的响应,正常情况下有两种情况:

1. 执行事务提交(响应都为YES)

  1. 发送预提交请求,协调者向所有参与者节点发出pre Commit请求, 并进入prepared阶段
  2. 预事务提交,参与者接收到Pre Commit请求后, 会执行事务, 并将undo与redo信息写入事务日志中
  3. 反馈事务提交结果,参与者完成事务提交以后, 向协调者发送Ack消息, 等待最终的指令:提交(Commit)或终止(abort)


2. 中断事务(响应存在NO,或有超时)

  1. 发送回滚,请求协调者向所有参与者节点发出abort请求
  2. 中断事务,收到所有参与者节点的Ack消息后, 或者等待协调者响应超时, 都会中断事务

Do Commit阶段

根据参与者的响应,正常情况下有两种情况:

执行提交(响应都为YES)

  1. 发送提交请求,协调者向所有参与者节点发出do Commit请求
  2. 事务提交,参与者接收到do Commit请求后, 会正式执行事务, 并在完成后释放事务执行期间占用的资源
  3. 反馈事务提交结果,参与者完成事务提交以后, 向协调者发送Ack消息
  4. 完成事务,收到所有参与者节点的Ack消息后, 完成事务


中断事务(二阶段提交后,参与者响应有NO, 或有超时)

  1. 发送回滚请求,协调者向所有参与者节点发出abort请求
  2. 事务回滚,参与者接收到abort请求后, 会根据undo信息执行事务回滚操作, 并在完成后释放事务执行期间占用的资源
  3. 反馈事务回滚结果,参与者完成事务回滚以后, 向协调者发送Ack消息
  4. 中断事务,收到所有参与者节点的Ack消息后, 或者等待协调者响应超时, 都会中断事务


优点

降低了二阶段提交的阻塞范围。

缺点

  • 参与者收到pre Commit消息后, 一旦无法与协调者通信, 将在超时后提交事务, 在这种情况下,可能会出现数据的不一致性
  • 协调者出现故障,协调者与参与者之间的网络出现故障(旦参与者接收不到协调者的请求超时以后,都会进行事务提交)

敬请期待: 【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(下篇)

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
运维 负载均衡 微服务
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
533 7
|
10月前
|
存储 运维 监控
120_检查点管理:故障恢复 - 实现分布式保存机制
在大型语言模型(LLM)的训练过程中,检查点管理是确保训练稳定性和可靠性的关键环节。2025年,随着模型规模的不断扩大,从百亿参数到千亿参数,训练时间通常长达数周甚至数月,硬件故障、软件错误或网络中断等问题随时可能发生。有效的检查点管理机制不仅能够在故障发生时快速恢复训练,还能优化存储使用、提高训练效率,并支持实验管理和模型版本控制。
712 5
120_检查点管理:故障恢复 - 实现分布式保存机制
|
10月前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。
2264 0
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
677 0
园区导航系统技术架构实现与原理解构
|
存储 消息中间件 canal
zk基础—2.架构原理和使用场景
ZooKeeper(ZK)是一个分布式协调服务,广泛应用于分布式系统中。它提供了分布式锁、元数据管理、Master选举及分布式协调等功能,适用于如Kafka、HDFS、Canal等开源分布式系统。ZK集群采用主从架构,具有顺序一致性、高性能、高可用和高并发等特点。其核心机制包括ZAB协议(保证数据一致性)、Watcher监听回调机制(实现通知功能)、以及基于临时顺序节点的分布式锁实现。ZK适合小规模集群部署,主要用于读多写少的场景。
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
548 9