[seata]Seata Metrics 无法统计各个事务模式单独数据 还有 global_table 表 也没有这个属性

2024-07-15 604 views
5

在 Metric 功能,如 TC 中的一个指标 seata.transaction(role=tc,meter=timer,statistic=total,status=committed/rollback),没有区分 哪一种模式(TCC、SAGA),所以目前无法统计 不同事务模式的 各种指标,还有在global_table没有type字段区分不同事务模式,也建议加上这样一个属性

Before: seata.transaction(role=tc,meter=timer,statistic=total,status=committed/rollback) After: seata.transaction(role=tc,meter=timer,statistic=total,status=committed/rollback,type='saga')

回答

7

globalSession是不带事务模式的, 一个全局事务可能同时存在AT和TCC的分支事务

2

在查看 metric 统计指标,如果加上 模式分类是不是管理更加清晰。您说的 一个全局事务可能同时存在AT和TCC的分支事务,即使这样也应该 能区分属于哪种模式,不然统计有点大类

2

GlobalSession 中 有 isSaga() 、 hasATBranch() 方法,同时BranchType 枚举 又有 AT TCC SAGA XA 四个,故想在 metrics 指标数据中能统计各模式数据。现在我在 MetricsSubscriber 中的 processXXXBegin/Committed/RollBacked() 里加上 withTag("ModeType", event.getModeType) , 然后在 DefautlCore 中的 begin/doGlobalCommit/doGlobalRollBacked 加上 ModeType,那如何判断属于AT TCC SAGA XA 的一种,如果有模式混合,怎么办?前面的 isSaga() 、 hasATBranch() 可以判断 SAGA AT 模式,TCC 难判断,问题就集中在这里,我相信妥协还是定义约定总是可以区分的,现在是设计上没能很好区分,还是诸如全局上加上是否可以 MultiModeEnabled 开关等方法解决,还是觉得这样的区分没有任何意义。我觉得从企业级产品来看,是希望应该区分的,可能是未来的需求,因为企业一般不会混用多种模式,即使有,我觉的是否可以有一个多模式使用统计指标。 @pengten

1

GlobalSession设计上不会有明确的事务类型,这块可以遍历所有分支来检索具体有哪些事务类型。

6

你好,metrics指标:“当前周期内提交/回滚的事务平均耗时”,无法理解这个当前周期内,因此查看了源码,通过PrometheusExporter中的collect方法来导出相关指标,每次调用都会在CompactTimer中的measure方法中执行 this.value = new TimerValue(),通过value.getAverage()来获取平均时间,但是还是不理解这个当前周期内的概念,麻烦大佬解答一下!!@pengten