三高架構雜談

我們的秒殺請求到了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
英文地址,請注明出處:http://en.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??:每次選…