Simple Message Queue (formerly MNS)對超過限流閾值的請求執行限流策略,從而避免底層資源承受過高壓力。
限流行為
當流量接近或達到限流閾值時,服務端會根據即時資源水位自動彈性調整限流閾值,在多數情境下,可動態支撐更高並發請求且使用者無感知。若觸發臨時限流(如突發峰值激增、叢集資源瓶頸等),系統將在自動擴容完成後恢複流量處理能力並同步提升限流閾值。
當觸發限流報錯時,系統將啟動反壓機制,此時超出閾值的請求會在服務端被暫時掛起約500毫秒後返回,避免系統因過載而影響整體效能和穩定性。
錯誤碼
觸發限流策略後,Simple Message Queue (formerly MNS)服務端會返回如下錯誤碼資訊。
HTTP狀態代碼 | 錯誤碼Code | 錯誤描述資訊Message |
429 | TooManyRequests | The request is denied by cluster flow limiter for too many requests. |
限流閾值說明
隊列消費模式下的異常行為限流策略
在標準的隊列消費模式中,用戶端在成功處理訊息後,應在服務端刪除該訊息。如果用戶端大量出現“只接收訊息,但不發送刪除訊息請求”的非標準行為,系統將視其為異常消費,並觸發限流機制以保障系統穩定性。限流後,用戶端接收新訊息的速度會大幅降低。
觸發限流的閾值(滿足任一條件即可):
期間:該異常行為持續超過 30 分鐘。
訊息數量:累計接收但未刪除的訊息總量達到 5,000 條。
流量速率:接收但未刪除的瞬時速率超過 1,000 TPS。
大流量請求的限流策略
每個主帳號每個地區限流閾值預設值:20000 TPS。如果流量已超過20000 TPS,可提交工單提高預設限流閾值。
請求次數計數說明如下:
每調用API介面1次,計為1次請求。
批量發送情境TPS疊加:當使用BatchSendMessage介面請求某隊列時,BatchSendMessage的TPS = BatchSendMessage每秒實際請求次數×介面中的訊息條數。例如,BatchSendMessage介面1秒中實際請求次數是100,介面中包含10條訊息,則佔用單個隊列TPS=100×10 = 1000。
批量消費情境TPS疊加:當使用BatchReceiveMessage介面請求某隊列時,BatchReceiveMessage的TPS = BatchReceiveMessage每秒實際請求次數×介面中的訊息條數。例如,BatchReceiveMessage介面1秒中實際請求次數是100,介面中包含10條訊息,則佔用單個隊列TPS=100×10 = 1000。
避免限流影響
為了避免限流策略對您業務的影響,請您關注以下兩方面: