拼團系統多層限流架構詳解

拼團系統多層限流架構詳解

一、整體架構設計理念

多層限流采用"層層設防"思想,通過網關層全局流量控制→服務層接口粒度限流→本地資源隔離→熱點參數精準防護的四級防御體系,實現從粗到細的流量治理,確保大促期間系統穩定性。

二、各層級限流方案實現
1. 網關層限流:Sentinel + 網關流控規則

技術實現:基于Spring Cloud Gateway整合Sentinel實現

spring:cloud:gateway:routes:- id: group-buying-routeuri: lb://big-market-apppredicates:- Path=/api/v1/group/**filters:- name: SentinelGatewayFilterargs:resourceName: groupBuyingApiruleType: flowsentinel:transport:dashboard: 192.168.1.100:8080datasource:ds1:nacos:server-addr: 192.168.1.101:8848dataId: gateway-sentinel-rulesgroupId: DEFAULT_GROUPrule-type: gw-flow

流控規則配置(Nacos中存儲):

[{"resource": "groupBuyingApi","resourceMode": 0,"grade": 1,"count": 5000,"intervalSec": 1,"controlBehavior": 2,"burst": 1000,"maxQueueingTimeoutMs": 500}
]

關鍵參數說明

  • grade: 1:基于QPS限流
  • count: 5000:基礎閾值5000 QPS
  • controlBehavior: 2:勻速排隊模式
  • maxQueueingTimeoutMs: 500:最大排隊時間500ms
2. 服務層限流:RateLimiter令牌桶算法

代碼實現:在拼團下單接口添加令牌桶限流

@Service
public class GroupBuyingService {// 令牌桶限流:1000 QPS,桶容量200private final RateLimiter orderRateLimiter = RateLimiter.create(1000.0);private final int ORDER_LIMIT_WAIT_SECONDS = 2;public ResultDTO createOrder(OrderDTO orderDTO) {// 嘗試獲取令牌,最多等待2秒boolean acquired = orderRateLimiter.tryAcquire(ORDER_LIMIT_WAIT_SECONDS, TimeUnit.SECONDS);if (!acquired) {log.warn("下單接口限流觸發,用戶ID: {}", orderDTO.getUserId());return ResultDTO.fail(ReturnCodeEnum.SYSTEM_BUSY);}// ... 正常下單邏輯 ...return ResultDTO.success(orderResult);}
}

動態調整實現:結合Nacos配置中心實現限流閾值動態調整

@Configuration
@RefreshScope
public class RateLimiterConfig {@Value("${rate-limiter.group-buying.qps:1000}")private double groupBuyingQps;@Bean("groupBuyingRateLimiter")public RateLimiter groupBuyingRateLimiter() {return RateLimiter.create(groupBuyingQps);}
}
3. 本地線程池:資源隔離與并發控制

線程池配置:為拼團業務創建獨立線程池

