電商項目_秒殺_架構升級

1. 秒殺當前架構設計

  • nginx節點和訂單服務都可以方便的擴容(增加機器)
  • redis擴容需則需要考慮架構設計

當前架構面臨的痛點:

????????秒殺系統redis是單節點(主從)部署,讀redis時并發量會成為瓶頸。

????????所以考慮將增加redis從節點個數。秒殺系統為提交讀庫存的性能,將redis從節點和nginx節點部署在一起的, 如果升級成redis集群, nginx讀哪個從節點呢?-》考慮將nginx也水平擴展。

(nginx可以擴容原因:商品詳情頁的靜態頁面發布到OpenResty上, 那么就可以考慮將不同商品的頁面發布到不同的openResty上)

2. redis增加從節點 + nginx水平擴展

  • 1個redis主節點n個redis從節點
  • 不同的商品詳情頁發布到不同的nginx

????????當前架構面臨的痛點:

????????秒殺商品比較多時, 單個主redis節點更新庫存、主redis節點同步從節點數據,會成為性能瓶頸。所以考慮將Redis升級成集群。

3. Redis垂直拆分

  • nginx讀取的redis從節點,就可能不在一個機器了。
  • Redis 的集群化部署,多個 SKU 的數據,會分散到各個 Redis 節點當中,就可以解決 Redis 數據量太?的問題。并且,基于 Redis 集群的?式,Redis 服務的可?性也得到了提?。我們可以通過再加?哨兵機制等?式,保證少量 Redis 節點掛了后,整個 Redis 集群不會出現問題。????????

當前架構面臨痛點:

  • 采?集群部署 Redis 后,因為?部分的 Redis 客戶端都是通過連接池實現的,此時Redis 的連接數就會逐漸成為瓶頸。
  • 無法確定Redis中的數據分布,也就?法保證每個Nginx只讀取本地的 Redis

???????Redis連接池:取決于具體的客戶端實現,客戶端可以配置針對單節點的連接池,也可以配置集群的連接池。

通過中間件減少連接數

  1. 使?TwemProxy于 Redis 之間建?單鏈接交互,并通過Twemproxy實現分?邏輯。這樣我們就可以?平擴展出更多的Twemproxy來增加連接數。
  2. Twemproxy實例眾多,應?維護、配置困難,需要在這之上做負載均衡。?如,通過LVA/HaProxy 實現VIP(虛擬 IP),就可以做到節點切換對應?透明、故障?動轉移。還可以通過實現內? DNS 來做其負載均衡。

4. 庫存預分配方案

????????解決 無法保證Nginx只讀本地?Redis的問題。同時也解決了集群redis線程池的問題。

????????在很多互聯?企業中,不會直接使? Redis 的集群架構,?是搭建多個 Redis 節點。并通過庫存預分配的?式,??控制 Redis 中的數據分布。

優點:

  • 每個應用都有獨立的庫存數據,大大降低了并發度,另外,各個應用扣減庫存的速度不一樣,一定程度防止了羊毛黨
  • 不同商品詳情頁配置到不同的OpenResty上,前端引導用戶進入不同的靜態頁面?
  • 一定程度解決熱點商品問題,因為每個二級redis中可以配置多個SKU的活動信息

缺點:

  • 前端引導用戶進入不同的靜態頁面 ,但是如果想要多個服務承擔同一個商品的秒殺服務, 前端如何進行合理的引導,需要將引導與庫存進行溝通
  • 服務出現問題,庫存很難回收:二級redis是單點部署(主從),如果redis在活動過程崩潰,基于這個redis的庫存數據無法回滾,從而影響整體庫存管理。(純粹單節點,活動數據可以通過日志恢復,后續的返廠活動進行補救)
  • 各個服務之間無法溝通,導致有庫存,但是用戶秒殺不到的問題。 APP1有庫存,APP2無庫存,但是APP2進來的秒殺請求卻無法下單。搶購多個商品也是類似問題。

5. 動態庫存方案

解決不同二級redis服務之間不溝通的問題。

  1. 獨立出庫存分配服務
  2. 每個二級redis緩存配置個閾值,當庫存低于域閾值時,通知庫存分配服務,庫存分配服務再訪問各個Redis, 對庫存進行統一分配
    • 優先從一級redis分配,這樣速度更快
    • 一級redis扣減完成后,再協調二級redis進行動態庫存分配
  3. 當秒殺活動快結束時或者庫存快全部售完時,所以二級redis的庫存都低于一個臨界值,可以將所有庫存回收,統一分配給某一個二級Redis。

