电商秒杀设计解决方案

秒杀的设计就是目的 就是限制访问db导致宕机的问题

可以从如下几个方案解决

 1客户端。例如:禁止用户重复提交请求;到时间的是只能点击一次限制,限制用户在x秒之内只能提交一次请求

 2站点层面的请求拦截。例如: 可以内存储存 5s只能提交一个请求,页面缓存,同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面

 3 服务层来拦截。控制所有的请求到都到数据库层  

      具体方案: 用Redis和RabbitMQ中间件  redis 记录商品数量,有库存的创建订单号写入RabbitMQ , 返回订单号,跳转到支付页面,可以轮训一下(因为可能mq添加订单,可能还没有成功) ,根据订单号拿到数待支付的订单,成功后后续操作扣减库存等等。 没有库存的,直接到没抢到页面。这样就用redis控制了有限的访问数据库层。其实还有一种复杂点,是不需要redis计数的,是在消费端控制数量,假设 库存数量是100个,并发是10万。只要消费端没有消费100个,队列会一直添加数据。知道消费完了100个,这时候发个消息给添加的队列的,通知他不需要加了。这时候在请求的时候直接返回已售完。但是在队列的一些也需要返回,可以了轮训或者其他技术、知道知否已经添加完订单。

4 数据库层: 问题不大了。再扛不住,机器扩容 集群负载均衡搞一波。

 

总结
(1)尽量将请求拦截在系统上游(越上游越好);

(2)读多写少的常用多使用缓存(缓存抗读压力);

浏览器和APP:做限速

站点层:按照uid做限速,做页面缓存

服务层:按照业务做写请求队列控制流量,做数据缓存

数据层:闲庭信步

并且:结合业务做优化

 

https://www.cnblogs.com/hello-/articles/10345026.html  参考文章

你可能感兴趣的:(秒杀,高并发)