日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從用戶的視角來感受一個開源項目的成長,是我們推出「開發者說」專欄的初衷,即在開發者進行開源項目選型時,提供更為立體的項目信息。專欄所有內容均來自作者原創/投稿,本文是「開發者說」的第9篇,作者鄭揚勇,云粒智慧技術專家,開源愛好者,關注微服務、IOT領域技術,希望通過參與開源幫助別人的同時幫助自己。

Seata 0.7.0版本中將包含全新的特性 - Metrics,作為 APM(Application Performance Management & Monitoring)三大基石之一,通過它可以快速詳盡的獲取到TC、TM(規劃中)和RM(規劃中)中事務的活動狀態以及時延等重要統計信息。

設計思路

  • Seata 作為一個被集成的數據一致性框架,Metrics 模塊將盡可能少的使用第三方依賴以降低發生沖突的風險;例如不使用 Spring Bean 機制,而是使用SPI(Service Provider Interface) 加載擴展。
  • Metrics 模塊將竭力爭取更高的度量性能和更低的資源開銷,盡可能降低開啟后帶來的副作用;
  • 配置式,Metrics 是否激活、數據如何發布,取決于對應的配置;
  • 開始僅在 TC 中完成核心 Transaction 相關指標的實現,之后結合社區的需求,逐步完善運維所需的其他指標。
  • 模塊說明

    Seata Metrics 的模塊全部在seata-metrics下,0.7版本包含:

    由2個核心 API 模塊 seata-metrics-api和seata-metrics-core,以及N個實現模塊,例如:seata-metrics-registry-compact、seata-metrics-exporter-prometheus構成:

    • seata-metrics-api 模塊

    此模塊是 Metrics 的核心,將作為 Seata 基礎架構的一部分被 TC、TM 和 RM 引用,它內部沒有任何具體實現代碼,僅包含接口定義,定義的內容包括:

    1、Meter類接口:Gauge、Counter、Timer...

    2、注冊容器接口:Registry

    3、Measurement 數據導出接口:Exporter

    提示:Metrics 本身在開源領域也已有很多實現,例如 Netflix-Spectator、Dropwizard-Metrics、Dubbo-Metrics。它們有的輕而敏捷,有的重而強大,由于也是“實現”,因此不會納入seata-metrics-api中,避免實現綁定。

    • seata-metrics-core 模塊
    • Metrics核心模塊,根據配置組織(加載)1個Registry和N個Exporter;
    • seata-metrics-registry-compact 模塊
    • 這是我們提供的默認(內置)的Registry實現,不使用其它Metrics開源庫,輕量級的實現了以下四種Meter:

    其中包含的 Registry,即CompactRegistry,它只有接受 measure() 方法調用的時候才計算度量值,因此計算窗口完全取決于Exporter的實現,故目前不太適合需要多Exporter 的場景使用(如何擴展請參見后文)。

    說明:未來可能增加更豐富復雜的度量器例如Histogram,這是一種可以本地統計聚合75th, 90th, 95th, 98th, 99th,99.9th...的度量器,適合某些場合,但需要更多內存。所有的計量器都將繼承自Meter,所有的計量器執行 measure() 方法后,都將歸一化的生成1或N個 Measurement 結果。

    • seata-metrics-exporter-prometheus模塊
    • Prometheus 發布器PrometheusExporter,將度量數據同步給 Prometheus。

    工作原理

    TC中Metrics的初始化步驟和工作原理如下:

  • Server 調用 MetricsManager.get().init() 啟動 Metrics 的初始化;
  • MetricsManager讀取配置,通過SPI初始化對應的1個Registry和N個Exporter(分別通過RegistryFactory和ExporterFactory);
  • 如果初始化成功,代表用戶啟用了 Metrics 特性,初始化 MetricsSubscriber 并注冊到 EventBus;
  • DefaultCore 和 DefaultCoordinator 根據 Transaction 的狀態變化觸發對應狀態的事件,MetricsSubscriber 根據狀態,記錄對應的 Metric 至 Registry;
  • Exporter 定期從 Registry 中獲取數據,發布到外部對接的監控系統。
  • 可以看出,Metrics 定位為一個可選特性,如果不配置,事件訂閱器 MetricsSubscriber并不會創建和注冊,避免無謂的性能開銷。

    如何使用

    如果需要開啟 TC 的 Metrics,需要在其配置中增加配置項:

    ## metrics settings metrics { registry-type = "compact" # multi exporters use comma divided exporter-list = "prometheus" exporter-prometheus-port = 9898 }

    啟動TC,即可在http://tc-server-ip:9898/metrics上獲取到Metrics的文本格式數據。

    提示:默認使用9898端口,Prometheus 已登記的端口列表在此,如果想更換端口,可通過metrics.exporter-prometheus-port配置修改。

    下載并啟動 Prometheus

    下載完畢后,修改 Prometheus 的配置文件prometheus.yml,在scrape_configs中增加一項抓取 Seata 的度量數據:

    scrape_configs: # The job name is added as a label `job=` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'seata' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['tc-server-ip:9898']

    查看數據輸出

    推薦結合配置 Grafana 獲得更好的查詢效果,目前Seata導出的Metrics包括:

    提示:seata.transaction(role=tc,meter=summary,statistic=count,status=committed/rollback)和seata.transaction(role=tc,meter=timer,statistic=count,status=committed/rollback)的值可能相同,但它們來源于兩個不同的度量器。

    如何擴展

    如果有下面幾種情況:

    1、您不是使用 Prometheus 作為運維監控系統,但希望能夠將Seata的Metrics數據集成進 Dashboard 中;

    您需要實現新的Exporter,例如如果需要對接Zabbix,創建seata-metrics-exporter-zabbix模塊,然后在ExporterType中添加新的Exporter類型,最后在metrics.exporter-list中配置。

    2、您需要更復雜強大的度量器類型,這些度量器在其他 Metrics 實現庫中已有,希望集成這些第三方依賴直接使用;

    您可以不使用內置的 CompactRegistry 的實現,完全擴展一個新的Registry庫,例如希望使用 Netflix Spectator 的實現,擴展名為seata-metrics-registry-spectator的模塊,然后在RegistryType中添加新的Registry類型,開發完成后,設置metrics.registry-type為對應的類型。

    3、您需要改變默認 Metric 的 Measurement 輸出,例如在 Timer 中增加一個min或sd(方差);

    您可以修改對應 Meter 的實現,包括measure()方法返回的 Measurement 列表。

    未來發展

    1. 為 TM 和 RM 追加 Metrics 特性:

    TM:稍后實現,包括諸如:

    seata.transaction(role=tm,name{GlobalTransactionalName},meter=counter,status=active/committed/rollback) : 以GlobalTransactionalName為維度區分不同Transactional的狀態。

    RM:稍后實現,包括諸如:

    eata.transaction(role=rm,name{BranchTransactionalName},mode=at/mt,meter=counter,status=active/committed/rollback):以BranchTransactionalName為維度以及AT/MT維度區分不同分支 Transactional 的狀態。

    2. 響應社區,擴展更多的 Registry 和 Exporter ,以及支持更豐富的 Meter。

    結束語

    文介紹的 Metrics 是一個侵入式特性,如果用戶希望只使用無侵入的 Metrics,則可以使用 SkyWalking 在6.3版本中增加的與 Seata 集成的方案。

    本文作者:中間件小哥

    總結

    以上是生活随笔為你收集整理的由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。