分布式事务解决方案

简介: 分布式事务解决方案


本地事务

概念

事务也就是ACID

  • 原子性
  • 一致性
  • 隔离性
  • 持久性
    我们拿A给B转账为例,在这个过程中原子性是指A钱少了,B钱多了,这件事要么都成功要么都失败;一致性是指A钱少
    B钱多了这件事情要一致;隔离性是说转账这件事情不能受到别的事务所影响;持久性是指转账成功后钱要保证到账
本地事务存在的问题

因为服务自治本地事务只能回滚自己的事务。

场景:当订单服务调用库存服务进行锁定库存的时候,如果锁库存的时候抛出了异常那么订单服务还是可以感知到,但如果库存服务锁定库存成功,但是因为网络的因素导致了调用库存服务失败了,这时候订单服务还是会抛出异常,那么订单服务进行了事务回滚但是库存已经锁了。又比如:订单服务调用库存服务成功,之后再调用用户服务保存用户积分信息,如果用户服务抛出了异常这时候虽然订单服务感知到了进行了事务回滚但是库存服务是不能做到事务回滚的,因为微服务自治。

CAP原则

C:一致性,在分布式系统中进行所有数据备份,在同一时刻是否是同样的值

A:可用性,在集群中一部分节点故障后,集群整体是否还能响应客户端的请求

P:分区容错性,不同区域的节点相互访问的时候可能会出现调用失败的情况

CAP原则是指,这三个要素最多只能实现两点,不可能三者兼顾,所以一个分布式系统要么是CP系统要么是AP系统

分布式系统中实现一致性的raft算法

CAP原则的延申概念BASE

  • 基本可用
  • 响应时间上的损失
  • 功能上的损失,将一部分用户引导到降级页面
  • 软状态,中间的一种状态
  • 最终一致性,系统中所有数据副本经过一段时间后最终一致

分布式事务的几种解决方案

2PC模式

将提交数据分成两个阶段,因此也叫二阶提交协议

柔性事务-TCC事务补偿性方案

刚性事务:遵循ACID原则,强一致性

柔性事务:遵循BASE原则,最终一致性

柔性事务-最大努力通知型方案

不停的确认是否执行成功,例如支付宝的支付案例

柔性事务-可靠消息+最终一致性方案(异步确保型)

可靠消息是指要保证mq中消息不丢失,比如:在发送消息的时候要保证消息不丢失,可以开启手动确认机制

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