分布式事务解决方案-最大努力通知|学习笔记

简介: 快速学习分布式事务解决方案-最大努力通知

开发者学堂课程【全面讲解Spring Cloud Alibaba技术栈(知识精讲+项目实战)第五阶段分布式事务解决方案-最大努力通知】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/687/detail/11925


分布式事务解决方案-最大努力通知


内容介绍

一、基本介绍

二、基本原理

三、优缺点分析


一、基本介绍

现在学习第三种分布式事务解决方案为最大努力通知,也习惯于对其

称作定期校对。

这种方案其实是对基于可靠消息中间件的一种优化。在第二种解决方

案的基础之上引入了一个本地消息表,来记录由A系统投递消息到

中间件时未能成功投递的消息。此外又引入了一个失败消息表记录消

息中间件向B系统投递时投递失败的消息。

又引入了一个定期校对者,对失败消息进行自行的消费。但是在这样

的一个方案中有很多零碎的事物,比如本地消息表和失败消息表,而

且这些事物会与业务相偶合,并没有一个成型的方案能够解决它。这

就需要开发很多的代码,因此导致这种方案在业界并不是特别流行。

对其只要简单地了解原理即可。

image.png


二、基本原理

对此首先也是分成两个部分来了解。前面观察如何将消息由A系统

投递到中间件,后面观察如何由消息中间件发送到B系统。

1、消息由系统A投递到中间件

(1)处理业务的同一事务中,向本地消息表中写入一条记录。

这句话的意思就是一定保证的是业务处理和记录本地消息表是同时

成功,同时失败的。本地消息表中一旦有了数据就代表业务一定是成

功的。

(2)准备专门的消息发送者不断地发送本地消息表中的消息到消息中

间件,并且会等待消息中间件的一个应答,如果发送失败则重试。

一旦发现应答成功,会相应地对本地消息表作出处理。比如加上标识

或者进行删除,都是可以的。如果本地消息发送失败了,可能还会引

入重新发送的机制。

这都是消息发送者中自行写代码需要实现的。这样的话就能保证消息

最大程度地成功发送到消息中间件上。

2、消息由中间件投递到系统B

(1)消息中间件收到消息后负责将该消息同步投递给相应的下游系

统,并触发下游系统的业务处理。

(2)当下游系统业务处理成功后,向消息中间件反馈确认应答,消息

中间件便可以将该条消息删除,从而该事务完成。

(3)对于投递失败或者是未应答的消息,对于中间件来讲就会将消息

保存到失败消息表中,并且对于表中的数据利用重试机制进行多次投

递。如果多次投递的结果均为失败,失败消息表就会记录这条消息。

(4)消息中间件需要提供失败消息的查询接口,下游系统会定期查询

失败消息,并将其消费。最后需要一个定期校对者,所谓的定期校对

者就是在固定时间后查询表中是否有相应的数据,如果有就自行触发

业务处理,从而对失败消息进行消费。


三、优缺点分析

1、优点

一种非常经典的实现,在最大程度上实现了最终一致性。因为各种各

样的判断和重试以及定期校对可以保证最大程度上的分布式事务一

致性。

2、缺点

消息表会偶合到业务系统中,而在业界并没有成型的方案去解决,必

须写许多的代码,比较繁琐。如果没有封装好的解决方案,会有很多

杂活需要处理。

相关文章
|
8月前
|
负载均衡 NoSQL 算法
Redisson分布式锁数据一致性解决方案
通过以上的设计和实现, Redisson能够有效地解决分布式环境下数据一致性问题。但是, 任何技术都不可能万无一失, 在使用过程中还需要根据实际业务需求进行逻辑屏障的设计和错误处理机制的建立。
401 48
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
262 5
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
362 2
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
383 0
性能监控之JMeter分布式压测轻量日志解决方案
|
存储 数据管理 数据库
现代数据库技术中的分布式一致性问题与解决方案探讨
分布式系统在现代数据库技术中扮演着重要角色,但分布式环境下的数据一致性问题始终是挑战之一。本文深入探讨了分布式一致性的核心概念、各种一致性模型的特点及其在实际应用中的优缺点,旨在为技术从业者提供全面的视角和实用的解决方案。