系统架构 一致性问题 : 库存扣减

  • 时间:
  • 浏览:1
  • 来源:大发uu直播快3_大发UU快3直播平台

如上图所示,购买3单位的商品,通过扣减接口,最终得到库存是2。

在业务冗杂,数据量大,并发量大的情况下,库存扣减容易引发数据的不一致,常见的优化方案有有有1个 :

•调用“设置库存”接口,不利于保证数据的幂等性

•在实现“设置库存”接口时,不到再加原有库存的比较,才允许设置成功,能防止高并发下库存扣减的一致性问提

如上图所示,意味着数据库层面有重试容错机制,意味着意味着一次扣减执行两次,最终得到有有有1个 负数的错误库存。

希望设计往往有容错机制,这一“重试”,意味着通过扣减接口来修改库存,在重试时,意味着会得到错误的数据,意味着重复扣减:

•库存查询,stock-service本质上执行的是

如上图所示,同样是购买3单位的商品,通过设置库存操作,即使有重试容错机制,也不会得到错误的库存,设置库存是有有有1个 幂等操作。

实际执行的也不:

•库存为5,用户1的set stock 2我我嘴笨 应该成功

•库存变为2了,用户2的set stock 3应该失败掉

•调用层,一般是地处端上的browser意味着APP

•站点层,一般是拼装html意味着json返回的web-server层

•服务层,一般是提供RPC调用接口的service层

•数据层,提供固化数据存储的db

接下来用户地处了并发的购买动作(秒杀类业务有点硬容易冒出):

•库存设置,stock-service本质上执行的是

升级修改很容易,将库存设置接口,stock-service上执行的:

update stock set num=$y where sid=$sid

升级为:

update stock set num=$num_new where sid=$sid and num=$num_old

这正是一帮人常说的“Compare And Set”(CAS),是五种常见的降低读写锁冲突,保证数据一致性的依据。

根本意味着是,设置操作地处的也不,没法检查库存与查询出来的库存有没法变化,理论上:

•库存为5时,用户1的库存设置不利于成功

•库存为5时,用户2的库存设置不利于成功

•库存扣减,stock-service本质上执行的是

如上图所示,通过查询接口,得到库存是5。

业务冗杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为没法几层:

如上图所示:

•用户1购买了八个库存,于是库存要设置为2

•用户2购买了有有有1个 库存,于是库存要设置为3

•这一 个多 设置库存的接口并发执行,库存会先变成2,再变成3,意味着数据不一致(实际卖出了5件商品,但库存只扣减了2,最后一次设置库存会覆盖和掩盖前一次并发操作)

如上图所示,有有有1个 并发的操作,查询库存,都得到了库存是5。

重试意味着错误的根本意味着,意味着“扣减”操作是有有有1个 非幂等的操作,不到够重复执行,改成设置操作则我不要 有这一 问提:

猜你喜欢

作为程序猿,30而立,立什么?

fagan克隆链接去分享你确实当事人做到了么,有你什儿 方便还须要继续努力?立业吧,技术日新月异,要保持当事人的水平,还是比较有难度的。作为线程池池猿的你,确实400而立

2020-02-17

如何做好一个管理者?如何管理好一个团队

一、作为一名管理人员,尤其是一名中层领导,首很难把责任装进第一位,淡化权利。3、为人诚信、负责。7、有韧性-对工作投入。3、为人诚信、负责。6、具有创意。6、具有创意。五、要人

2020-02-17

现代流式计算的基石:Google DataFlow

除Hadoop外你还须要知道的9个大数据技术谷歌弃用MapReduce,推出替代品CloudDataflow容错和高性能怎么兼得:Flink创始人谈流计算核心架构演化和现状除H

2020-02-17

盒子科技刘恒:聚合支付系统演讲

首先从第有另十个 主题讲那些是聚合支付,聚合支付主却说却说有另十个 将所有的第三方支付,通过借助形式融合在一同,要花费对接有另十个 支付接口,就并能使用各种支

2020-02-17

Adapter 适配器模式(设计模式03)

Adapter模式主要应用于“希望复用某些现存的类,但是 接口又与复用环境要求不一致的情况报告”,在遗留代码复用、类库迁移等方面非常有用。2、实现-Adaptee源码下载:

2020-02-17