Seata 的可观测实践

news2024/11/19 4:18:27

作者:察溯

Seata 简介

Seata 的前身是阿里巴巴集团内大规模使用保证分布式事务一致性的中间件,Seata 是其开源产品,由社区维护。在介绍 Seata 前,先与大家讨论下我们业务发展过程中经常遇到的一些问题场景。

业务场景

我们业务在发展的过程中,基本上都是从一个简单的应用,逐渐过渡到规模庞大、业务复杂的应用。这些复杂的场景难免遇到分布式事务管理问题,Seata 的出现正是解决这些分布式场景下的事务管理问题。介绍下其中几个经典的场景:

场景一:分库分表场景下的分布式事务

在这里插入图片描述

起初我们的业务规模小、轻量化,单一数据库就能保障我们的数据链路。但随着业务规模不断扩大、业务不断复杂化,通常单一数据库在容量、性能上会遭遇瓶颈。通常的解决方案是向分库、分表的架构演进。此时,即引入了分库分表场景下的分布式事务场景。

场景二:跨服务场景下的分布式事务

在这里插入图片描述

降低单体应用复杂度的方案:应用微服务化拆分。拆分后,我们的产品由多个功能各异的微服务组件构成,每个微服务都使用独立的数据库资源。在涉及到跨服务调用的数据一致性场景时,就引入了跨服务场景下的分布式事务。

Seata 架构

在这里插入图片描述

  • Transaction Coordinator(TC) 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
  • Transaction Manager(TM) 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议,TM 定义全局事务的边界。
  • Resource Manager(RM) 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。RM 负责定义分支事务的边界和行为。

Seata 的可观测实践

为什么需要可观测?

  • 分布式事务消息链路较复杂Seata 在解决了用户易用性和分布式事务一致性这些问题的同时,需要多次 TC 与 TM、RM 之间的交互,尤其当微服务的链路变复杂时,Seata 的交互链路也会呈正相关性增加。这种情况下,其实我们就需要引入可观测的能力来观察、分析事物链路。
  • 异常链路、故障排查难定位,性能优化无从下手在排查 Seata 的异常事务链路时,传统的方法需要看日志,这样检索起来比较麻烦。在引入可观测能力后,帮助我们直观的分析链路,快速定位问题;为优化耗时的事务链路提供依据。
  • 可视化、数据可量化可视化能力可让用户对事务执行情况有直观的感受;借助可量化的数据,可帮助用户评估资源消耗、规划预算。

可观测能力概览

在这里插入图片描述

Metrics 维度

设计思路

  1. Seata 作为一个被集成的数据一致性框架,Metrics 模块将尽可能少的使用第三方依赖以降低发生冲突的风险
  2. Metrics 模块将竭力争取更高的度量性能和更低的资源开销,尽可能降低开启后带来的副作用
  3. 配置时,Metrics 是否激活、数据如何发布,取决于对应的配置;开启配置则自动启用,并默认将度量数据通过 prometheusexporter 的形式发布
  4. 不使用 Spring,使用 SPI(Service Provider Interface) 加载扩展

模块设计

在这里插入图片描述

  • seata-metrics-core:Metrics 核心模块,根据配置组织(加载)1 个 Registry 和 N 个 Exporter
  • seata-metrics-api:定义了 Meter 指标接口,Registry 指标注册中心接口
  • seata-metrics-exporter-prometheus:内置的 prometheus-exporter 实现
  • seata-metrics-registry-compact:内置的 Registry 实现,并轻量级实现了 Gauge、Counter、Summay、Timer 指标

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 在自定义的 RPC 消息协议中定义了 Header 信息
  • SkyWalking 拦截指定的 RPC 消息,并注入 tracing 相关的 span 信息
  • 以 RPC 消息的发出&接收为临界点,定义了 span 的生命周期范围

基于上述的方式,Seata 实现了事务全链路的 tracing,具体接入可参考为[Seata 应用 | Seata-server]接入 Skywalking [ 1]

tracing 效果

  • 基于的 demo 场景:
  1. 用户请求交易服务
  2. 交易服务锁定库存
  3. 交易服务创建账单
  4. 账单服务进行扣款

