訊息佇列 RocketMQ 遇上可觀測:業務核心鏈路視覺化

阿里巴巴雲原生發表於2022-01-27

作者:文婷、不周

引言: 本篇文章主要介紹 RocketMQ 的可觀測性工具線上上生產環境的最佳實踐。RocketMQ的可觀測效能力領先業界同類產品,RocketMQ 的 Dashboard 和訊息軌跡等功能為業務核心鏈路保駕護航,有效應對線上大規模生產使用過程中遇到的容量規劃、訊息收發問題排查以及自定義監控等場景。

訊息佇列簡介

進入主題之前,首先簡要介紹下什麼是阿里雲的訊息佇列?

阿里雲提供了豐富的訊息產品家族,訊息產品矩陣涵蓋了網際網路、大資料、物聯網等各個業務場景的領域,為雲上客戶提供了多維度可選的訊息解決方案。無論哪一款訊息佇列產品,核心都是幫助使用者解決業務和系統的非同步、解耦以及應對流量洪峰時的削峰填谷,同時具備分散式、高吞吐、低延遲、高可擴充套件等特性。

但是不同的訊息產品在面向客戶業務的應用中也有不同的側重。簡單來做,訊息佇列 RocketMQ 是業務領域的首選訊息通道;Kafka 是大資料領域不可或缺的訊息產品;MQTT 是物聯網領域的訊息解決方案;RabbitMQ 側重於傳統業務訊息領域;雲原生的產品整合和事件流通道是通過訊息佇列 MNS 來完成;最後事件匯流排 EventBridge 是一個阿里雲上的一個事件樞紐,統一構建事件中心。

本篇主要講的是業務領域的訊息首選通道:訊息佇列 RocketMQ。RocketMQ 誕生於阿里的電商系統,具有高效能、低延遲、削峰填谷等能力,並且提供了豐富的在業務和訊息場景上應對瞬時流量洪峰的功能,被整合在使用者的核心業務鏈路上。

作為一個核心業務鏈路上的訊息,就要求 RocketMQ 具備非常高的可觀測效能力,使用者能通過可觀測效能力及時的監控定位異常波動,同時對具體的業務資料問題進行排查。由此,可觀測效能力逐步成為訊息佇列 RocketMQ 的核心能力之一。

那麼什麼是可觀測能力呢?下面簡單對可觀測能力進行介紹。

可觀測能力

提到可觀測能力,大家可能最先想到的是可觀測的三要素:Metrics(指標)、Tracing(追蹤)和 Logging(日誌)。

結合訊息佇列的理解,可觀測能力三要素的細化解釋如下:

Metrics:Dashborad 大盤

1)指標涵蓋豐富: 包含訊息量、堆積量、各個階段耗時等指標,每個指標從例項、Topic、消費 GroupID 多維度做聚合和展示;

2)訊息團隊最佳實踐模板: 為使用者提供最佳模板,特別是在複雜的消費訊息場景,提供了豐富的指標幫助快速定位問題,並持續迭代更新;

3)Prometheus + Grafana: Prometheus標準資料格式、利用Grafana展示,除了模板,使用者也可以自定義展示大盤。

Tracing:訊息軌跡

1)OpenTelemetry tracing標準: RocketMQ tracing 標準已經合併到 OpenTelemetry 開源標準,規範和豐富 messaging tracing 場景定義;

2)訊息領域定製化展示: 按照訊息維度重新組織抽象的請求 span 資料,展示一對多的消費,多次消費資訊,直觀、方便理解;

3)可銜接 tracing鏈路上下游: 訊息的 tracing 可繼承呼叫上下文,補充到完整呼叫鏈路中,訊息鏈路資訊串聯了非同步鏈路的上游和下游鏈路資訊。

Logging:客戶端日誌標準化

1)Error Code標準化: 不同的錯誤有唯一的 error code;

2)Error Message 完整: 包含完整的錯誤資訊和排序所需要的資源資訊;