存在問題:

  • 前端引導用戶進入不同的靜態頁面 ,但是如果想要多個服務承擔同一個商品的秒殺服務, 前端如何進行合理的引導,需要將引導與庫存進行溝通
  • 服務出現問題,庫存很難回收:二級redis是單點部署(主從),如果redis在活動過程崩潰,基于這個redis的庫存數據無法回滾,從而影響整體庫存管理。(純粹單節點,活動數據可以通過日志恢復,后續的返廠活動進行補救)

6. 秒殺與直播帶貨

相同點:

  • 流量來的非常突然, 瞬間巨大流量
  • 熱點數據
  • 都要處理三高問題

不同點:

  • 直播帶貨允許超賣
  • 直播帶貨持續時間更長

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90357.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CodeBuddy IDE發布:編程新時代的顛覆者?

開場:編程界的 “新風暴” 來襲 你能想象,不用敲一行代碼就能開發軟件嗎?這個曾經只存在于科幻電影里的場景,如今已經成為現實!就在最近,編程界迎來了一場 “新風暴”——CodeBuddy IDE 重磅發布&#xff…

深度分析Java類加載機制

Java 的類加載機制是其實現平臺無關性、安全性和動態性的核心基石。它不僅僅是簡單地將 .class 文件加載到內存中,而是一個精巧、可擴展、遵循特定規則的生命周期管理過程。以下是對其深度分析: 一、核心概念與生命周期 一個類型(Class 或 In…

神經網絡實戰案例:用戶情感分析模型

在當今數字化時代,用戶評論和反饋成為企業了解產品滿意度的重要渠道。本項目將通過神經網絡構建一個情感分析模型,自動識別用戶評論中的情感傾向。我們將使用真實的產品評論數據,從數據預處理到模型部署,完整展示神經網絡在NLP領域…

now能減少mysql的壓力嗎

是否用數據庫的 NOW() 能減少 MySQL 的壓力??答案是否定的——使用 NOW() 不僅不會降低壓力,反而可能略微增加 MySQL 的負載。以下是詳細分析:🔍 性能對比:NOW() vs. Java 傳參?指標??Java 傳參 (e.g., new Date()…

數據結構01:鏈表

數據結構 鏈表 鏈表和數組的區別 1. 存儲方式 數組: 元素在內存中連續存儲,占用一塊連續的內存空間元素的地址可以通過索引計算(基地址 索引 元素大小)大小固定,在創建時需要指定容量 鏈表: 元素&#xf…

【Java學習|黑馬筆記|Day21】IO流|緩沖流,轉換流,序列化流,反序列化流,打印流,解壓縮流,常用工具包相關用法及練習

標題【Java學習|黑馬筆記|Day20】 今天看的是黑馬程序員的《Java從入門到起飛》下部的95-118節,筆記包含IO流中的字節、字符緩沖流,轉換流,序列化流反序列化流,打印流,解壓縮流,常用工具包相關用法及練習 …

API網關原理與使用場景詳解

一、API網關核心原理 1. 架構定位 #mermaid-svg-hpDCWfqoiLcVvTzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-icon{fill:#552222;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-text{fill:#5…

OSPF路由協議——上

OSPF路由協議 RIP的不足 以跳數評估的路由并非最優路徑如果RTA選擇s0/0傳輸,傳輸需時會大大縮短為3s 最大跳數為16跳,導致網絡尺度小RIP協議限制網絡直徑不能超過16跳,并且16跳為不可達。 收斂速度慢 RIP 定期路由更新 更新計時器&#xff1a…

(LeetCode 面試經典 150 題) 219. 存在重復元素 II (哈希表)

題目&#xff1a;219. 存在重復元素 II 思路&#xff1a;哈希表&#xff0c;時間復雜度0(n)。 哈希表記錄每個數最新的下標&#xff0c;遇到符合要求的返回true即可。 C版本&#xff1a; class Solution { public:bool containsNearbyDuplicate(vector<int>& nums,…

Cookies 詳解及其與 Session 的協同工作

Cookies 詳解及其與 Session 的協同工作 一、Cookies 的本質與作用 1. 什么是 Cookies&#xff1f; Cookies 是由服務器發送到用戶瀏覽器并存儲在本地的小型文本文件。核心特性&#xff1a; 存儲位置&#xff1a;客戶端瀏覽器數據形式&#xff1a;鍵值對字符串&#xff08;最大…

DeepSeek Janus Pro本地部署與調用

step1、Janus模型下載與項目部署 創建文件夾autodl-tmp https://github.com/deepseek-ai/Janus?tabreadme-ov-file# janusflow 查看是否安裝了git&#xff0c;沒有安裝的話安裝一下&#xff0c;或者是直接github上下載&#xff0c;上傳到服務器&#xff0c;然后解壓 git --v…

【Elasticsearch】BM25的discount_overlaps參數

discount_overlaps 是 Elasticsearch/Lucene 相似度模型&#xff08;Similarity&#xff09;里的一個布爾參數&#xff0c;用來決定&#xff1a;> 在計算文檔長度歸一化因子&#xff08;norm&#xff09;時&#xff0c;是否忽略“重疊 token”&#xff08;即位置增量 positi…

Linux | LVS--Linux虛擬服務器知識點(上)

一. 集群與分布式1.1 系統性能擴展方式當系統面臨性能瓶頸時&#xff0c;通常有以下兩種主流擴展思路&#xff1a;Scale Up&#xff08;向上擴展&#xff09;&#xff1a;通過增強單臺服務器的硬件配置來提升性能&#xff0c;這種方式簡單直接&#xff0c;但受限于硬件物理極限…

【Linux-云原生-筆記】keepalived相關

一、概念Keepalived 是一個用 C 語言編寫的、輕量級的高可用性和負載均衡解決方案軟件。 它的主要目標是在基于 Linux 的系統上提供簡單而強大的故障轉移功能&#xff0c;并可以結合 Linux Virtual Server 提供負載均衡。1、Keepalived 主要提供兩大功能&#xff1a;高可用性&a…

計算機網絡:概述層---計算機網絡的組成和功能

&#x1f310; 計算機網絡基礎全景梳理&#xff1a;組成、功能與核心機制 &#x1f4c5; 更新時間&#xff1a;2025年7月21日 &#x1f3f7;? 標簽&#xff1a;計算機網絡 | 網絡組成 | 分布式 | 負載均衡 | 資源共享 | 網絡可靠性 | 計網基礎 文章目錄前言一、組成1.從組成部…

Linux中scp命令傳輸文件到服務器報錯

上傳本地文件到Linux服務器使用scp命令報錯解決辦法使用scp命令報錯 Could not resolve hostname e: Name or service not known 解決辦法 不使用登錄服務器的工具傳輸&#xff0c;打開本地cmd&#xff0c;使用scp命令傳輸即可。 scp E:\dcm-admin.jar root127.0.0.1:/

歷史數據分析——國藥現代

醫藥板塊走勢分析: 從月線級別來看 2008年11月到2021年2月,月線上走出了兩個震蕩中樞的月線級別2085-20349的上漲段; 2021年2月到2024年9月,月線上走出了20349-6702的下跌段; 目前月線級別放巨量,總體還在震蕩區間內,后續還有震蕩和上漲的概率。 從周線級別來看 從…

#Linux內存管理# 在一個播放系統中同時打開幾十個不同的高清視頻文件,發現播放有些卡頓,打開視頻文件是用mmap函數,請簡單分析原因。

在播放系統中同時使用mmap打開幾十個高清視頻文件出現卡頓&#xff0c;主要原因如下&#xff1a;1. 內存映射&#xff08;mmap&#xff09;的缺頁中斷開銷按需加載機制&#xff1a;mmap將文件映射到虛擬地址空間&#xff0c;但實際數據加載由“缺頁中斷&#xff08;Page Fault&…

AI黑科技:GAN如何生成逼真人臉

GAN的概念 GAN(Generative Adversarial Network,生成對抗網絡)是一種深度學習模型,由生成器(Generator)和判別器(Discriminator)兩部分組成。生成器負責生成 synthetic data(如假圖像、文本等),判別器則試圖區分生成數據和真實數據。兩者通過對抗訓練不斷優化,最終…

FireFox一些設置

firefox后臺打開新的鏈接&#xff0c;例如中鍵打開一個鏈接 地址欄輸入about:config 找到下面三項&#xff0c;全部設為true browser.tabs.loadInBackground browser.tabs.loadDivertedInBackground browser.tabs.loadBookmarksInBackground 參考&#xff1a;FireFox/chrome…