做电商网站,经常会有各种秒杀和热门商品,所以高并发的处理一直是电商最重要的事情。这里记录下当初自己是如何处理的

写在前面:

1、本文设计到的并发处理均是针对纵向,不针对横向扩展,即只设计从PHP层面到数据库层面的处理,不涉及多台服务器,集群、大带宽等的横向设计。

2、本文中涉及到的高并发并不是淘宝京东等几百万几千万等的高并发,仅仅只是普通最多上万的并发处理

3、本文不对悲观锁乐观锁做设计

问题:

普通电商中的秒杀中的并发问题,超卖问题

实例:商品数量为100,秒杀人数为10000,整点开始秒杀

秒杀大概流程:

①商品详情点击购买(秒杀)--》②输入信息提交订单--》③进行支付

解决思路:

1、人数阀门设计

2、会员排队设计

3、问答问题设计

4、库存缓存设计

5、页面静态设计

思路理解:

一、人数阀门设计:进行用户人群过滤。

商品数量只有100份,秒杀人数有10000人,那么我们就设计1道阀门(根据情况,可以设计3道或者2道都可以的)。

在整点的时候,我们对点击了“购买”按钮后,我们只运行500人进入信息填写页面,信息填写完成后提交订单。效果如下:

①商品详情点击购买(秒杀)--》②输入信息提交订单--》③进行支付

10000人                          500人                    (这里也可以设计阀门,只允许多少人进入支付)

其他未进入的如何处理乃?显示已抢完或者排队等待(这就是后面要提到的排队系统设计)。

二、会员排队设计:对用户进行排队,排在前面的先购买

这相当于是消息队列模式了,如果秒杀是立即知道结果,排队可能会有点鸡肋。

在第二步②输入信息提交订单后进行排队,排在前面的先购买,排在后面的后购买

三、问答问题设计:过滤掉一些反应慢的用户

在第一步①点击购买后跳转到问题页面,用户必须回答正确问题后,方可进入后面的流程

四、库存缓存设计:缓存库存,判断用户购买的商品是否还有,不读取数据库,速度快,也不会增加数据库负担,经过前面的过滤,超卖的可能性比较低了

提前将商品库存缓存起来,到下单购买的时候,用户购买了就减1,每次都通过库存缓存判断一下,如果为0就显示已抢完。

五、页面静态设计:尽量静态缓存化【CDN那些这里不做考虑】

第一步①商品详情页面,尽量进行缓存,减轻大批量用户在访问商品页面的时候,大量查询数据库。

问答问题页面:全静态,加载快,无数据库负担。

排队等待页面:全静态,加载快,无数据库负担。

排队结束页面:全静态,加载快,无数据库负担。

小试牛刀:

上面说了那么多废话,总归在一起,流程大概就成了下面这样:

①商品详情点击购买(秒杀)  --》 ②进入问题回答页面      --》③排队等待 --》 ④输入信息提交订单    --》  ⑤进行支付

页面缓存                                        问题过滤                      阀门过滤                                       缓存库存减少

页面缓存                      页面缓存

实战:

代码怎么独立出来乃?还是自己写一个流程。今天先到这里吧,代码实战再单独写一个

附件:

一、参考资料

①、淘宝阀门设计

②、各大电商网站秒杀流程

③、网络上面的各种文献资料

写在最后:

本人对并发处理并不深入,所知道的知识都是来源于网络资料和各种网站参考。虽然我这样的设计已经用于系统中,并且基本上解决了普通的这些问题,但是这样的设计可能存在一定的问题或者不完善,或者根本就是错误的。

转自:https://my.oschina.net/kenblog/blog/516659

转载于:https://www.cnblogs.com/itplay/p/10220397.html

