最近遇到一个有着高并发的秒杀程序需求,且时间比较紧急,说下方案
现有服务器3台,采用Nginx反向代理实现负载均衡
程序上选择了Node的Express框架(简洁、灵活易修改)
采用分流的形式,层层衰减请求
前端页面:
页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。
在三秒内只允许用户提交一次请求,采取IP限流
后台路由层:
针对同一个访问uid(用户Id),限制访问频率
后台服务层:
建立Redis缓存机制,采用减法机制,RPUSH key value插入秒杀请求, 当插入的秒杀请求数达到上限时,停止所有后续插入,秒杀结束。
使用 LPOP key 读取秒杀成功者的用户id,然后再操作数据库做最终的下订单减库存操作。