Seata 的可觀測實踐

Seata 簡介

Seata 的前身是阿里巴巴集團內大規模使用保證分佈式事務一致性的中間件,Seata 是其開源產品,由社區維護。在介紹 Seata 前,先與大家討論下我們業務發展過程中經常遇到的一些問題場景。

業務場景

我們業務在發展的過程中,基本上都是從一個簡單的應用,逐漸過渡到規模龐大、業務複雜的應用。這些複雜的場景難免遇到分佈式事務管理問題,Seata 的出現正是解決這些分佈式場景下的事務管理問題。介紹下其中幾個經典的場景:

場景一:分庫分表場景下的分佈式事務

起初我們的業務規模小、輕量化,單一數據庫就能保障我們的數據鏈路。但隨着業務規模不斷擴大、業務不斷複雜化,通常單一數據庫在容量、性能上會遭遇瓶頸。通常的解決方案是向分庫、分表的架構演進。此時,即引入了分庫分表場景下的分佈式事務場景。

場景二:跨服務場景下的分佈式事務

降低單體應用複雜度的方案:應用微服務化拆分。拆分後,我們的產品由多個功能各異的微服務組件構成,每個微服務都使用獨立的數據庫資源。在涉及到跨服務調用的數據一致性場景時,就引入了跨服務場景下的分佈式事務。

Seata 架構

Seata 的可觀測實踐

爲什麼需要可觀測?

可觀測能力概覽

Metrics 維度

設計思路

  1. Seata 作爲一個被集成的數據一致性框架,Metrics 模塊將盡可能少的使用第三方依賴以降低發生衝突的風險

  2. Metrics 模塊將竭力爭取更高的度量性能和更低的資源開銷,儘可能降低開啓後帶來的副作用

  3. 配置時,Metrics 是否激活、數據如何發佈,取決於對應的配置;開啓配置則自動啓用,並默認將度量數據通過 prometheusexporter 的形式發佈

  4. 不使用 Spring,使用 SPI(Service Provider Interface) 加載擴展

模塊設計

metrics 模塊工作流

上圖是 metrics 模塊的工作流,其工作流程如下:

  1. 利用 SPI 機制,根據配置加載 Exporter 和 Registry 的實現類

  2. 基於消息訂閱與通知機制,監聽所有全局事務的狀態變更事件,並 publish 到 EventBus

  3. 事件訂閱者消費事件,並將生成的 metrics 寫入 Registry

  4. 監控系統(如 prometheus)從 Exporter 中拉取數據

TC 核心指標

TM 核心指標

RM 核心指標

大盤展示

Tracing 維度

Seata 爲什麼需要 tracing?

  1. 對業務側而言,引入 Seata 後,對業務性能會帶來多大損耗?主要時間消耗在什麼地方?如何針對性的優化業務邏輯?這些都是未知的。

  2. Seata 的所有消息記錄都通過日誌持久化落盤,但對不瞭解 Seata 的用戶而言,日誌非常不友好。能否通過接入 Tracing,提升事務鏈路排查效率?

  3. 對於新手用戶,可通過 Tracing 記錄,快速瞭解 Seata 的工作原理,降低 Seata 使用門檻。

Seata 的 tracing 解決方案

基於上述的方式,Seata 實現了事務全鏈路的 tracing,具體接入可參考爲 [Seata 應用 | Seata-server] 接入 Skywalking****[****1]

tracing 效果

  1. 用戶請求交易服務

  2. 交易服務鎖定庫存

  3. 交易服務創建賬單

  4. 賬單服務進行扣款

Logging 維度

設計思路

Logging 這一塊其實承擔的是可觀測這幾個維度當中的兜底角色。放在最底層的,其實就是我們日誌格式的設計,只有好日誌格式,我們才能對它進行更好的採集、模塊化的存儲和展示。在其之上,是日誌的採集、存儲、監控、告警、數據可視化,這些模塊更多的是有現成的工具,比如阿里的 SLS 日誌服務、還有 ELK 的一套技術棧,我們更多是將開銷成本、接入複雜度、生態繁榮度等作爲考量。

日誌格式設計

這裏拿 Seata-Server 的一個日誌格式作爲案例:

總結 & 展望

Metrics

總結:基本實現分佈式事務的可量化、可觀測。

展望:更細粒度的指標、更廣闊的生態兼容。

Tracing

總結:分佈式事務全鏈路的可追溯。

展望:根據 xid 追溯事務鏈路,異常鏈路根因快速定位。

Logging

總結:結構化的日誌格式。

展望:日誌可觀測體系演進。

Seata-go 是 Seata 的多語言規劃的重要一環,目前處在高速發展時期,歡迎大家一起加入建設。如果你對 Seata 有任何問題,歡迎通過釘釘掃碼或搜索羣號加入我們。(釘釘羣號:33069364)

相關鏈接:

[1] 爲 [Seata 應用 | Seata-server] 接入 Skywalking

https://seata.io/zh-cn/docs/user/apm/skywalking.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/s_schIfK3Tu7e4bc4CFWrg