【并发】关于并发、超卖处理的思路相关推荐

  1. 抢票或商品订单防并发、防超卖

    分享一下自己项目开发过程中的设计方案,涉及到订单防并发.防超卖的需求,兼容类似抢票,订单需要锁定商品序号,付款后成交,超时或取消后需要将序号放回可以重新下单的需求. 目录 函数整体思路 代码实现 优化 ...

  2. 使用Redis分布式锁处理并发,解决超卖问题

    使用Redis分布式锁处理并发,解决超卖问题 参考文章: (1)使用Redis分布式锁处理并发,解决超卖问题 (2)https://www.cnblogs.com/VitoYi/p/8726070.h ...

  3. 秒杀系统设计4要素:硬抗高并发,拒绝超卖,避免少卖,打击黄牛

    双十一又要到了,牛牛有点慌,以前一个人的时候,一分钱都不花,现在有了女票,不仅得剁手,还得帮忙抢各种秒杀商品. 今年,牛牛真的不想再去抢秒杀了,为什么呢? 太难了,成千上万的人就盯着秒杀放出来的那点商 ...

  4. 库存出现负数 mysql_MySQL处理高并发,防止库存超卖库存出现负数

    mysql处理高并发的方式比较多,以下为比较简单的一种(mysql事物控制) beginTranse(); try{ $result = $dbca->query('select amount ...

  5. php redis高并发秒杀超卖解决测试

    <?php $redis = new Redis(); $redis->connect("0.0.0.0","6379"); // @$redis- ...

  6. 高并发超卖问题简要解决方案

    1.传统通过数据库保证不超卖 事务+行锁并不是解决超卖的方案,只是保障数据的统一性.传统通过回滚事务的方式防止某些用户多卖的情况. 采用新建一个防重表+事务的方式防止超卖.同一事务中,采用如 用户ID ...

  7. Redis高并发场景下秒杀超卖解决

    目录 1 什么是秒杀 2 为什么要防止超卖 3 单体架构常规秒杀 3.1 常规减库存代码 3.2 模拟高并发 3.3 超卖现象 3.4 分析原因 4 简单实现悲观乐观锁解决单体架构超卖 4.1 悲观锁 ...

  8. 秒杀的性能问题和超卖

    秒杀的性能问题和超卖 抢订单环节一般会带来2个问题: 1.高并发 2.超卖 二.如何解决? 1.前端 A:扩容 B:静态化 C:限流 D:有损服务 2.后端 针对上述问题,如何解决呢? 我们先看眼淘宝 ...

  9. 【万级并发】电商库存扣减如何设计?不超卖!

    随着中国消费认知的不断升级,网购走近千家万户,越来越被人们所接受.淘宝.唯品会.考拉.京东.拼多多等逐渐成为我们生活的重要组成部分. 除了常规的购物下单外,这些电商平台还经常搞一些双十一活动,秒杀.大 ...

  10. mysql处理高并发,防止库存超卖

    参考:http://blog.csdn.net/caomiao2006/article/details/38568825 今天王总又给我们上了一课,其实mysql处理高并发,防止库存超卖的问题,在去年 ...

最新文章

  1. Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM
  2. 分享一段PowerShell用户认证Function
  3. linux I/O--I/O多路复用--select总结(三)
  4. HTML 事件属性_03
  5. 路由异常的起源-如何影响最终用户?——Vecloud微云
  6. 代码之谜(四)- 浮点数(从惊讶到思考)
  7. wxWidgets:wxCursor类用法
  8. mysql删除表中数据报错:[Err] 1206 - The total number of locks exceeds the lock table size
  9. javascript学习笔记(一)-廖雪峰教程
  10. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  11. Bash脚本教程之数组
  12. c++创建二叉树_数据结构:查找(4)|| 平衡二叉树
  13. 阻塞非阻塞、同步异步
  14. “2021年度全球十大人工智能治理事件”:数据、算法、伦理受关注,AI发展需治理同行
  15. Seeds超像素分割
  16. 信息学奥赛一本通评测系统P1332
  17. 盘点:2017年GitHub上30个优秀的机器学习项目
  18. 宏基Acer笔记本热销火热机
  19. 校招生的中场战事:意向书,offer选择与三方
  20. 交叉编译Qt5.9.6

热门文章

  1. 【转载】对SVM的个人理解---浅显易懂
  2. SyntaxError: Non-ASCII character ‘\xe7’ in file car-training.py on line 7, but no encoding declared;
  3. 机器学习 python 随机抽样random sampling 代码
  4. mysql得花多少钱,php-我需要帮助来解决为什么mySQL查询花费比...
  5. 简述使jdbc连接mysql数据库_java中简述使用JDBC完成数据库操作的基本步骤。
  6. 基于springboot的物资管理系统
  7. python语法学习第十天--类与对象
  8. 遵守java编码规范
  9. springsecurity安全登录框架
  10. 2020-07-17