电商秒杀场景的解决策略与具体实现方案
来源:互联网 发布:欧特克软件侵权案件 编辑:程序博客网 时间:2024/06/06 01:00
问题场景:某电商网站,po了一个活动宣传活动,3月8号,1元秒杀iphone7 ,限量10台,看你手速哦,快来抢吧。
广大吃瓜群众:
程序员:
应该还是比较好理解的,下面对下单开始/结束,和 抢单的后端处理具体分析一下。
- 抢单开始和结束的控制
在上表中列出来的解决方案中看出,利用页面静态化、数据静态化,反向代理
等方法可以避免带宽和sql压力
,但是随之而来一个问题,页面抢单按钮也不会刷新了,可以把js
文件单独放在js服务器上,由另外一台服务器写定时任务
来控制js 推送。
另外还有一个问题,js文件会被大部分浏览器缓存,我们可以使用xxx.js?v=随机数
的方式来避免js被缓存。
抢单的后端处理
本文中 ,iphone7的数量为10 ,可以把第一次的请求放到安比加10 ,我们这里就设置为50。利用redis 的队列,进行这50个请求的控制,
这里还有一个分叉,如果是依次的请求,可以依次判断,如果是一次性的,可以随机取50个请求,放入队列中。再对这50个数据进行二次过滤,也就是入库之前的处理,从而尽量的保证公平和完整。
这里采用到乐观锁来实现,也就是数据版本记录机制。
给数据加上版本,当更新时的版本与读取的版本相同时,才更新版本+1。这样两条相同的更新数据就不会冲突。
php文件乐观锁的实现:flock 锁上一个文件,执行前判断文件锁状态,执行完毕,解锁,这样执行前只有没有锁才能执行。
拓展:
数据库的并发量问题
数据库集群 : 每个节点 可以分摊 多少 内存 数据库并发 并不能用 在线人数等同 。这两者之间没有明确的对应关系 。
并发是指:同一时刻有多少请求在 数据库 上跑 。
查询方面可以用sphinx + 索引来实现 写入方面,索引+触发器
硬件方面:cpu 影响较小 ,可以从以下方面来设置
mysql 的 innodb 数据表 时, 20个商家 ,每个人各像他下1000单子,时间在55ms左右 。
innodb_buffer_pool_size=2G innodb_buffer_pool_instances=1
innodb_buffer_pool_size
这个值 可以设置到物理机的80% 比方你的宿主为4G内存 ,就可以到3.2G 。用来缓存索引和 行数据
阅读全文
1 0
- 电商秒杀场景的解决策略与具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案
- 数据库分库分表策略的具体实现方案(转载)
- mysql数据库分库分表策略的具体实现方案
- Comparable与Comparator的具体应用场景
- 线程的同步异步,以及具体代码实现,使用场景
- NB-IOT项目研究与场景方案实现
- 电商秒杀架构 各个具体场景及对应的解决方案
- FragmentPagerAdapter与FragmentStatePagerAdapter具体使用场景
- Applet与Servlet通信的具体实现
- KVO的实现原理与具体应用
- JAVA策略模式(3)之解决具体遇到的一个问题
- java Collator类的具体用法场景
- bzoj1344: [Baltic2007]Connected Points连点
- 移植oprofile到dm365
- javascript基础
- Normalization on conv4_3 in SSD
- uml系列(八)——部署图与构件图
- 电商秒杀场景的解决策略与具体实现方案
- hdu1535—Invitation Cards(spfa)
- Android通过滑动实现Activity跳转(手势识别器应用)
- 信号处理第一课:向量的空间与子空间
- 软件工程师职业发展与晋升通道
- tomcat win 经验
- unexpected char: '@' [from cn.mani123.domain.Order where product = cn.mani123.domain.Product@11d48a7
- opencv2 hsv分离
- VPN编写总结