引言
本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop
秒杀系统的代码在前面博客已经实现了,有兴趣的同学可以参阅下:
- 《淘东电商项目(73) -秒杀系统(前端优化)》
- 《淘东电商项目(74) -秒杀系统(库存超卖解决方案》
- 《淘东电商项目(75) -秒杀系统(用户操作频率限制)》
- 《淘东电商项目(76) -秒杀系统(完整代码实现)》
本文目录结构:
1.小结
下面贴上我自己整理的原理图,如下:
前端:
- 使用动静分离、将静态资源存放到第三方文件服务器中实现cdn加速,目的减轻秒杀抢购带宽。
- 当用户点击秒杀按钮的时候,应该将按钮disabled(禁止),防止重复提交。
- 使用复杂的图形验证码防止机器模拟。
- 秒杀详情页面,使用定时器根据用户信息查询秒杀结果。
- 商品的详情页面使用
nginx+lua+openresty
实现静态化页面。
网关:
- Ratelimter、Nginx、Hystrix、Redis实现限流( 令牌桶+漏桶算法) , 对用户秒杀请求实现限流和服务保护。
- 用户黑名单和白名单拦截。
秒杀接口:
- 服务降级级、隔离、熔断。
- 从redis中获取秒杀的令牌(能够获取到令牌就能够秒杀成功,否则就秒杀失败!)。
- 异步使用MQ执行修改库存操作。
- 提供一个根据用户信息查询秒杀结果接口。
项目部署点:
- Nginx+lvs 实现服务高可用和集群
- docker扩容
其他点:
- 分时段抢购
具体例子:现在有100个商品同时秒杀抢购,每个商品库存为100个? 基于mq+库存令牌桶 100*100=10000, 数据库执行修改库存操作压力还是非常大?
最靠谱的访问,可仿照12306分时段秒杀(中午、下午) 。