導語
在高速、高吞吐量的消息處理場景中,TDMQ Pulsar 版以其卓越的性能和可擴展性成為眾多企業的首選。然而,隨著生產者和消費者以極高的速度生產/消費大量消息,服務器資源如 CPU、內存、網絡及磁盤 IO 等可能會面臨飽和風險。為此,TDMQ Pulsar 版設計了完善的限流機制,以保護集群資源,確保系統的全局穩定性。本文將深入探討 TDMQ Pulsar 版的集群級與主題分區限流技術,并提供實踐指南。
為什么要做限流?
在 TDMQ Pulsar 版集群的運行過程中,生產者和消費者的高速運作猶如一把雙刃劍,在帶來高效數據傳輸的同時,也對服務端資源造成了巨大的壓力。當它們以極高的速度生產和消費大量消息時,服務端的 CPU 需要不斷地處理這些消息的生產和消費請求,磁盤需要存儲大量的消息數據以及相關的元數據信息,網絡磁盤 IO 則需要頻繁地進行數據的讀寫操作,以保證消息的持久化存儲和快速傳輸。如果不對這些操作進行限制,很容易導致 CPU 使用率飆升,內存耗盡,網絡磁盤 IO 飽和,進而影響整個集群的性能和穩定性。
這種資源飽和的情況可能會引發一系列嚴重的問題。例如,CPU 過度繁忙會導致消息處理延遲增加,使得生產者發送消息的耗時大幅增長,甚至出現發送超時的情況;內存不足可能會導致消息丟失或者數據處理錯誤;網絡磁盤 IO 瓶頸則會導致消息堆積,嚴重時可能會使整個集群陷入癱瘓狀態。為了避免這些問題的發生,確保集群在高負載情況下仍能穩定運行,TDMQ Pulsar 版設計了一套完整的限流方案。
TDMQ Pulsar 版限流機制淺談
TDMQ Pulsar 版支持兩種維度的限流:集群級分布式限流和主題分區限流。這兩種限流機制就像是為 TDMQ Pulsar 版集群安裝了兩道堅固的 “安全閥”,確保集群在高負載情況下仍能穩定運行。
- 集群級分布式限流:適用于 TDMQ Pulsar 版專業集群。通過按照實例規格設置不同的限流閾值,對整個集群進行自我保護,避免因為資源消耗過高影響集群質量,造成全局穩定性風險。
- 主題分區限流:適用于所有類型的 TDMQ Pulsar 版集群。對每個主題分區的生產和消費速率進行限制。
集群級分布式限流:秒級窗口的自我保護機制
限流機制
TDMQ Pulsar 版的生產限流機制采用了一種獨特的延遲回包方式,這種方式就像是在消息傳輸的道路上設置了一個 “紅綠燈”,通過控制消息的處理節奏來實現限流。其限流的統計窗口被設定為 1 秒,這是一個關鍵的時間單位,所有的限流統計和控制都在這個時間窗口內進行。
以生產 TPS 限流為例,假設我們將生產 TPS 設置為 100,這就意味著在 1 秒的時間內,系統最多處理 100 個消息。當用戶在 1 秒中的前 400ms 發送了 100 個消息時,此時已經達到了設定的 TPS 閾值。那么第 101 個消息發送的請求就會遇到 “紅燈”,它需要等待 600ms 后才能被處理。
-
從生產者的角度來看,當出現生產限流時,由于消息需要等待處理,發送消息的耗時必然會增加。如果等待時間過長,就可能出現發送超時的情況。
-
從消費者的角度來看,當發生消費限流時,消息從生產到消費的整體鏈路時延會增加。這就可能導致消息在隊列中堆積,影響整個數據處理流程的效率。
限流原理
生產端
生產端的限流原理是基于 1 秒的統計窗口來實現的。當統計窗口內的配額被用盡時,服務端會將生產者的 Channel 全部關閉。直到下一個時間窗口到來,服務端才會重新打開生產者的 Channel,重新允許處理消息發送請求。
消費端
消費端的限流原理同樣基于 1 秒的統計窗口。當統計窗口內的配額被用盡時,服務端會停止推送消息到消費者。消費者在這段時間內無法接收到新的消息,直到下一個時間窗口,服務端恢復推送消息,消費者才能繼續進行消費操作。
需要注意的是,生產端限流后關閉 Channel,具體來說就是當生產出現限流后,服務端會將生產者對應的 TCP 連接通道關閉。關閉后,服務端就不再接受對應 TCP 連接的請求,直到 TCP 連接通道被再次打開。
實踐教程
合理選購集群規格:用戶應深入了解業務實際的峰值生產 / 消費量,這需要對業務的歷史數據進行詳細分析,預測未來的業務增長趨勢。根據生產消費的扇出比例,科學合理地設置限流的生產 / 消費分配比例。在正式上線前,務必做好壓測工作,通過模擬真實的業務場景和負載情況,提前評估集群容量是否能夠滿足業務需求。
避免延遲消息字段設置錯誤:如果業務發送的是非延遲消息,一定要注意不要設置延遲消息字段。因為一旦發送端設置了延遲消息字段,無論設置的延遲時間是多久,服務端都會按照延遲消息統計速率。以 Java 為例(GO 等其他 SDK 也類似),只要在發送消息的時候,設置了 DeliverAfter 或者 DeliverAt,就會被認為是延遲消息,即使里面的值為 0 或者小于當前時間。
配置集群的生產/消費的速率和帶寬的告警:當集群的生產 / 消費的速率和帶寬超過設置規格的 80% 時,建議及時升配專業版實例規格,以避免限流帶來的耗時增加的風險。
配置生產 / 消費的限流次數的告警:當出現限流的時候,表示在秒級的窗口內存在生產 / 消費超限的情況,這時候也建議及時升配專業版實例的規格,避免限流帶來耗時增加的風險。
常見現象說明
問題1:為什么生產/消費低于規格時會觸發限流?
如上面限流原理所述,限流是以 秒(s) 為單位的,控制臺監控平臺數據是按分鐘(min)維度采集上報。監控平臺上的生產/消費的統計值的計算公式是 [1min內消息量/60]。當客戶端生產消費的量在 1min 內分布不均衡的時候,可能集中在 1min 內的 1 秒或者幾秒的時間窗口內生產/消費量很高,超過限流窗口中的配額,其他時間遠低于限流窗口配額,這種情況下,監控到的生產/消費低于實例規格,但是觸發了限流。
問題2:為什么生產/消費峰值會高于實例規格?
-
情況1:TDMQ Pulsar 版是分布式系統,一個 TDMQ Pulsar 版節點由多個 Broker 節點組成,同一個時間點(一個限流窗口內),限流是由各個節點進行的,每個節點的限流閾值是當前集群剩余閾值。例如集群限流閾值 1000,Broker 節點數量為5,當實際使用量為 750 的時候(假設此時每個節點的使用量均勻,都是 150),每個節點此時的限流閾值是 400(150 + 1000-750)。此時,實際上瞬時能達到的流量可能到 2000(400*5),這樣,一個限流窗口內可能出現超過規格的情況。
-
情況2:如上面限流原理所述,當出現限流后,會將寫的通道關閉,但是當前的請求(即使已經超過了限流閾值)還是會繼續處理,所以,當并發請求較高的情況下,可能出現一個統計窗口內超過限流閾值的情況。
問題3:如何判斷 TDMQ Pulsar 版是否發生限流?
在 TDMQ Pulsar 版專業集群控制臺的集群監控頁面查看集群監控信息,當限流次數大于 0,證明發生過限流。
主題分區限流:細粒度的流量管控
限流原理
主題分區限流在 TDMQ Pulsar 版的消息處理體系中扮演著重要的角色,它如同一個精密的流量調節閥,對每個主題分區的生產和消費速率進行精細管控,確保整個系統在高負載情況下仍能穩定、高效地運行。與集群級分布式限流不同,主題分區限流適用于所有類型的 TDMQ Pulsar 版集群,為各種規模和應用場景的集群提供了統一的流量控制保障。
生產端
生產端的限流邏輯依賴于內部的定時任務,這個定時任務默認每 50ms 執行一輪,檢查每個分區在 1 秒的時間窗口內生產的消息量是否超過了預設的配額。
當檢測到某個分區的生產配額被用盡,即出現限流情況時,服務端會采用軟限流的方式進行處理。具體來說,服務端會關閉主題對應生產者的讀 Channel,不再處理生產請求。不過,這種關閉并非永久性的,至多等待 1 秒后,服務端會重新恢復生產者的讀 Channel,允許生產者繼續處理發送消息的請求,直到再次出現限流。
從客戶端的角度來看,當出現限流后,由于消息發送請求需要等待讀 Channel 恢復才能被處理,發送耗時必然會增加。如果等待時間過長,就可能出現發送超時的情況。
消費端
消費端的限流邏輯同樣是基于 1 秒的時間窗口,統計消費的 TPS 和帶寬是否超過了配額。
當出現限流時,服務端會在 1 秒內停止推送消息到消費者。消費者在這段時間內無法接收到新的消息,這會導致消息從生產端到消費端的整體時延增加,因為消息在服務端被暫時扣留,無法及時傳遞到消費者手中。如果限流情況持續存在,就可能出現消息堆積的情況。
實踐教程
-
合理擴容分區:單主題分區有生產 / 消費的 TPS 和帶寬限制,如果主題的 TPS / 帶寬并發比較大,需要適當擴容分區。
-
配置告警:配置主題的生產 / 消費的速率和流量已使用配額百分百的告警,當超過 80%,建議擴容分區數量,避免觸發單主題分區限流。
常見現象說明
為什么分區的生產/消費流量可以超過限流閾值?
如上面限流原理所述,主題分區的限流采用的是非精確軟限制的限流算法,結合生產端和消費端的限流邏輯,生產和消費都可能出現流量超過限流閾值的情況。
結語
TDMQ Pulsar 版的限流技術是保障其在復雜業務場景下穩定運行的關鍵因素。在實際應用中,用戶需要深入理解限流機制的原理和特點,根據業務的實際需求和流量模式,合理地配置限流參數,如生產 / 消費速率、帶寬限制、配額等。同時,要充分利用實踐教程中的建議,做好集群規格的選擇、告警配置以及分區擴容等工作,以確保系統在高負載情況下仍能保持高效、穩定的運行。
此外,對于常見現象的理解和應對也是至關重要的。通過對生產 / 消費帶寬低于實例規格時觸發限流、生產 / 消費峰值高于實例規格以及如何判斷限流等問題的深入分析,用戶能夠更好地排查和解決實際應用中可能出現的問題,提高系統的可靠性和可用性。總之,合理運用 TDMQ Pulsar 版的限流技術,能夠為分布式應用系統提供更加可靠的消息通信保障,助力業務的穩健發展。