三高架构杂谈

我们的秒杀请求到了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个

在这里插入图片描述

我们可以利用conHashMap进行分段存储,我们一个10w级别秒杀系统大概是这种的

在这里插入图片描述

我们在瞅瞅这个系统的架构中还有那些有问题  因为有问题 可能导致我们系统崩溃
我们此时除了满足系统高并发之外  还要高可用 
redis 减库存 之后我们就丢到mq中   mq 用的时候 碰到过什么问题
mq丢消息怎么处理
mq消息挤压怎么处理
mq消费的时候怎么保证幂等  这些问题肯定会导致我们系统不稳定  影响我们的可用性

在这里插入图片描述

我在发mq的时候 记录一个日志表 然后等Mq消费成功之后 再去更新这个表状态  从待处理改成已处理万一我消息丢失了 我状态就是待处理状态,我后端可以搞个定时任务来轮询待处理的任务 进行重发
消费的过程中怎么保证它的幂等
比如说你发mq失败了,可能重试了,可能你一条消息发了2次,呢我下游可能同一个订单有 入库2次
就有可能生成2个订单
对于mq 幂等怎么处理###<<<<<<< 发消息之前 我订单id已经生成好了, 因为订单id是唯一的,订单Id是主键不会被重复消费有的时候订单id是在我服务端生成的 我订单id是在我服务端生成的 我可以用messageId 做主键
我也可以用(userId+productId+acvitityId) 做个业务主键,(一般来说你是那个秒杀活动)  组合一个唯一的Id我下单的时候我查下(redis/db) 这个主键在不在 如果不存在的化 就代表它是一笔
mq消息挤压  我后端消费来不及呢么快 消息挤压了怎么处理
我mq 里面存在了上百万条消息,这个时候会出现什么问题
我用户在前端还等着了 现在异步下单  意味着它此时的圈圈会一直转的
你这块挤压了有百万 意味着  一个订单生成个 很久才能被消费
用户是等不了这么久的###>>>>>>>>
我如果拿到这个消息 (是有发送时间的)  我判断一下 如果这个消息是2分钟以前发的 呢意味着这条消息
已经在mq中等了2分钟了
我超过1分钟 我直接吧消息丢掉、、
如果转的超过2分钟 还没有查到 的化 我就认为你下单失败了
因为这个订单在1分钟没有被消费的时候 其实已经被丢掉了 
假设此时抢购问题 redis集群出现问题怎么办,mq集群出现问题了怎么办

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93505.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端通用基础代码

后端通用基础代码 通用基础代码是指&#xff1a;“无论在任何后端项目中&#xff0c;都可以复用的代码。这种代码一般 “一辈子只用写一次” &#xff0c;了解作用之后复制粘贴即可&#xff0c;无需记忆。 目录结构如下&#xff1a;1、自定义异常 自定义错误码&#xff0c;对错…

基于51单片机WIFI心率计脉搏体温测量仪APP设计

1 系统功能介绍 本设计基于 STC89C52 单片机&#xff0c;结合 脉搏传感器、温度传感器 DS18B20、LCD1602 液晶显示器、WiFi 模块 等外设&#xff0c;构建了一个 WiFi 心率计脉搏体温测量仪 APP 系统。系统能够实现对人体心率与体温的实时采集、处理、显示和远程上传&#xff0c…

从零到一构建企业级GraphRAG系统:GraphRag.Net深度技术解析

当RAG遇上知识图谱&#xff0c;会碰撞出怎样的火花&#xff1f;本文将带你深入探索GraphRag.Net这个开源项目&#xff0c;看看如何用.NET技术栈打造一个企业级的图谱增强检索系统。 引言&#xff1a;为什么我们需要GraphRAG&#xff1f; 在AI大模型时代&#xff0c;RAG&#x…

前端Element-plus的选择器 el-select 清空内容时,后端对应的更新方式,支持更新为null

1、所属小类选择器 el-select 清空内容时&#xff0c;前端通过事件设置为空字符串clear"handleSmallCategoryClear"【所属小类选择器】只能选择&#xff0c;不能输入信息<script setup lang"ts" name"QualityFileInfoDialog"> ...... // 所…

【笔记】和各大AI大语言模型合作写项目—slirp.go

最近和各大AI大语言模型一起合作写了个小项目&#xff0c;让大家看看AI离取代人类还差多远。 开发大家都在一个共享环境下&#xff0c;连docker都不能运行&#xff0c;rootless也没有。不过好在linux环境&#xff0c;弄个proot能apt或者yum install自由&#xff0c;但是诸如pod…

国标:开展环境卫生满意度调查

随着社会的进步和人们生活水平的提高&#xff0c;&#xff08;满意度调查&#xff09;&#xff08;问卷调查&#xff09;&#xff08;第三方市场咨询公司&#xff09;对生活品质的追求以及对环境保护的重视已经成为了当下社会的主旋律。在这样的背景下&#xff0c;环境卫生问题…

【办公类-54-08】20250902 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)根据新Excel模版,标题增加园区、空姓名行填充灰色

