从用户的视角来感受一个开源项目的成长,是我们推出「开发者说」专栏的初衷,即在开发者进行开源项目选型时,提供更为立体的项目信息。专栏所有内容均来自作者原创/投稿,本文是「开发者说」的第9篇,作者郑扬勇,云粒智慧技术专家,开源爱好者,关注微服务、IOT领域技术,希望通过参与开源帮助别人的同时帮助自己。

Seata 0.7.0版本中将包含全新的特性 - Metrics,作为 APM(Application Performance Management & Monitoring)三大基石之一,通过它可以快速详尽的获取到TC、TM(规划中)和RM(规划中)中事务的活动状态以及时延等重要统计信息。

设计思路

  1. Seata 作为一个被集成的数据一致性框架,Metrics 模块将尽可能少的使用第三方依赖以降低发生冲突的风险;例如不使用 Spring Bean 机制,而是使用SPI(Service Provider Interface) 加载扩展。
  2. Metrics 模块将竭力争取更高的度量性能和更低的资源开销,尽可能降低开启后带来的副作用;
  3. 配置式,Metrics 是否激活、数据如何发布,取决于对应的配置;
  4. 开始仅在 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的初始化步骤和工作原理如下:

  1. Server 调用 MetricsManager.get().init() 启动 Metrics 的初始化;
  2. MetricsManager读取配置,通过SPI初始化对应的1个Registry和N个Exporter(分别通过RegistryFactory和ExporterFactory);
  3. 如果初始化成功,代表用户启用了 Metrics 特性,初始化 MetricsSubscriber 并注册到 EventBus;
  4. DefaultCore 和 DefaultCoordinator 根据 Transaction 的状态变化触发对应状态的事件,MetricsSubscriber 根据状态,记录对应的 Metric 至 Registry;
  5. 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' 技能了吗?...相关推荐

  1. 由于开发者通过接口修改了菜单配置_Android SDK开发艺术探索(四)个性化配置...

    一.前言 本篇是Android SDK开发艺术探索系列的第四篇文章.介绍了通过流式API设计思想优雅地实现SDK的自定义选项配置需求. 目录概览: 一.前言 二.SDK自定义配置2.1.什么是自定义配 ...

  2. 微信公众号通过接口修改菜单栏所遇问题errcode“:41001

    微信公众号开发者通过接口修改菜单配置所碰到的问题 {"errcode":41001,"errmsg":"access_token missing hi ...

  3. 微信小程序生态13-微信公众号自定义菜单、个性化菜单配置

    文章导航 微信小程序生态1-初识小程序 微信小程序生态2-创建一个微信小程序 微信小程序生态3-微信小程序登录流程设计 微信小程序生态4-扫普通二维码进入小程序.打开短链接进入小程序 微信小程序生态5 ...

  4. 微信公众号开发--公众号关注推送配置与菜单配置

    用户关注公众号回调 AppID:开发者ID,微信公众号的唯一标识 AppSecret:开发者密码,操作微信公众号的验证 IP白名单:获取access_token时,需要IP白名单才可以获取 OpenI ...

  5. vscode 切换开发者工具_vscode 切换开发者工具_VSCode高效开发工作流配置指南

    LayaAirIDE 2.4将VSCode剥离出去,其主要目的是让开发者编码工作流更加自由.比如 ,可以即时体验到新版本的升级,无需受限于LayaAirIDE.可以通过VSCode来灵活配置自己的开发 ...

  6. 微信 服务器配置 菜单,微信菜单配置

    微信菜单教程 微信设置 打开网站后台微信配置界面 管理后台 --> 系统设置 --> 微信设置 --> 微信管理 --> 点击新增公众号 对应的配置项需要登陆微信公众平台查找. ...

  7. 微信公众平台上修改自定义菜单

    微信公众号的自定义菜单需要修改,查看了server端的代码,并没有实现修改菜单的接口,因为菜单修改的频率不是很高,所以就直接在测试网页上进行修改: 1. 首先打开微信公众平台的网站: https:// ...

  8. 微信公众号自定义菜单配置

    *:强烈建议准备测试公众号进行调试,否则一旦出错问题问题特别严重. 准备工作 一:测试公众号创建 1:登录微信公众平台 2:找到这个菜单 3:建立测试账号 4:需要开发一个接口进行Token验证,根据 ...

  9. destoon 短信发送函数及短信接口修改

    // $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt'];  从缓存里读取网站配置信息. //$d ...

最新文章

  1. 企业级微服务架构统一安全认证设计与实践!
  2. ​Leangoo在线SaaS模式的产品结构
  3. MySQL查询指定字段
  4. PHP创建图像的应用!!!!
  5. 度假式办公环境、值得拥有!珠海金山软件诚聘CV、C++、后端工程师
  6. Web前端面试指导(六):面试后需要总结和交流
  7. 敏捷转型谁先动:老总,项目经理or团队
  8. FFA 2021 专场解读 - Flink 核心技术
  9. mysql 减函数_mysql时间加减函数
  10. SQL Server 2014各版本区别
  11. Eclipse字体颜色控制
  12. forge是用java装吗_我的世界forge怎么安装 forge使用方法
  13. 学习记录514@react使用antd选择器设置下拉菜单宽度
  14. 2022.06青少年软件编程(Python)等级考试试卷(四级)
  15. daemontoolslite(DAEMONtoolslite 感叹号)
  16. 中国足球深度剖析之五,破除周期性怪圈
  17. 三极管流水灯电路设计
  18. Linux中awk后面的RS, ORS, FS, OFS 含义
  19. 《天赋》:第一章 天赋
  20. ABAP CDS View

热门文章

  1. 智慧城市的互联网大脑架构图:大社交网络与智慧城市结合是关键
  2. bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集
  3. postgreSQl pathman 用法语句总结
  4. 高可用集群技术之corosync应用详解(一)
  5. java下包内继承时编译不过解决方案
  6. 苏州飘“彩云” 五年规模破百亿元
  7. Mozilla 放出新的 Firefox 3.5 RC 版本(RC 3)
  8. 一个有趣的问题,讨论讨论
  9. cvc 降噪_耳机降噪功能这么多,说说什么是ANC、ENC、CVC、DSP降噪
  10. js日期比较大小_node.js 内存泄漏的秘密