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

三高架构杂谈

我们的秒杀请求到了tomcat之后,我整个请求到了后端,我们怎么抗住高并发
也就是让他1s抗住10w的订单量,该怎么做
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
一般来说秒杀系统都是需要单独部署的,因为它的并发压力很大他跟我们正常微服务或者web系统都是需要 单独剥离开的

在这里插入图片描述

这就是我们秒杀商品最简单的代码,假设我现在就只剩下一个库存了.我几十个请求同一时刻调用了查询db的方法,呢它都查到还有一个库存 ,都会减1 操作 意味着严重超卖update(product)----->意味着减1 操作超卖的问题如何解决 此时必然不能加sy锁,因为加了锁之后我们的并发就抗不到10w以上了如果要求并发不高可以加锁我们可以利用 update stock -1 where shock >0    利用行锁
我其实是用数据库来帮我们解决并发 超卖的问题

在这里插入图片描述

我们其实是用数据库的乐观锁的方式来更新我们的e库存  解决超卖的问题
我就不用在整个代码逻辑上加锁了
这样来做性能会高一些有什么好的优化方案,让我这个系统的并发继续上升。
我们一般会用redis+mq
====================================>>>>>>>>>>>>>>>>>>>>>>>>>

在这里插入图片描述

 我们秒杀走缓存得方案,我们秒杀得商品库存 提前放到缓存中  这个叫做缓存预热然后我们真正减少db,然后我们真正减库存的时候 不是直接db干的,db并发太低了,我们一般在缓存中扣减库存

在这里插入图片描述

所以我们的秒杀系统,会提前预热商品缓存缓存
然后我们真正做秒杀的时候,从redis查商品库存一般mq下单,慢慢去消费。我异步创建订单.也就是前端下单链路 没有操作db的 
性能很高得因为redis 的并发本身就可以支撑很高  如果用kafka 或者mq ,它得并发也很高
我前端给用户返回一个抢购成功前端 给用户一个缓冲   我可以每过2到3s中 往后台发一个查询订单的请求
看下你这个订单有没有下成功 如果你没有下成功
我继续再重发请求 又过2到3s 再去发  当你后端mq消费完毕 被下单成功后
我这个时候再去查询的时候 下单成功  转到支付页面
redis理论上每秒能抗10w的并发,但是实际上没有  而且一般是读的时候才可以
我们的redis是有读有写,也就是说redis既有查询又有写的时候 是支撑不了10w并发的
########>>>>>>>>>>>>>>>>>>>>>..所以我们用 redis的集群架构
redis集群架构 
正常用redis单节点 有单节点问题 如果用redis集群架构
我们服务端的redis集群  我们数据在redis集群中是分片存储的比方说我线上有10个商品 这10个商品实际上是分布式在不同的redis节点上
真正的redis节点它的数据是分片存储的

在这里插入图片描述

根据它的hash 分片算法
redis集群 他会帮我们把数据进行分片来存储
我一个redis节点读写并发 就2w左右
假设现在我有10个商品  我按照334 的拆分

在这里插入图片描述

我每秒 都能抗接近10w 的并发了
redis做集群架构 让你的所有的秒杀 活动 的商品均匀的分配在redis的节点
#############>>>>>>>>>>>>>>>>>>>>>>>...
但是没有呢么理想  很有可能10 个商品 按照hash分片算法  都落在在了第一个节点
呢这套系统只能抗3w的并发  
### redis集群架构的数据倾斜怎么解决
你的商品的key 都落在同一个节点上,导致我们所有的请求 都打在同一个节点上针对我们秒杀商品说白了,要缓存预热的时候 你这个商品在那个节点上,你自己肯定要知道的我预热的时候就得解决,我们通过一些redis命令,吧倾斜的商品进行移动,
或者我们可以用hashTag 把我们的商品进行分片

在这里插入图片描述

也就是说{1,2} 在一个节点上 {3,4} 在一个节点上
其实说白了,我现在有10个秒杀商品.我其实来的10w并发  甚至更高的并发 都集中在1个商品上
我所有请求都只抢一个商品 呢意味着  你现在所有请求 又打到了某一个节点上
此时就不能支撑10w的并发了热点商品问题 怎么提升它的并发
一个商品的并发请求就很高
怎么让它扛到10w 的并发 有什么好的方案
我做秒杀的时候 我应该有一些预设  就不能把他的库存放在一个redis节点上
我在做缓存预热的时候 我就的要拆开了
就算此时都是抢茅台,我自己做一个负载均衡的策略 第一个请求 抢第一个 第二个请求抢第二个节点的100个

在这里插入图片描述

http://www.dtcms.com/a/337310.html

相关文章:

  • Ansible 自动化运维实践笔记:Jinja2 模板、LNMP+WordPress 部署与大项目管理
  • 飞算JavaAI智慧校园场景实践:从校园管理到师生服务的全链路技术革新
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 常见的光源频闪控制方式
  • GitHub 热榜项目 - 日榜(2025-08-18)
  • 为什么有些相机“即插即用”,而有些则需要采集卡?
  • 联动无影(TscanPlus)送激活码
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 【计算机网络】TCP/IP
  • 决策树简单实战
  • 【github-action 如何为github action设置secrets/environment】
  • 《软件工程导论》实验报告六 设计建模工具的使用(二)
  • 蓝牙AOA定位技术在智慧仓储中的优势与挑战
  • Python 面向对象三大特性详解(与 C++ 对比)
  • (nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
  • 华曦达港股IPO观察丨以创新研发为笔,构建AI Home智慧生活新蓝图
  • 图形自动化:pynput实现Win11系统动作点击录制与回放
  • 【HarmonyOS】应用设置全屏和安全区域详解
  • 广州曼顿智能断路器:让用电更聪明,生活更安心!
  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • Redis面试精讲 Day 25:Redis实现分布式Session与购物车
  • Redis---持久化策略
  • SSM-组件的批量扫描
  • 时、分、秒、倒计时组件
  • Redis 客户端安装方法
  • Spring Boot + Spring Kafka 集成
  • 深层语义知识图谱:提升NLP文本预处理效果的关键技术
  • 《基于改进 MobileNetV2 的轻量化茶叶病虫害检测方法》论文解析
  • Redis--day8--黑马点评--分布式锁(一)
  • HTML应用指南:利用POST请求获取全国华为旗舰店门店位置信息