黑马模板网专注企业网站模板制作,包括企业pbootcms网站模板,静态网页模板,网站源码下载,HTML网站模板等等。
免责声明:本站所有资源(模板、图片)搜集整理于互联网或者网友提供,仅供学习与交流使用,如果不小心侵犯到你的权益,请及时联系我们删除该资源。
需要考虑:
高并发、限流、超卖[库存]、异步处理、安全性、性能优化、测试
涉及到的点:
架构、redis事务(watch)、超卖、mysql锁
特点:
高并发、负载大、读多写少
1、mysql读写服务器4台;redis服务器2台;Nginx负载均衡+nginx限流+nginx缓存
2、具体实现:
1)、后台设置秒杀商品,将此商品写入redis缓存(商品Id、数量),hash形式
2)、前台秒杀页面分两个接口:
实时数据接口例如商品是否售罄(redis里获取、一秒钟查询一次);另一个接口是不经常变的信息可以直接放到反向代理服务器上(nginx、nginx缓存设置详见nginx之面试),这样就不用请求php了,也提高了速度;js、css、图片都放到cnd服务器
3)、秒杀开始后用户点击购买按钮,按钮置灰,防止重复点击,重复请求服务器;
4)、请求到后端之后减redis里的库存用watch
redis事务:
实现减redis库存: watch+事务(MULTI + EXEC),减完库存之后为了提高用户体验度,直接返回成功;将这个商品放入此商品对应的消息队列中,后台脚本跑这个消息队列,减去数据库中的库存(用事务+意向锁(select column from table lock in share mode)+排它锁(SELECT column FROM table … FOR UPDATE))。用事务的时候注意将自动提交关闭,SET autocommit=0 。
3、ab压力测试
ab命令非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试,ab命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,实现压力测试。原理类似CC攻击,可能会造成目标服务器资源耗尽,严重时可能会导致死机。
-n 访问的总次数,-c 访问的并发量
ab -n 1000 -c 900 http://192.168.176.30/index.html
4、每秒请求数: qps
5、如果问为什么没有用的redis锁,就说锁会出现死锁,不太好解决,死锁的解决详见redis锁之面试