一种分布式事务解决方案

简介: 当业务扩展到一定程度的时候,单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行物理分区,也就是所谓的数据库分库分表,简单来说就是单一数据库变成了多个数据库,此时当一个操作同时需要操作两个数据库的时候,就需要分布式事务进行管理。

当业务扩展到一定程度的时候,单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行物理分区,也就是所谓的数据库分库分表,简单来说就是单一数据库变成了多个数据库,此时当一个操作同时需要操作两个数据库的时候,就需要分布式事务进行管理。

拆分分布式事务,交由第三方处理

这种思路来源于eBay,理解起来比较简单
此处我们举一个电商的经典例子:扣库存和更新订单数据库两个操作,其中库存数据库和订单数据库为两个独立的数据库。但是,当订单更新状态的时候进行抛出异常,那么此时的库存应该回滚数据。先上图


img_d118f340bb5997315b2c292fa0ada185.png
image.png

1、修改库存操作;
2、修改库存成功,写消息事务表;
3、如果写消息事务表,直接会滚数据,如果成功,则事务状态未待执行;
4、生产者将消息放入队列中;
5、消费者读取队列中的消息;
6、根据对应的消息,执行对应的更改订单状态的操作;
7、更改数据库;
8、将更改成功与否的状态座位放入队列中;
9、读取队列;
10、如果成功、更改本地事务表为成功状态,如果失败则A事务会滚;
当然,这种方式中,存在消息放入队列中失败的可能,即步骤4失败,所以我们需要有一个定时任务不断的扫描本地事务表中的待执行的数据,把还没处理完成的消息或者失败的消息再发送一遍。
缺点:多一个表,因为添加了一个表,业务逻辑以外会有很多其他的逻辑处理

相关文章
|
4月前
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
4月前
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
55 5
|
4月前
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
|
4月前
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
5月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
5月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
153 2
|
5月前
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
116 0
性能监控之JMeter分布式压测轻量日志解决方案
|
6月前
|
存储 NoSQL 算法
实现分布式锁的Java解决方案
实现分布式锁的Java解决方案
|
6月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
357 3