在这里插入图片描述

  • GlobalCommit 成功的事务链路(事例)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据规模缩小 200 倍!指令微调高效指导大模型学习

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 最近大型语言模型(LLMs)的指令微调备受研究人员的关注,因为它可以开发 LLM 遵循指令的潜力,使其更加符合特定的任务需求。虽然指令微调(Instruction Tuning&#xff…

JavaEE-HTTPS的加密流程

目录 对称加密非对称加密证书的引入 对称加密 对称加密就是用同一个密钥把明文进行加密变成密文,也能把密文解密为明文. 理想状态下: 引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的真实内容是啥了. 但同一时刻服务器服务…

数据库规范与SQL调优

数据库设计规范章节,依旧以《阿里巴巴Java开发手册》为原型进行修正和完善。 MySQL规约 (一) 建表规约 (二) 索引规约 (三) SQL规约 (四) ORM规约 (一) 建表规约 1. 【强制】 表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是…

Windows修改为Mac的字体方法

一: 首先下载字体文件和修改器 Mac字体修改 https://www.aliyundrive.com/s/KKvcRNYkP5p 提取码: 6d3p 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。 二: 设置并修改字体 1:…

服务(第二十八篇)rsync

配置rsync源服务器: #建立/etc/rsyncd.conf 配置文件 vim /etc/rsyncd.conf #添加以下配置项 uid root gid root use chroot yes #禁锢在源目录 address 192.168.80.10 …

浅谈管网抢维修效率对产销差率的影响

1 背景 多年来,漏损治理工作一直围绕检漏、分区计量或压力管理等相关话题,却忽视了抢维修速度与质量对漏损治理成效的影响。实际上,不管是DMA分区计量,还是检漏,最终还是要通过抢维修来修复漏点达到控制漏损的目的。尽…

Vue 3中利用UseStorage轻松实现本地存储功能,释放数据持久化的力量

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 什么是本地存储1.2 Vue 3中的UseStorage插件简介 二、…

第18章_MySQL8其它新特性

第18章_MySQL8其它新特性 1. MySQL8新特性概述 MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器…

MySQL-1-SQL语句的分类、MySQL命令、SQL查询语句

一、SQL语句的分类(任何一条sql语句以分号结尾;SQL语句不区分大小写) DQL(数据查询语言):查询语句,凡是select都是DQL。 DML(数据操作语言):insert、delete、…

Midjourney 介绍-AI绘画工具

《Midjourney》是一款2022年3月面世的AI绘画工具,创始人是David Holz。 它一款基于浏览器的在线应用程序,因此你无需安装任何软件,只需在浏览器中访问MidJourney的官方网站即可开始使用。 只要输入想到的文字,就能通过人工智能产出…

一文带你了解MySQL之基于成本的优化

前言 本文章收录在MySQL性能优化原理实战专栏,点击此处查看更多优质内容。 目录 一、什么是成本二、单表查询的成本2.1 准备数据2.2 基于成本的优化步骤2.3 基于索引统计数据的成本计算 三、连接查询的成本2.1 准备数据2.2 Condition filtering介绍2.3 多表连接的成…

『MySQL 实战 45 讲』16 - “order by” 是怎么工作的

“order by” 是怎么工作的 首先创建一个表 CREATE TABLE t ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city) ) ENGINEInnoDB;全字段排序 在 cit…

正确甄别API、REST API、RESTful API和Web Service之间的异同

看到API你会想起什么?是接口、第三方调用、还是API文档?初看你可能会觉得这太熟悉了,这不是系统开发日常系列吗?但你仔细想一想,你会发现API的概念在你脑海里是如此的模糊。如何你通过搜索引擎检索API,你会…

目标检测数据预处理——部件截图,按一定比例进行外扩

本片是截图的篇的升级版本,简单版本的截图请参考根据目标框外扩一定比例进行截图(连带标签)。 对目标框(类别名称)进行分类,将同一类的目标框进行截图并分类保存在不同的文件夹中。 在本篇当中,…

Vue3中响应式Reactive的独特之处:它在哪些场景下胜出Ref?

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、Vue 3中响应式Reactive的独特之处1.1 引言1.2 Vue 3中的响应式…

算法leetcode|51. N 皇后(rust重拳出击)

文章目录 51. N 皇后:样例 1:样例 2:提示: 分析:题解:rust:go:c:python:java: 51. N 皇后: 按照国际象棋的规则,皇后可以…

详解c++STL—STL常用算法

目录 1、常用遍历算法 1.1、for_each 1.2、transform 2、常用查找算法 2.1、find 2.2、find_if 2.3、adjacent_find 2.4、binary_search 2.5、count 2.6、count_if 3、常用排序算法 3.1、sort 3.2、random_shuffle 3.3、merge 3.4、reverse 4、常用拷贝和替换算…

在MyBatis XML文件中处理特殊符号的方法,如“>”、“<”、“>=”、“<=”这些符号XML会报错如何处理

前言 在MyBatis的XML映射文件中,我们经常需要使用特殊符号,比如"大于"、"小于"、"大于等于"、"小于等于"等比较操作符。然而,这些符号在XML中具有特殊的含义,因此需要进行特殊处理&…

nginx缓存及rsync远程访问控制

nginx缓存功能 http{ proxy_cache_path /data/nginx/cache/levels1:2 keys_zonemy_cache:10m max_size10g inactive60m use_temp_pathoff; path强制参数,指定缓存文件的存放路径。 levels: 定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最…

2023年认证杯SPSSPRO杯数学建模A题(第一阶段)碳板跑鞋全过程文档及程序

2023年认证杯SPSSPRO杯数学建模 A题 碳板跑鞋 原题再现: 在专业运动鞋上使用的碳板,也可被称为碳纤维增强环氧树脂材料,事实上是将碳纤维织成布,再浸入环氧树脂固化后形成的板材。它以较轻的重量达到了相当好的弹性和刚度。在上…