SafeInventory- 如何高效扣减库存
SafeInventory-本地事务下,如何安全操作库存 SafeInventory-分布式事务下,如何安全操作库存 在以上2篇文章中,已经详细说明了 本地事务下通过数据库乐观锁、数据库悲观锁、分布式锁 实现安全扣减库存 分布式事务下,通过预扣库存方案 实现安全扣减库存以上所有方案,其处理逻辑均依赖于数据库, 在高并发场景下会遇到 DB 层面带来的性能瓶颈。 面对数据库带来的性能瓶颈问题...
SafeInventory-本地事务下,如何安全操作库存 SafeInventory-分布式事务下,如何安全操作库存 在以上2篇文章中,已经详细说明了 本地事务下通过数据库乐观锁、数据库悲观锁、分布式锁 实现安全扣减库存 分布式事务下,通过预扣库存方案 实现安全扣减库存以上所有方案,其处理逻辑均依赖于数据库, 在高并发场景下会遇到 DB 层面带来的性能瓶颈。 面对数据库带来的性能瓶颈问题...
在SafeInventory-分布式事务下,如何安全操作库存,一文中已经详细说明在本地事务下如何安全操作库存。 本文将继续讨论在分布式事务下, 如何安全操作库存。 在购物场景下,库存扣减是一个典型的分布式事务,通常涉及三个系统:订单系统、库存系统和支付系统。其交互流程如下: 订单系统请求扣减库存:在用户下单时,订单系统首先向库存系统请求扣减库存,只有在确认有足够库存的情况下,订单才会创建成...
库存是许多业务场景中都会涉及的概念,比如购物场景中的商品库存,以及营销场景中的优惠券库存。不同的业务场景有各自的交互流程,后端设计也会随之不同。 购物场景:用户必须完成支付才能真正拥有商品。因此,库存的扣减需要与支付流程紧密结合,并与其他系统交互协调,确保在支付成功后才正式扣减库存。 营销场景:用户通常只需点击领取按钮即可获得优惠券,而不需要支付。这种情况下,库存的扣减操作可以通过一个简...
1. 什么是幂等在系统设计中,“幂等”是一种非常重要的概念。 幂等性(Idempotency)指的是一个操作无论执行多少次,其结果都应保持一致,和只执行一次的结果相同。 这在分布式系统、网络请求和服务接口中尤为重要,因为它可以确保系统的数据一致性。 2. 为什么会出现重复请求重复请求在系统设计中是一个常见的问题,尤其是在高并发和分布式环境中。 出现重复请求的原因有多种,包括用户操作、业务逻辑...
理解了Spring事务实现原理, 现在来解决一个实际问题。 在实际业务开发中,我们经常会遇到在一个事务内执行多个业务操作保证原子性, 同时希望这段逻辑是并发安全的。 比如在商品售卖场景中,非常重要的一件事就是防止超卖,且要保证多个业务操作之间的原子性。以下示例代码,明显会出现超卖问题(查询是否有库存时有库存并不代码真正扣减库存时还有库存,假设扣减库存时SQL 中没有乐观锁) 12345678...
1. 数据库事务1.1 数据库事务实现原理Spring提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的。要想深入了解Spring的事务管理和配置,有必要先学习数据库事务的基础知识。有需要可以阅读以下文章Intro to 事务Intro to InnoDB事务InnoDB事务-原子性的实现, undo logInnoDB事务-隔离性的实现, MVCC &a...
在MySQL InnoDB 这个语境下, crash safe、数据不丢失 都指的是事务的持久性特性,即事务一旦提交,应当保证所有被成功提交的数据修改都能够正确地被持久化,不丢失数据, 即使宕机也能够恢复数据 在InnoDB 中,持久性 基于binlog 和redo log 实现, 且binlog 与redo log 的写入通过2PC 协调. 0 XA 事务:binlog 和redo log...
隔离性,还有一个说法就是 数据可见性。 隔离性、数据可见性是一个在并发事务下才需要考虑的问题,并发事务可以分3种情况考虑 读-读, 读操作不会对数据产生影响,所以不需要关注 读-写 or 写-读, 可能会出现脏读、不可重复读、幻读 写-写,可能会脏写的情况 并发事务下的数据的一致性写问题 脏写:一个事务修改了另一个未提交事务修改过的数据。 并发事务下的数据的一致性读问题 脏读:事务...
原子性指的是事务要么完全成功执行,要么完全失败回滚,不允许部分执行。 这本质上是在要求具有rollback 回滚能力。 InnoDB中的事务可能会由用户主动触发Rollback;也可能因为遇到死锁异常Rollback;或者发生Crash,重启后对未提交的事务回滚。 InnoDB 的 rollback回滚能力 是基于 undo log 实现的。undo log 记录了修改操作前的旧版本数据,以...
在Intro to 事务中介绍过, 一致性是事务的核心特征,或者说最终目的,原子性、隔离性和持久性都是实现一致性的手段。 所以在介绍InnoDB 事务时,主要介绍AID 特性的实现InnoDB事务-原子性的实现, undo logInnoDB事务-隔离性的实现, MVCC & 锁InnoDB事务-持久性的实现, binglog & redo log&undo log ...