訊息積壓是我們在使用訊息佇列時經常遇到的問題,它的直接原因是系統中某個部分出現了性能問題,沒有來得及處理上游發送的訊息,
優化性能避免訊息積壓
當我們引入訊息系統后,站在訊息系統的角度,整個系統可以分為三部分:1. 訊息生產者,2. 訊息佇列,3. 訊息消費者,
我們在談論優化性能避免積壓訊息時,重點會放在訊息生產者和訊息消費者這兩部分,對于絕大多數使用訊息佇列的業務來說,訊息佇列本身的處理能力要遠大于業務系統的處理能力,
訊息生產者性能優化
如果我們的代碼發送訊息的性能有問題,我們可以檢查一下是不是發訊息之前的業務邏輯耗時太多了,
我們可以通過調整發送訊息的批量大小,或者增加并發,來解決訊息生產者面臨的問題,至于應該選擇批量發送還是增加并發,主要取決于發送端程式的業務性質,
- 線上運行的微服務,主要接收RPC請求處理在線業務,它對請求回應時延比較敏感,適合并發的方式來提升性能,
- 離線分析系統,不關心時延,更注重整個系統的吞吐量,這種情況適用于批量方式來提升性能,
訊息消費者性能優化
我們要保證消費端的性能要好于生產端的發送性能,這樣的系統才能健康的持續運行,
消費端除了優化消費業務之外,也可以通過水平擴容,增加消費端的并發數來提升性能,需要注意的是,在擴容消費者的實體數量的同時,必須同步擴容主題中的磁區(佇列)數量,確保Consumer的數量和磁區的數量是盡量相等的,
如果Consumer的實體數量超過磁區數量,這樣的擴容是完全沒有效果的,因為同一個磁區(佇列)同時只能有一個Consumer去處理訊息,
怎么處理積壓訊息?
導致訊息佇列突然增加積壓的原因有兩種:要么訊息發送變快了,要么訊息消費變慢了,
大部分訊息佇列都內置了監控的功能,只要通過監控資料,很容易確定是哪種原因,
如果短時間內沒有足夠的服務器資源區進行擴容,那么可以考慮對服務進行系統降級,通過關閉一些不重要的業務,減少發送方發送的資料,最低限度讓系統保持正常運轉,服務一些重要業務,
如果我們發現無論是發送訊息的速度還是消費訊息的速度和原來相比沒有什么變化,可以去檢查一下消費端,看看是不是因為消費失敗導致了一條訊息被反復消費,這樣也會拖慢這個系統去消費訊息的速度,
作者:李潘 出處:http://wing011203.cnblogs.com/ 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/546576.html
標籤:架構設計
