互联网电商大厂库存系统设计案例讲解

简介: 多人同时买一件商品时(假设库存充足),每个人几乎同时下单成功,给人一种并行感觉。但真实情况, 库存只是一个数值,无论是存在mysql数据库还是redis缓存,减值时都要控制顺序,只能串行来扣减,当然为保证安全性,会设计一些锁控制。

1 库存扣减


14.png

多人同时买一件商品时(假设库存充足),每个人几乎同时下单成功,给人一种并行感觉。但真实情况, 库存只是一个数值,无论是存在mysql数据库还是redis缓存,减值时都要控制顺序,只能串行来扣减,当然为保证安全性,会设计一些锁控制。


1.1 关键技术点

同一个SKU,库存数量是共享


剩余库存要大于等于本次扣减的数量,否则超卖


对同一个数量多用户并发扣减时,要注意并发安全,保证数据的一致性


类似于秒杀这样高QPS的扣减场景,要保证性能与高可用


对于购物车下单场景,多个商品库存批量扣减,要保证事务


如果有 交易退款 ,保证库存扣减可返还


返还的数据总量不能大于扣减的总量

返还要保证幂等

可以分多次返还

1.2 数据库扣减

主要依赖数据库特性,保证扣减的一致性,逻辑简单,开发部署成本低。


1.2.1 依赖的数据库特性

依赖数据库的乐观锁(如版本号或者库存数量)保证数据并发扣减的强一致性

事务,针对购物车下单批量扣减时,部分扣减失败,数据回滚

13.png


最上面会查询当前的剩余库存(可能不准确,但没关系,这里只是第一步粗略校验),前置校验,如果已经没有库存,前置拦截生效,减少数据库写。毕竟读操作不涉及加锁,并发性能高。


2 数据库表

2.1 库存表

create table t_inventory

(

   sku_id        bigint null comment '商品规格 id',

   leaved_amount int    null comment '剩余可购买数量'

);


当用户取消订单,申请退货、退款,需将数量加回来

若商家补库存,需在此基础额外加上增量库存

2.2 流水表

create table t_inventory_flow

(

   id              bigint auto_increment comment '主键 id'

       primary key,

   sku_id          int        null comment '商品规格 id',

   order_detail_id mediumtext null comment '订单明细 id',

   quantity_trade  int        null comment '本次购买扣减的数量'

);


用于查看明细、对账、盘货、排查问题

扣减后,某些场景下做返还,也还依赖流水

2.3 单条商品的扣减SQL

update inventory

set leaved_amount = leaved_amount - #{count}

where sku_id='123' and leaved_amount >= #{count}


乐观锁实现原子性,在 where 条件里判断此次购买的数量≤剩余的数量。在扣减服务的代码,判断此 SQL 的返回值,若:


值为 1 ,表示扣减成功

否则,返回 0 ,表示库存不足,需回滚

2.4 扣减成功后,记录扣减的流水,并与订单明细记录关联


当用户归还数量时,需带回此编号,标识此次返还属于历史上的具体哪次扣减。


进行幂等控制。当用户调用扣减接口出现超时,因为用户不知道是否成功,用此编号进行重试或反查。在重试时,使用此编号进行标识防重


3 数据库扣减方案:第一次升级


极端例子:秒杀库存只有5件,活动期间峰值QPS 10W,活动结束后,上面的流水表最终只会插入5条记录,但查询QPS 10W。


所以,数据库扣减方案第一次升级主要针对 库存前置校验 模块的优化,作为前置拦截器,承载流量很大,若将流量全部压到主库,很容易把数据压垮。


考虑数据库架构升级:


12.png


采用了 读写分离 方式,新增加了一套从库,借助mysql自带的数据同步能力。 库存校验时读取从数据库。

目录
相关文章
|
2月前
|
开发框架 小程序 前端开发
私域电商小程序系统开发:提供可行的电商解决方案
私域电商小程序助广州企业融合线上线下业务,利用智能手机普及与网络技术,提供个性化购物体验。开发涉及需求分析、UI设计、前后端开发及测试上线。技术要点包括微信小程序框架、前端后端技术及安全优化。市场竞争需关注用户需求、特色服务、技术创新与合作推广。通过差异化策略抓住市场机遇。
|
4月前
|
新零售 大数据 供应链
多商户商城分销系统开发|成熟项目|案例分析
线上线下的一体化,强化了零售平台的存在感优势
|
9月前
|
JSON 搜索推荐 API
淘宝订单接口在电商行业中的重要性及其实践
随着电子商务的快速发展,电商平台已经成为人们日常生活中不可或缺的一部分。淘宝作为中国最大的电商平台之一,拥有庞大的用户群体和商家资源。为了满足商家和消费者之间的交易需求,淘宝提供了丰富的API接口,其中订单接口是其中最为重要的一部分。本文将从理论到实践,深入探讨淘宝订单接口在电商行业中的重要性,并给出相应的代码实现。
|
4月前
|
存储 JSON API
抖音订单接口在电商行业中的重要性及实践应用
随着移动互联网的快速发展,短视频平台抖音已经成为人们日常生活中不可或缺的一部分。越来越多的商家开始利用抖音平台推广和销售商品,从而实现商业变现。在这个过程中,抖音订单接口起到了至关重要的作用。本文将详细探讨抖音订单接口在电商行业中的重要性,并通过实践应用案例和代码示例,帮助读者更好地理解和应用该接口。
|
12月前
|
存储 安全 数据挖掘
外卖跑腿/同城跑腿/校园跑腿/同城配送外卖系统开发规则玩法/案例设计/逻辑方案/需求程序/源码
外卖跑腿、同城跑腿、校园跑腿和同城配送外卖系统开发,是指开发一个用于管理和协调外卖送餐和快递物品的平台或应用程序。该系统能够连接顾客、骑手和商家,提供顾客下单、骑手接单、派送商品等功能。
|
供应链 监控 API
一个优秀的电子购物平台,需要那些业务系统支撑?
根据我国商务部的统计数据,2021年度我国电子商务平台的销售额占社会消费品零售总额的比重为24.5%,可以说电子商务已经完全渗透进了我们的日常生活,甚至可以说,网络购物对全球生活方式带来了巨大的改革,那么,我们要想搭建一个合格的购物平台的时候,要有哪些业务系统在支撑呢?今天我们就来细数现在的大型电商平台跨境电商平台背后的业务系统。
|
前端开发 JavaScript NoSQL
一文看懂互联网支付系统架构
什么是支付系统?自古以来,所有的商业活动都会伴随着经济的收款与付款行为。随着时代的发展,记录收付款行为的方式不断迭代:古代的钱庄通过手工(算盘)记账,工业社会通过收银机机械记账……
478 0
一文看懂互联网支付系统架构
|
监控 算法 安全
美团点评智能支付核心交易系统的可用性实践(下)
背景 每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承担着智能支付100%的流量,内部习惯称为核心交易。因为涉及美团点评所有线下交易商家、用户之间的资金流转,对于核心交易来说:第一重要的是稳定性,第二重要的还是稳定性。
美团点评智能支付核心交易系统的可用性实践(下)
|
消息中间件 XML 缓存
美团点评智能支付核心交易系统的可用性实践(上)
背景 每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承担着智能支付100%的流量,内部习惯称为核心交易。因为涉及美团点评所有线下交易商家、用户之间的资金流转,对于核心交易来说:第一重要的是稳定性,第二重要的还是稳定性。
美团点评智能支付核心交易系统的可用性实践(上)