秒杀业务的特色就是多我的读一个数据,难点就是读写冲突,锁状况特别的严重。 因此咱们尽可能不要让请求落在数据库上去,让请求拦截在系统的上游。解决思路:前端
一、限流:屏蔽掉无用的流量,容许少部分流量流向后端。redis
二、削峰:瞬时大流量峰值容易压垮系统。经常使用的消峰方法有异步处理、缓存和消息中间件等技术数据库
前端优化后端
一、前端静态资源缓存,页面静态化和使用cdn缓存或redis缓存缓存
二、限流:1使用验证码防止机器人爬虫脚本自动提交2禁止重复提交,用户提交后按钮置灰并发
后端优化负载均衡
一、利用负载均衡,使用多个机器处理并发请求前端优化
二、秒杀开始前,前台不能获得秒杀地址,防止提早获得秒杀地址,模拟秒杀请求异步
三、限制同一个用户id访问频率高并发
四、限制同一时间请求次数,达到请求上限时,随机拒绝部分请求来保证服务可用
五、业务分离,将秒杀系统和其它业务分离,单独放在高配机器上,防止影响其它业务系统
六、将秒杀请求放入到消息队列队列,后台订阅消息减库存,检测消息队列长度,达到最大库存不加消息队列,直接返回秒杀失败的消息
七、利用缓存应对读请求,利用缓存减轻数据库压力
八、利用缓存应对写请求,将数据库的库存数据转到redis里面,全部减库存操做都在redis里面进行,而后经过后台进程把redis里面的用户秒杀请求同步到数据库