Java秒杀的解决方案

一、秒杀业务特性:

1、低廉价格;

2、大幅推广;

3、瞬间售空;

4、一般是定时上架;

5、时间短、瞬时并发量高;

二、秒杀实现技术挑战:

1、秒杀技术挑战

假设某网站秒杀活动只推出一件商品,预计会吸引上万人参加活动,也就是说最大并发请求数会是上万,,秒杀系统要面临的是上万的并发量;

2、秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,势必会对现有系统造成冲击,稍有不慎就有可到导致整个网站瘫痪;(所以要单独部署,避免影响到其他的服务)

三、秒杀的技术实现:

1、前端

 a、使用动静分离、将静态资源存放到第三方文件服务器中实现cdn加速,目的减轻秒杀抢购带宽;

 b、当用户点击秒杀按钮的时候,应该将按钮disabled 防止重复提交;

 c、使用复杂的图形验证码防止机器模拟抢购;

 d、秒杀商品的详情页使用 nginx + lua + openrestry实现静态化页面;

2、网关

 a、ratelimter 、Nginx、hystrix 、redis实现限流,令牌桶 + 漏桶算法,对用户秒杀请求实现限流和服务保护;

 b、用户黑名单 和 白名单拦截;

3、后端

 a、服务降级、隔离、熔断;

 b、从redis中获取秒杀的令牌(能够获取到令牌就能够秒杀成功,否则就秒杀失败);

 c、异步使用MQ执行修改库存操作;

 d、提供一个根据用户信息查询秒杀结构的接口;

 4、项目部署

 Nginx + lvs 实现服务高可用和集群;

5、其他点

分时段秒杀

你可能感兴趣的:(java,redis)