如何解决秒杀、超卖等问题呢?高并发、高可用,略施小计~

秒杀系统架构

1.1 超卖问题

  • 1000件商品
  • 第一步查询商品数量
  • 查询商品:A用户读商品1000,B用户读商品1000
  • 扣减库存:A:1000-1=999写入数据库,B:1000-1=999写入数据库
  • 卖了两件商品,商品数量:999

2.乐观锁与悲观锁如何解决超卖问题的

  • 悲观锁解决的原理
    • A读商品数量是1000,若是悲观锁,A读完数量后商品就加锁(排它锁)
    • B过来读商品数量,A加的锁还没有释放,所以B需要等待
    • 只有当A卖完商品,商品数量减一,把商品数量为999重写到数据库才释放锁
    • B获得商品时商品数据量是999而不是1000
  • 乐观锁解决的原理
    • A读商品数量是1000,若是乐观锁这一刻锁没有加锁
    • A进行商品扣减的时候会校验,现在的商品数量是否和开始数量一致
    • A扣减(排它锁)之后要将999写入Mysql中时会校验商品数量是否是1000
    • 和A刚开始读的数据一致就写入,不一致重试

各层解决方案

1.网络层CDN

  • 特点:CDN服务器不需要安装部署,不是一个真实的后端服务器,仅仅缓存了前端数据
  • 作用:减轻源站的服务器压力,对于国外访问,可以更快速
  • CDN不是把我们的服务部署在全世界各地(成本太高)
  • CDN是静态资源的缓存(JS、Html、图片、视频等)
  • 网站提供是一个后端API接口
  • 你从没打开过商家的商品图片来自美国的一台CDN服务器

2.负载层(高可用)

  • nginx负载均衡:
    • nginx高并发原理(多进程+epoll实现高并发)
      • Nginx在启动后,会有一个master进程和多个互相独立的worker进程
      • 每个子进程只有一个线程,采用I/O多路复用模型epoll,实现高并发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值