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

怎么设计一个秒杀系统

1、系统部署

秒杀系统部署要单独区别开其他系统单独部署,这个系统的流量肯定很大,单独部署。数据库也要单独用一个部署的数据库或者集群,防止高并发导致整个网站不可用。

2、防止超卖

100个库存,1000个人买,要保证不会超卖

防止超卖要保证原子性,判断库存名额是否充足和减少库存扣减成功放到一个lua脚本里面

3、限流

防止机器一直点

IP限流:IP限流的实现方法是根据请求IP地址来进行限制。具体做法是在服务器端记录每个IP地址的请求次数,当请求次数超过设定的阈值时,就拒绝该IP地址的请求。可以使用分布式缓存技术如Redis来记录每个IP的请求次数,并设置定时清除缓存的策略,以保证数据的准确性和实时性。

请求频率限制:实现方法是根据一定时间内的请求次数来进行限制。具体做法是在服务器端记录每个用户请求的时间,并对请求进行计数,当请求次数超过设定的阈值时,就拒绝该用户的请求。可以使用令牌桶算法或者漏桶算法来实现请求频率限制,同时也可以使用分布式缓存技术如Redis来记录每个用户的请求时间和请求次数。

4、静态优化

很多用户在活动前会访问静态页面进行刷新,所以要静态分离开

URL唯一化处理,我们在进行静态化资源的时候,对页面静态资源进行提前缓存,保证用户直接接请求URL时候,无需解析请求头,无需重组HTTP协议,可以直接找到静态资源返回,不与后端做数据交互,一般静态资源我们放到CDN上,CDN就近原则可提高我们的响应速度和命中率,同时cdn开启资源压缩,减少传输数据量。

5、降级

降级就是系统容量达到一定程度时,限制或关闭系统的某些非核心功能,从而把资源保留给更核心的业务,例如秒杀下单后给用户增加积分,这个功能不是下单的核心功能,可以先记录一条信息,等后面流量下来后在调用积分系统给用户补上

6、按钮置灰

12点的秒杀,11点59用户猛点,猛发请求也会对服务器性能造成影响,所有我们的秒杀一定是在未达到时间点的时候,不让点,时间点一到,通过前端的定时器来将按钮变更。

7、预热

秒杀读多写少,访问商品人数往往大于购买人数,活动和库存都可以提前预热,数据提前放到redis中,并且redis搭建好集群部署防止缓存击穿。谁知好过期时间逻辑删除策略等

8、流量错峰、防刷

使用各种手段,将流量分担到更大宽裕的时间点,比如用验证码

9、异步下单

使用消息队列来完成异步下单,注意后台经过了校验、限流后流入的都是有效的,队列接收到消息之后异步生成订单,然后订单创建成功之后,入库没有问题的话,可以使用短信或其他方式告知用户秒杀成功,如果失败的话,我们可以引入一些补偿机制进行重试。

10、多级缓存

在传统的缓存架构下,tomcat成为了并发瓶颈

商品详情页是不会经常变动的,这些数据可以提前用多级缓存缓存到nginx本地缓存中,离用户最近的地方,就可以这样设计多级缓存架构来解决

 

 

http://www.lryc.cn/news/43189.html

相关文章:

  • 程序参数解析C/C++库 The Lean Mean C++ Option Parser
  • Java中的深拷贝和浅拷贝
  • 大文件上传
  • Python每日一练(20230327)
  • Centos7 升级内核到5.10mellanox 编译安装
  • 冯诺依曼,操作系统以及进程概念
  • 7.网络爬虫—正则表达式详讲
  • 关于位运算的巧妙性:小乖,你真的明白吗?
  • 【Android车载系列】第5章 AOSP开发环境配置
  • 个人时间管理网站—Git项目管理
  • 2023最新ChatGPT整理的40道Java高级面试题
  • 单机分布式一体化是什么?真的是数据库的未来吗,OceanBase或将开启新的里程碑
  • 100天精通Python丨基础知识篇 —— 03、Python基础知识扫盲(第一个Python程序,13个小知识点)
  • springboot逍遥大药房管理系统
  • ZYNQ中的GPIO与AXI GPIO
  • 接口导入功能
  • 网络安全知识点总结 期末总结
  • linux挂载远程目录
  • ChatGPT—初识
  • 【ArcGIS Pro二次开发】(18):地理处理工具类【Geoprocessing】补遗
  • 国产芯片方案——红外测温体温计方案
  • 详解ChatGPT的免费总结插件Glarity
  • RK3588平台开发系列讲解(NPU篇)NPU调试方法
  • 基于微信小程序+爬虫制作一个表情包小程序
  • TS常用数据类型(TypeScript常用数据类型,ts常用数据类型和js常用数据类型的区别)
  • 关于Numpy的特殊符号@和矩阵运算
  • 动态版通讯录——“C”
  • SpringBoot 将PDF转成图片或World
  • JavaScript中的for in和for of的区别(js的for循环)
  • C++的各种初始化