背景需求: 之前做了优化过的点名册 【办公类-54-07】20250901 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)-CSDN博客文章浏览阅读984次,点赞27次,收藏29次。【办公类-54-07】20250901 202学年第一学期班级点名册模版(双休国定假…

【C++知识杂记1】智能指针及其分类

智能指针&#xff08;smart pointer&#xff09; 是 C11 引入的一类 模板类&#xff0c;用来封装原始指针&#xff0c;自动管理堆内存的生命周期&#xff0c;避免出现 内存泄漏 和 悬空指针&#xff08;野指针&#xff09; 的问题。 当智能指针对象离开作用域时&#xff0c;它会…

vue从入门到精通:搭建第一个vue项目

目录 Vue是什么 一、nodejs安装 二、安装Vue CLI 三、创建Vue项目 四、配置vue.config.js文件 五、创建第一个应用hello word Vue是什么 Vue是一款‌用于构建用户界面的 JavaScript 渐进式架构‌既可作为库(仅关注视图层)也可扩展为框架,支持从静态页面到复杂单页应用…

C# Queue源码分析

Queue<T> 是 .NET 中实现队列&#xff08;先进先出&#xff09;的一种泛型集合类。它基于数组实现&#xff0c;支持动态扩容、线程不安全&#xff0c;适用于大多数需要队列结构的场景。一、类结构与字段说明 public class Queue<T> : IEnumerable<T>, IColle…

微服务之注册中心与ShardingSphere关于分库分表的那些事

小伙伴们&#xff0c;你们好呀&#xff01;我是老寇&#xff01;跟我一起学习注册中心与ShardingSphere怎么一起使用 使用 nacos-shardingsphere例子&#xff0c;请点击我 注意&#xff1a;需要自己提前创建数据库和表 create database kcloud_platform_test;DROP TABLE IF…

python遇到异常流程

在 Python 中&#xff0c;程序遇到异常时的退出行为取决于是否对异常进行了捕获和处理&#xff1a;未捕获的异常&#xff1a; 如果异常发生后没有被 try-except 语句捕获&#xff0c;程序会立即终止&#xff0c;并返回一个非零的退出码&#xff08;通常是 1&#xff09;&#x…

【开源大模型和闭源大模型分别有哪些?两者的对比?部署私有化模型的必要性有哪些?】

以下是关于开源与闭源大模型的详细对比及私有化部署必要性的分析&#xff0c;结合最新行业动态和技术趋势&#xff1a;一、开源 vs 闭源大模型代表列表 1. 开源大模型&#xff08;2024年主流&#xff09;模型名称参数量机构特点LLaMA-38B-70BMeta商业使用需授权&#xff0c;多语…

SpringBoot--JWT

一、JWT 的简单了解1. 什么是 JWT&#xff1f;JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在 各方之间安全地传输信息。它基于 JSON 格式&#xff0c;信息通过 数字签名 的方式保证不可篡改&#xff0c;常用于 …

OpenTelemetry、Jaeger 与 Zipkin:分布式链路追踪方案对比与实践

OpenTelemetry、Jaeger 与 Zipkin&#xff1a;分布式链路追踪方案对比与实践 问题背景介绍 随着微服务架构的普及&#xff0c;服务之间调用链路变得异常复杂&#xff0c;单一服务故障或性能瓶颈往往牵一发动全身。分布式链路追踪&#xff08;Distributed Tracing&#xff09;能…

云原生俱乐部-RH124知识点总结(1)

RH124内容不是很多&#xff0c;但是也不知道多少能够写完&#xff0c;细节性的东西不会太多&#xff0c;但是确保每个都能够有印象能理解。本来是打算一篇文章写完的&#xff0c;但最后还是决定写一个系列。至于RH124和RH134的内容为什么放在了k8s系列的后面&#xff0c;那只是…

Redis面试精讲 Day 25:Redis实现分布式Session与购物车

【Redis面试精讲 Day 25】Redis实现分布式Session与购物车 在高并发、多节点的现代Web应用架构中&#xff0c;传统的本地Session存储方式已无法满足分布式系统的需求。如何实现跨服务、高可用、低延迟的用户状态管理&#xff0c;成为后端开发和面试中的高频考点。今天是“Redi…

本地文件上传到gitee仓库的详细步骤

本地文件上传到gitee仓库的详细步骤 &#x1f530; 一、前期准备 注册 Gitee 账号 访问 Gitee 官网完成注册并登录。 网址&#xff1a;https://gitee.com/ 安装 Git 下载 Git 官方客户端并完成安装。 下载网址&#xff1a;https://git-scm.com/downloads 配置 Git 全局信息&…

7 索引的监控

1. 查看索引的监控状态 GET /_cat/indices/log2?v&formatjson[{"health" : "yellow","status" : "open","index" : "log2","uuid" : "1OnzbVbJRn2grc5k198LlA","pri" : "…

【秋招笔试】2025.08.10米哈游秋招机考真题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 米哈游 题目一:图书馆整理计划 1️⃣:贪心策略从左到右固定每个位置的最优元素 2️⃣:使用线段树维护区间最小值信息,支持单点更新和区间查询 3️⃣:每次选…