近来听到关于秒杀的话题,想起N年前去某当面试,好像有类似设计题,觉得挺有意思,整理了下,供大家临时应急使用!
秒杀场景:
10W真实用户参与秒杀,仅有100人可以成功购买商品。
考虑到码农的特殊手段,接口流量咱们按20W去算.
思路如下:
1、前端控制
技术控制,置灰按钮、防止重复提交
2、后端负载均衡、分散流量
单机理论极限并发约6W,20W流量需要4台服务,去分散流量
3、用户频率限制
用户手脚不停的刷商品,在一段时间内,同一用户会有多次请求,可以用通过redis来过滤
4、令牌策略
可以令牌桶或MQ来过滤数据,拿到令牌的可以去购买,减轻DB压力
5、数据库乐观锁
满足条件的才可以成功购买商品