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

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

背景介绍

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

分布式体系

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



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

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

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

执行失败状态将会不一致

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



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

分布式协议(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
相关文章
|
22天前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
442 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
1月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
201 1
|
2月前
|
负载均衡 算法 调度
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
132 11
|
3月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
612 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
1月前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。
|
2月前
|
算法 安全 Python
【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
|
2月前
|
传感器 机器学习/深度学习 算法
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
|
2月前
|
并行计算 算法 调度
基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)
基于串行并行ADMM算法的主从配电网分布式优化控制研究(Matlab代码实现)
129 0

热门文章

最新文章