3)Error Level 標準化: 細化了各種不同錯誤資訊的日誌級別,讓使用者根據 Error、Warn 等級別配置更合適和監控告警。

瞭解訊息佇列和可觀測能力的基礎概念,讓我們來看看當訊息佇列 RocketMQ 遇到可觀測,會產生什麼樣的火花?

RocketMQ 的可觀測性工具的概念介紹

從上文的介紹中可以看到 RocketMQ 的可觀測能力能夠幫助使用者根據錯誤資訊排查訊息在生產和消費過程中哪些環節出了問題,為了幫助大家更好的理解功能的應用,先簡要介紹下訊息生產消費流程過程中的一些概念。

訊息生產和消費流程概念

首先我們先明確以下幾個概念:

  • Topic:訊息主題,一級訊息型別,通過Topic對訊息進行分類;
  • 訊息(Message):訊息佇列中資訊傳遞的載體;
  • Broker:訊息中轉角色,負責儲存訊息,轉發訊息;
  • Producer:訊息生產者,也稱為訊息釋出者,負責生產併傳送訊息;
  • Consumer:訊息消費者,也稱為訊息訂閱者,負責接收並消費訊息。

訊息生產和消費的流程簡單來說就是生產者將訊息傳送到 topic 的 MessageQueue 上進行儲存,然後消費者去消費這些 MessageQueue 上的訊息,如果有多個消費者,那麼一個完整的一次訊息生產發生的生命週期是什麼樣子的?

這裡我們以定時訊息為例,生產者 Producer 傳送訊息經過一定的耗時到達 MQ Server,MQ 將訊息儲存在 MessageQueue,這時佇列中有一個儲存時間,如果是定時訊息,還需要經過一定的定時時間之後才能被消費者消費,這個時間就是訊息就緒的時間;經過定時的時間後消費者 Consumer 開始消費,消費者從 MessageQueue 中拉取訊息,然後經過網路的耗時之後到達消費者客戶端,這時候不是低碼進行消費的,會有一個等待消費者資源執行緒的過程,等到消費者的執行緒資源後才開始進行真正的業務訊息處理。

從上面的介紹中可以看出,業務訊息有一定的耗時處理,完成之後才會向服務端返回ack的結果,在整個生產和消費的過程中,最複雜的便是消費的過程,因為耗時等原因,會經常有訊息堆積的場景,下面來重點看一下在訊息堆積場景下各個指標表示的含義。

訊息堆積場景

如上圖,訊息佇列中,灰色部分的訊息表示是已完成的訊息量,就是消費者已處理完成並返回 ack 的訊息;橙色部分的訊息表示這些訊息已經被拉取到消費者客戶端,正在被處理中,但是還沒有返回處理結果的訊息,這個訊息其實有一個非常重要的指標,就是訊息處理耗時;最後綠色的訊息表示這些訊息在已經發生的 MQ 佇列中已儲存完成,並且已經是可被消費者消費的一個狀態,稱為已就緒的訊息。

已就緒訊息量(Ready messages):

含義:已就緒訊息的訊息的條數。

作用:訊息量的大小反映還未被消費的訊息規模,在消費者異常情況下,就緒訊息量會變多。

訊息排隊時間(Queue time)

含義:最早一條就緒訊息的就緒時間和當前時間差。

作用:這個時間大小反映了還未被處理訊息的時間延遲情況,對於時間敏感的業務來說是非常重要的度量指標。

RocketMQ 的可觀測性工具的功能介紹

結合上文介紹的訊息佇列 RocketMQ 可觀測概念,下面具體對 RocketMQ 的可觀測性工具的兩個核心功能進行介紹。

可觀測功能介紹 - Dashboard

Dashboard 大盤可以根據各種引數檢視指定的指標資料,主要的指標資料包含下面三點:

1)Overview(概覽):

  • 檢視例項據總的訊息收發量、TPS、訊息型別分佈情況。
  • 檢視是的各個指標當前的分佈和排序情況:傳送訊息量最多的 Topic、消費訊息量最多的 GroupID、堆積訊息量最多的 GroupID、排隊時間最長的 GroupID 等。

2)Topic(訊息傳送):

  • 檢視指定 Topic 的傳送訊息量曲線圖。
  • 檢視指定 Topic 的傳送成功率曲線圖。
  • 檢視指定 Topic 的傳送耗時曲線圖。

3)GroupID(訊息消費):

  • 檢視指定 Group 訂閱指定 Topic 的訊息量曲線圖。
  • 檢視指定 Group 訂閱指定 Topic 的消費成功率。
  • 檢視指定 Group 訂閱指定 Topic 的消費耗時等指標。
  • 檢視指定 Group 訂閱指定 Topic 的訊息堆積相關指標。

可觀測功能介紹 - 訊息軌跡

在 Tracing 方面提供了訊息軌跡功能,主要包含以下三方面能力:

1)便捷的查詢能力: 可根據訊息基本資訊查詢相關的軌跡;二期還可以根據結果狀態、耗時時長來過濾查詢,過濾出有效軌跡快速定位問題。

2)詳細的 tracing 資訊: 除了各個生命週期的時間和耗時資料,還包含了生產者、消費者的賬號和機器資訊。

3)優化展示效果: 不同的訊息型別軌跡;多個消費 GroupID 的場景;同個消費 GroupID 多次重投的場景等。

11(1).png

最佳實踐

場景一:問題排查

1)目標: 訊息生產消費健康情況

2)原則

  • 一級指標:用來報警的指標,公認的沒有異議的指標。
  • 二級指標:一級指標發生變化的時候,通過檢視二級指標,能夠快速定位問題的原因所在。
  • 三級指標:定位二級指標波動原因。根據各自業務的特點和經驗新增。

基於目標和原則,生產者使用者和消費者使用者問題排查和分析方式如下:

場景二:容量規劃

容量規劃場景下只要解決下面三個問題:

1)問題一:怎樣評估例項容量?

解決方法:

  • 例項詳情頁》檢視指定例項資料統計,可以看到所選時間段內的最大訊息收發的 TPS 峰值。
  • 鉑金版例項可以根據這個資料來新增報警監控和判斷業務。

2)問題二:怎樣檢視標準版例項的消耗

解決方法:

  • 可以檢視概覽總訊息量模組

3)問題三:有哪些已下線,需要清理資源?

解決方法:

  • 指定一段時間內(例如近一週),按 Topic 的訊息傳送量由小到大排序,檢視是否有訊息傳送量為 0 的 Topic,這些 Topic 相關的業務或許已下線。
  • 指定一段時間內(例如近一週),按 GroupID 的訊息消費量由小到大排序,檢視是否有訊息消費量為 0 的 GroupID,這些 GroupID 相關的業務或許已下線。

場景三:業務規劃

業務規劃場景下主要解決以下三個問題:

1)問題一:如何檢視業務峰值分佈情況?

解決方法:

  • 檢視 Topic 訊息接收量的每天的高峰時間段。
  • 檢視 Topic 訊息接收量週末和非周某的訊息量差別。
  • 檢視 Topic 訊息接收量節假日的變化情況。

2)問題二:如何判斷目前哪些業務有上升趨勢?

解決方法:

  • 檢視訊息量輔助判斷業務量變化趨勢。

3)問題三 :怎樣優化消費者系統效能?

解決方法:

  • 檢視訊息處理耗時,判斷是否在合理範圍內有提升的空間。

本篇文章通過訊息佇列、可觀測能力、RocketMQ 可觀測概念及功能和最佳實踐的介紹,呈現了 RocketMQ 的可觀測性工具在業務核心鏈路上的視覺化能力,希望給大家在日常的線上的一些問題排查和運維過程中帶來一些幫助。

點選​此處​,體驗 RocketMQ 的可觀測性工具。

相關文章