当前位置: 首页 > article >正文

【场景题】秒杀系统设计以及解决方案

一、前端层面

  1. 页面优化
    • 减少不必要的资源加载,优先加载核心界面。
  2. 使用CDN(内容分发网络)
    • CDN根据用户地区选择对应的服务器响应请求,用于缓存和分发静态资源。

二、后端层面

  1. 负载均衡(在Nginx中配置)
    • 轮询策略
      • 按照顺序依次将请求分配到后端服务器。
      upstream backend_pool {
          server 192.168.1.100:80;
          server 192.168.1.101:80;
      }
      
    • 加权轮询策略
      • 若不同服务器性能不同,可给不同服务器加权,性能好的分配更多请求。
      upstream backend_pool {
          server 192.168.1.100:80 weight = 3;
          server 192.168.1.101:80 weight = 1;
      }
      
    • IP哈希策略
      • 根据客户端IP地址计算哈希值,同一哈希值分配到同一后端服务器。
      upstream backend_pool {
          ip_hash;
          server 192.168.1.100:80;
          server 192.168.1.101:80;
      }
      
  2. 缓存层面
    • Redis
      • 在后端使用Redis作为缓存来存储热门商品的信息,如库存储量、商品详情等。
    • 缓存预热
      • 提前将商品信息等加载到缓存当中。
        -数据同步: 可以采用异步的方式是实现从缓存中获取库存信息,判断是否有库存,如果有那么就进行库存扣减,之后异步同步到数据当中。
  3. 业务层面
    • 库存管理:采用数据库的行锁或者分布式锁来保证并发情况下的库存准确性。
    • 订单处理:秒杀成功之后,需要创建订单。可以采用异步处理订单的方式,将订单创建任务放到消息队列之中。
  4. 流量控制 :可以在秒杀界面提娜佳一个验证码机制,这样可以减少某一时刻的流量过大

以上就是一些解决方案,但是可能会出现超卖redis并发过大的安全问题,以及redis和mysql数据一致性等问题。

秒杀系统会出现的问题以及解决方案

  1. 超卖问题的解决方案
    • 数据库的事务解决:在库存的增减操作的时候,可以使用事务来保证操作的原子性。
    • 数据库行锁以及乐观锁机制解决:首先可以对于操作的数据加上一个行锁来进行解决,其次可以存储一个version字段来实现乐观锁思想的方案进行解决。
  2. Redis并发大访问的问题解决方案(详细见上一篇文章)
    • 分布式锁控制并发量 :是指对多个客户端访问操作同一份数据的过程进行控制,以保证任何时候只有一个客户端可以进行操作(缺点:性能低)
    • 原子性操作:redis实现原子操作主要是有两种,redis自带的操作(如incr、decr)、lua脚本(奖等多个操作写到一个lua脚本中,医院自行方式执行单个lua脚本)。
  3. Redis 和 MySQL数据不一致解决方案详细看这篇文章
    • 分布式锁
    • canal
    • 延时双删
    • 消息队列

http://www.kler.cn/news/328811.html

相关文章:

  • 如何理解线性回归中的w和b
  • Tableau数据可视化入门
  • Windows暂停更新
  • 【PostgreSQL】入门篇——SELECT、INSERT、UPDATE 和 DELETE 语句,SQL 中最常用的四种操作用法
  • uni-app - - - - -vue3使用i18n配置国际化语言
  • GB28181信令交互流程及Android端设备对接探讨
  • 利用低代码快速搭建电商小程序之商品列表页
  • IPv4与TCP数据包结构解析
  • 使用iTextPDF库设置文字为英文样式
  • CentOS 替换 yum源 经验分享
  • Scala 字符串
  • 【源码部署】springboot部署服务器之宝塔安装数据库远程无法链接问题
  • uni-app在线预览pdf
  • C++ 语言特性07 - 静态成员的初始化
  • 用示波器测动态滞回线
  • 使用SVD(Stable Video Diffusion)执行视频插帧任务
  • 代码随想录打卡Day48
  • 厦门网站设计的用户体验优化策略
  • docker零基础入门教程
  • 面试-2024年6月19号
  • Hadoop三大组件之HDFS(二)
  • jenkinsfile实现镜像构建、发布
  • Vue2 + ElementUI + axios + VueRouter入门
  • springboot+vue+elementui大文件分片上传
  • Java类设计模式
  • Unity3D 客户端多开
  • LeetCode[中等] 55.跳跃游戏
  • Android 13.0 系统wifi列表显示已连接但无法访问网络问题解决
  • 使用 PHP 的 strip_tags函数保护您的应用安全
  • UE5.4.3 Replay 重播回放系统