秒杀系统的业务逻辑非常简单,一般就是下订单减库存,难点在于我们如何保障秒杀能够顺利进行。

就有了
1.高并发	2.高性能
3.高可用	4.一致性

想简单点,那么多的请求访问进来,肯定处理不过来,那就把他们放到消息队列里面去,后端服务再去消费

如何避免脚本呢

那就是验证码,作用很大,也可以避免用户的集中请求

高并发/高性能

第一步,检测热点数据,放到 jvm 内存中,做到访问速度更快,Redis就可以实现,

第二步,流量消峰,把请求都放在消息队列中,让后端服务慢慢消费,就不会直接把服务干跨

高可用

1.集群

就离不开 集群 比如Redis的集群

可以通过Redis的异步复制 , 一主多从

master一旦挂掉,slave直接成为 master,Redis中的哨兵 Sentinel 模式可以解决

Sentinel 是 Redis 的一种运行模式 ,它主要的作用就是对 Redis 运行节点进行监控。当 master 节点出现故障的时候, Sentinel 会帮助我们实现故障转移,确保整个 Redis 系统的可用性。整个过程完全自动,不需要人工介入!

2.限流

对请求频率进行限制

比如系统能支撑10W个请求,来了15W的请求,那么就会拦截掉这多余的5W请求

3.排队

就是15W的请求在那里排队进去,后面的请求需要等,体验感很不好

4.降级

就是丢车保帅,释放服务器没必要的资源和流量,去保证那些热点数据的正常访问

5.熔断

熔断和降级很容易混淆,其中降级 适度系统自身的服务,而熔断是为了确保外部的服务不会因为本身的服务而瘫痪

一致性

最关键的是要保证接口幂等性

加锁!!!,一定要加锁,防止一个人发起了几个请求