博客 / 詳情

返回

限流系列之三:TDMQ for Apache Pulsar 限流技術深度解析

導語

在高速、高吞吐量的消息處理場景中,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 後才能被處理。

  • 從生產者的角度來看,當出現生產限流時,由於消息需要等待處理,發送消息的耗時必然會增加。如果等待時間過長,就可能出現發送超時的情況。
  • 從消費者的角度來看,當發生消費限流時,消息從生產到消費的整體鏈路時延會增加。這就可能導致消息在隊列中堆積,影響整個數據處理流程的效率。

限流原理

e813a685d5ed2919bebd671d7fca74c6.png

生產端

生產端的限流原理是基於 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 版的限流技術,能夠為分佈式應用系統提供更加可靠的消息通信保障,助力業務的穩健發展。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.