@Configuration
public class ThreadPoolConfig {@Bean("groupBuyingThreadPool")public ExecutorService groupBuyingThreadPool() {ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("group-buying-pool-%d").setDaemon(true).build();return new ThreadPoolExecutor(10, // corePoolSize50, // maximumPoolSize60, // keepAliveTimeTimeUnit.SECONDS,new LinkedBlockingQueue<>(1000), // workQueuethreadFactory,new ThreadPoolExecutor.AbortPolicy() // 拒絕策略);}
}

使用方式

@Autowired
@Qualifier("groupBuyingThreadPool")
private ExecutorService groupBuyingThreadPool;public void processGroupBuyingTask(Runnable task) {try {groupBuyingThreadPool.submit(task);} catch (RejectedExecutionException e) {log.error("拼團任務提交失敗,線程池已滿", e);// 執行降級策略fallbackProcess();}
}
4. 熱點限流:Sentinel熱點參數防護

代碼實現:對商品ID參數進行熱點限流

@RestController
@RequestMapping("/api/v1/group")
public class GroupBuyingController {@PostMapping("/join")@SentinelResource(value = "joinGroup", blockHandler = "handleJoinGroupBlock")public ResultDTO joinGroup(@RequestParam Long productId, @RequestParam Long userId) {// ... 拼團邏輯 ...}public ResultDTO handleJoinGroupBlock(Long productId, Long userId, BlockException e) {log.warn("商品{}拼團請求被限流,用戶ID:{}", productId, userId);return ResultDTO.fail(ReturnCodeEnum.PRODUCT_HOT_LIMIT);}
}

熱點規則配置(通過Sentinel Dashboard):

  • 資源名:joinGroup
  • 參數索引:0(productId參數)
  • 限流閾值:500 QPS
  • 高級選項:為特定商品ID(如爆款商品)設置單獨閾值
三、限流效果監控與動態調整
  1. 監控體系

    • 整合Prometheus + Grafana監控各層級限流指標
    • 自定義限流指標:gateway_requests_totalservice_rate_limited_total
  2. 動態調整策略

    • 日常模式:基礎閾值運行
    • 預熱模式:活動開始前30分鐘逐步提升閾值
    • 高峰模式:活動期間根據實時流量動態調整
    • 應急模式:異常時自動降低閾值并觸發告警
四、降級與兜底策略
  1. 多級降級

    • 輕度限流:返回排隊提示(“當前參與人數較多,請稍后再試”)
    • 中度限流:關閉非核心功能(如評價、分享)
    • 重度限流:返回靜態頁面或緩存結果
  2. 兜底方案

    • 核心接口降級為Redis緩存 + 異步補償
    • 非核心接口直接返回默認值
五、大促實戰經驗
  1. 壓測驗證

    • 單接口壓測:驗證各層級限流閾值有效性
    • 全鏈路壓測:模擬真實流量場景下的限流效果
    • 混沌測試:故意制造熱點商品流量驗證防護能力
  2. 容量規劃

    • 根據歷史數據預測流量峰值,預留30%緩沖容量
    • 關鍵節點(如庫存服務)單獨設置更嚴格的限流閾值

通過以上多層限流架構,可有效抵御千萬級流量沖擊,確保拼團系統在大促期間的高可用性和穩定性。

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

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

相關文章

[ctfshow web入門] web92 `==`特性與intval特性

信息收集 和之前的題差不多&#xff0c;這次是使用了不嚴格相等的&#xff0c;詳情看這篇博客&#xff1a; 和 在 PHP 中有何區別&#xff1f;一共包含哪些部分&#xff1f; 首先&#xff0c;不能使$num 4476&#xff0c;然后需要使intval($num,0)4476 include("flag…

在Springboot項目部署時遇到,centos服務器上,curl請求目標地址不通 ,curl -x 可以請求通的解決辦法

在甲方服務器部署項目時&#xff0c;通常遇到需要開通外網權限的問題&#xff0c;有的是直接給開通服務器的白名單&#xff0c;就可以直接訪問白名單外網地址了。也有的是通過網絡轉發&#xff0c;將url前面的部分替換&#xff0c;可以進行網絡請求。有一次遇到一個罕見的&…

Python異步爬蟲編程技巧:從入門到高級實戰指南

Python異步爬蟲編程技巧&#xff1a;從入門到高級實戰指南 &#x1f680; &#x1f4da; 目錄 前言&#xff1a;為什么要學異步爬蟲異步編程基礎概念異步爬蟲核心技術棧入門實戰&#xff1a;第一個異步爬蟲進階技巧&#xff1a;并發控制與資源管理高級實戰&#xff1a;分布式…

JMeter-SSE響應數據自動化3.0

背景 此次因為多了一些需要過濾排除的錯誤(數量很少)&#xff0c;還需要修改下JMeter的jtl文件輸出數據&#xff08;后續統計數據需要&#xff09; 所以只涉及到JSR腳本的一些改動(此部分改動并不會影響到JMeter的HTML報告) 改動 主要通過設置JMeter中prev輸出數據變量threadN…

012 進程狀態和優先級

&#x1f984; 個人主頁: 小米里的大麥-CSDN博客 &#x1f38f; 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 &#x1f381; GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄 進程狀態和優先級一、進程狀態分類特殊狀態說明 二、如何查看進程…

React JSX原理

JSX本質 實質上是React.createElement()的語法糖

Java-51 深入淺出 Tomcat 手寫 Tomcat 類加載機制 雙親委派機制 生命周期 插件化

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; 目前2025年06月13日更新到&#xff1a; AI煉丹日志-28 - Aud…

從C++編程入手設計模式——責任鏈模式

從C編程入手設計模式——責任鏈模式 ? 當我們的一個請求需要多個對象去處理&#xff0c;但具體由誰來處理&#xff0c;是根據情況動態決定的。例如&#xff0c;一個日志系統中&#xff0c;可能希望把錯誤信息寫入文件&#xff0c;把提示信息輸出到控制臺&#xff0c;而不是每…

泛型方法調用需要顯示指定泛型類型的場景

泛型類型的推斷確定 一般來說&#xff0c;泛型類型的推斷可以由以下幾個場景確定&#xff1a; 變量定義指定類型 List<String> strList new ArrayList<>();ArrayList的泛型類型是依據變量的類型確定的。 方法返回值確定 Overridepublic Function<List<I…

Deep Research:開啟深度研究的智能新時代

在當今信息爆炸的時代&#xff0c;人們面臨著海量的信息&#xff0c;無論是專業人士還是普通消費者&#xff0c;都迫切需要一種高效、精準的方式來獲取和分析信息。OpenAI 推出的 Deep Research&#xff0c;宛如一顆璀璨的新星&#xff0c;在知識的海洋中為我們導航&#xff0c…

曼昆《經濟學原理》第九版 宏觀經濟學 第二十四章失業與自然失業率

以下是曼昆《經濟學原理》第九版宏觀經濟學第二十四章**“失業與自然失業率”**的詳細講解&#xff0c;從零基礎開始構建知識框架&#xff0c;結合中國實際案例與生活化比喻&#xff0c;幫助小白系統理解核心概念&#xff1a; 一、知識框架&#xff1a;失業的“全景圖” 1. 核…

【軟考高級系統架構論文】論軟件系統架構風格

論文真題 請以“軟件系統架構風格”為論題,依次從以下三個方面進行論述: 1、概要敘述你參與分析和開發的軟件系統開發項目以及你所擔任的主要工作。 2、分析軟件系統開發中常用的軟件系統架構風格有哪些?詳細闡述每種風格的具體含義。 3、詳細說明在你所參與的軟件系統開發項…

LeetCode--35.搜索插入位置

解題思路&#xff1a; 1.獲取信息&#xff1a; 給定一個升序排列的數組和一個整數&#xff0c;要求查找該整數應該在數組中插入的位置 限制條件是&#xff0c;要求時間復雜度為O(log N) 2.分析題目&#xff1a; 時間復雜度要求O(log N)&#xff0c;那么就使用二分查找法&#x…

Unix、Linux、POSIX、Minix 區別與聯系

一、Unix&#xff1a;現代操作系統的技術原型 誕生&#xff1a;1969年貝爾實驗室&#xff0c;用C語言重寫后實現跨平臺&#xff08;1973年&#xff09;。核心設計&#xff1a; 一切皆文件&#xff08;設備/進程均抽象為文件&#xff09;。管道&#xff08;|&#xff09;和文本…

python計算長方形的周長 2025年3月青少年電子學會等級考試 中小學生python編程等級考試一級真題答案解析

python計算長方形的周長 2025年3月 python編程等級考試一級編程題 博主推薦 所有考級比賽學習相關資料合集【推薦收藏】 1、Python比賽 信息素養大賽Python編程挑戰賽 藍橋杯python選拔賽真題詳解 藍橋杯python省賽真題詳解 藍橋杯python國賽真題詳解 2、Python考級 p…

使用 RedisVL 進行復雜查詢

一、前置條件 在開始之前&#xff0c;請確保&#xff1a; 已安裝 redisvl 并激活相應的 Python 環境。運行 Redis 實例&#xff0c;且 RediSearch 版本 > 2.4。 二、初始化與數據加載 我們將使用一個包含用戶信息的數據集&#xff0c;字段包括 user、age、job、credit_s…

「Linux文件及目錄管理」vi、vim編輯器

知識點解析 vi/vim編輯器簡介 vi:Linux默認的文本編輯器,基于命令行操作,功能強大。vim:vi的增強版,支持語法高亮、多窗口編輯、插件擴展等功能。vi/vim基本模式 命令模式:默認模式,用于移動光標、復制、粘貼、刪除等操作。插入模式:按i進入,用于輸入文本。末行模式:…

電容器保護測控裝置如何選型?

在電力系統的無功補償環節&#xff0c;?電容器保護測控裝置是保障并聯電容器組安全穩定運行的核心設備。其選型需綜合考量保護需求、系統環境及擴展功能。以下是關鍵選型要素分析&#xff1a; ?一、明確核心功能需求? 電容器保護測控裝置&#xff0c;選型時需匹配電容器組實…

最近小峰一直在忙國際化項目,確實有點分身乏術... [特殊字符] 不過! 我正緊鑼密鼓準備一系列干貨文章/深度解析

本人詳解 大家晚上好呀&#xff01;&#x1f319; 最近小峰一直在忙國際化項目&#xff0c;確實有點分身乏術... &#x1f605; 不過&#xff01; 我正緊鑼密鼓準備一系列干貨文章/深度解析&#xff08;選一個更符合你內容的詞&#xff09;&#xff0c;很快就會和大家見面啦&am…

OpenCV CUDA模塊設備層-----設備端(GPU)線程塊級別的一個內存拷貝工具函數blockCopy()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在同一個線程塊&#xff08;thread block內&#xff0c;將 [beg, end) 范圍內的數據并行地復制到 out 開始的位置。 它使用了 CUDA 線程協作機制…