美文网首页技术分享
浅谈秒杀系统设计思路

浅谈秒杀系统设计思路

作者: Lugton | 来源:发表于2020-09-11 15:54 被阅读0次

    秒杀场景

    例如双11、618

    涉及问题

    1. 高并发:时间短,瞬间用户量
    2. 超卖:卖出量多于库存
    3. 数据库超负荷:数据库甚至其他业务挂掉,导致404

    设计思路

    1.微服务

    服务单一职责,以微服务的设计思想设计系统,每个服务职责、功能单一,并采取分布式的部署方式。每个服务建立单独的数据库。

    2.缓存

    • 读请求:秒杀的典型的读多写少的业务,可以利用缓存分担数据库压力
    • 写请求:将数据库的库存数据转移到Redis缓存中,所有减库存的操作在Redis中进行,再通过后台进程把redis中的用户秒杀请求同步到数据库中。
    • Redis集群:主从复制、读写分离、哨兵监控
    • 防止超卖:利用Lua脚本(类似Redis事务,有一定的原子性,不会被其他命令插队,可以完成一些Redis事务性的操作)。把判断库存和扣减库存的操作都写在脚本中,使得库存为0后都return false

    3.流量削峰

    将请求放进消息队列,然后一点点的消费去修改库存,达到流量削峰的效果,防止一次性的大量请求导致服务器挂掉

    4.负载均衡
    拓展机器,使用Ngnix进行负载均衡,分担流量压力,同时还可拦截恶意请求。

    5.限流
    一旦产品卖光,前端直接秒杀结束,避免后续无效的请求

    相关文章

      网友评论

        本文标题:浅谈秒杀系统设计思路

        本文链接:https://www.haomeiwen.com/subject/vhtbektx.html