news 2026/3/22 11:32:39

微服务面试题:分布式事务和服务监控

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务面试题:分布式事务和服务监控

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea


微服务面试题:分布式事务和服务监控

1. 分布式事务

分布式事务可以查看前面的分布式基础篇。

1.1 Seata 支持哪些模式的分布式事务?

Seata 以下几种模式的分布式事务:

  1. AT(Atomikos)模式:AT 模式是 Seata 默认支持的模式,也是最常用的模式之一。在 AT 模式下,Seata 通过在业务代码中嵌入事务上下文,实现对分布式事务的管理。Seata 会拦截并解析业务代码中的 SQL 语句,通过对数据库连接进行拦截和代理,实现事务的管理和协调。

  1. TCC(Try-Confirm-Cancel)模式:TCC 模式是一种基于补偿机制的分布式事务模式。在 TCC 模式中,业务逻辑需要实现 Try、Confirm 和 Cancel 三个阶段的操作。Seata 通过调用业务代码中的 Try、Confirm 和 Cancel 方法,并在每个阶段记录相关的操作日志,来实现分布式事务的一致性。

  1. SAGA 模式:SAGA 模式是一种基于事件驱动的分布式事务模式。在 SAGA 模式中,每个服务都可以发布和订阅事件,通过事件的传递和处理来实现分布式事务的一致性。Seata 提供了与 SAGA 模式兼容的 Saga 框架,用于管理和协调分布式事务的各个阶段。

  1. XA 模式:XA 模式是一种基于两阶段提交(Two-Phase Commit)协议的分布式事务模式。在 XA 模式中,Seata 通过与数据库的 XA 事务协议进行交互,实现对分布式事务的管理和协调。XA 模式需要数据库本身支持 XA 事务,并且需要在应用程序中配置相应的 XA 数据源。

1.2 了解 Seata 的实现原理吗?

Seata 的实现原理主要包括三个核心组件:事务协调器(Transaction Coordinator)、事务管理器(Transaction Manager)和资源管理器(Resource Manager)。

  • 事务协调器(Transaction Coordinator):事务协调器负责协调和管理分布式事务的整个过程。它接收事务的开始和结束请求,并根据事务的状态进行协调和处理。事务协调器还负责记录和管理事务的全局事务 ID(Global Transaction ID)和分支事务 ID(Branch Transaction ID)。
  • 事务管理器(Transaction Manager):事务管理器负责全局事务的管理和控制。它协调各个分支事务的提交或回滚,并保证分布式事务的一致性和隔离性。事务管理器还负责与事务协调器进行通信,并将事务的状态变更进行持久化。
  • 资源管理器(Resource Manager):资源管理器负责管理和控制各个参与者(Participant)的事务操作。它与事务管理器进行通信,并根据事务管理器的指令执行相应的事务操作,包括提交和回滚。

Seata 的实现原理基于两阶段提交(Two-Phase Commit)协议,具体的机制如下:

  1. 一阶段:在事务提交的过程中,首先进行预提交阶段。事务协调器向各个资源管理器发送预提交请求,资源管理器执行相应的事务操作并返回执行结果。在此阶段,业务数据和回滚日志记录在同一个本地事务中提交,并释放本地锁和连接资源。
  2. 二阶段:在预提交阶段成功后,进入真正的提交阶段。此阶段主要包括提交异步化和回滚反向补偿两个步骤:
  • 提交异步化:事务协调器发出真正的提交请求,各个资源管理器执行最终的提交操作。这个阶段的操作是非常快速的,以确保事务的提交效率。
  • 回滚反向补偿:如果在预提交阶段中有任何一个资源管理器返回失败结果,事务协调器发出回滚请求,各个资源管理器执行回滚操作,利用一阶段的回滚日志进行反向补偿。
1.3 Seata 的事务执行流程是什么样的?

Seata 事务的执行流程可以简要概括为以下几个步骤:

  1. 事务发起方(Transaction Starter)发起全局事务:事务发起方是指发起分布式事务的应用程序或服务。它向 Seata 的事务协调器发送全局事务的开始请求,生成全局事务 ID(Global Transaction ID)。
  2. 事务协调器创建全局事务记录:事务协调器接收到全局事务的开始请求后,会为该事务创建相应的全局事务记录,并生成分支事务 ID(Branch Transaction ID)。
  3. 分支事务注册:事务发起方将全局事务 ID 和分支事务 ID 发送给各个参与者(Participant),即资源管理器。参与者将分支事务 ID 注册到本地事务管理器,并将事务的执行结果反馈给事务协调器。
  4. 执行业务逻辑:在分布式事务的上下文中,各个参与者执行各自的本地事务,即执行业务逻辑和数据库操作。
  5. 预提交阶段:事务发起方向事务协调器发送预提交请求,事务协调器将预提交请求发送给各个参与者。
  6. 执行本地事务确认:参与者接收到预提交请求后,执行本地事务的确认操作,并将本地事务的执行结果反馈给事务协调器。
  7. 全局事务提交或回滚:事务协调器根据参与者反馈的结果进行判断,如果所有参与者的本地事务都执行成功,事务协调器发送真正的提交请求给参与者,参与者执行最终的提交操作;如果有任何一个参与者的本地事务执行失败,事务协调器发送回滚请求给参与者,参与者执行回滚操作。
  8. 完成全局事务:事务协调器接收到参与者的提交或回滚结果后,根据结果更新全局事务的状态,并通知事务发起方全局事务的最终结果。
1.4 全局事务 ID 和分支事务 ID 是怎么传递的?

全局事务 ID 和分支事务 ID 在分布式事务中通过上下文传递的方式进行传递。常见的传递方式包括参数传递、线程上下文传递和消息中间件传递。具体的传递方式可以根据业务场景和技术选型进行选择和调整。

1.5 Seata 的事务回滚是怎么实现的?

Seata 的事务回滚是通过回滚日志实现的。每个参与者在执行本地事务期间生成回滚日志,记录了对数据的修改操作。

当需要回滚事务时,事务协调器向参与者发送回滚请求,参与者根据回滚日志中的信息执行撤销操作,将数据恢复到事务开始前的状态。

回滚日志的管理和存储是 Seata 的核心机制,可以选择将日志存储在不同的介质中。通过回滚日志的持久化和恢复,Seata 确保了事务的一致性和恢复性。

2. 服务监控

2.1 你们的服务怎么做监控和告警?

我们使用 Prometheus 和 Grafana 来实现整个微服务集群的监控和告警:

  1. Prometheus:Prometheus 是一个开源的监控系统,具有灵活的数据模型和强大的查询语言,能够收集和存储时间序列数据。它可以通过 HTTP 协议定期拉取微服务的指标数据,并提供可扩展的存储和查询功能。
  2. Grafana:Grafana 是一个开源的可视化仪表板工具,可以与 Prometheus 结合使用,创建实时和历史数据的仪表板。Grafana 提供了丰富的图表和可视化选项,可以帮助用户更好地理解和分析微服务的性能和状态。

2.2 你们的服务怎么做日志收集?

日志收集有很多种方案,我们用的是ELK

  • Elasticsearch:Elasticsearch 是一个分布式搜索和分析引擎,用于存储和索引大量的日志数据。它提供了快速的搜索和聚合功能,可以高效地处理大规模的日志数据。
  • Logstash:Logstash 是一个用于收集、过滤和转发日志数据的工具。它可以从各种来源(如文件、网络、消息队列等)收集日志数据,并对数据进行处理和转换,然后将其发送到 Elasticsearch 进行存储和索引。
  • Kibana:Kibana 是一个用于日志数据可视化和分析的工具。它提供了丰富的图表、仪表盘和搜索功能,可以帮助用户实时监控和分析日志数据,发现潜在的问题和趋势。

简单说,这三者里Elasticsearch提供数据存储和检索能力,Logstash负责将日志收集到 ES,Kibana负责日志数据的可视化分析。

使用 ELK 进行微服务日志收集的一般流程如下:

  1. 在每个微服务中配置日志输出:将微服务的日志输出到标准输出(stdout)或日志文件。
  2. 使用 Logstash 收集日志:配置 Logstash 收集器,通过配置输入插件(如文件输入、网络输入等)监听微服务的日志输出,并进行过滤和处理。
  3. 将日志数据发送到 Elasticsearch:配置 Logstash 的输出插件,将经过处理的日志数据发送到 Elasticsearch 进行存储和索引。
  4. 使用 Kibana 进行可视化和分析:通过 Kibana 连接到 Elasticsearch,创建仪表盘、图表和搜索查询,实时监控和分析微服务的日志数据。

除了应用最广泛的 ELK,还有一些其它的方案比如FluentdGraylogLokiFilebeat,一些云厂商也提供了付费方案,比如阿里云的sls

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/19 5:56:39

FaceFusion能否实现动物脸替换?猫狗换脸实验

FaceFusion能否实现动物脸替换?猫狗换脸实验 在短视频平台上,“萌宠变装”特效正变得越来越流行:一只橘猫突然长出柯基的短腿,金毛犬眨着布偶猫的大眼睛卖萌……这些看似轻松有趣的视觉效果背后,其实隐藏着一个极具挑…

作者头像 李华
网站建设 2026/3/20 15:37:16

FaceFusion如何设置GPU利用率阈值预警?

FaceFusion如何设置GPU利用率阈值预警? 在深度学习驱动的图像处理应用中,人脸融合技术正变得越来越普及。像 FaceFusion 这样的工具,凭借其强大的换脸能力,在视频创作、虚拟偶像生成和娱乐内容生产等领域大放异彩。但随之而来的…

作者头像 李华
网站建设 2026/3/16 10:38:11

FaceFusion如何处理刘海遮挡眉毛时的表情迁移?

FaceFusion如何处理刘海遮挡眉毛时的表情迁移? 在虚拟主播直播正酣、数字人内容爆发的今天,一个看似微不足道的技术细节——“齐刘海下那条看不见的眉毛”——却可能成为压垮整段表情迁移效果的最后一根稻草。观众或许说不清哪里不对,但只要眉…

作者头像 李华
网站建设 2026/3/12 17:20:16

Langchain-Chatchat与Telegraf监控代理集成采集指标

Langchain-Chatchat 与 Telegraf 集成:构建安全可控的智能问答可观测体系 在企业知识管理日益复杂的今天,一个常见的困境是:公司内部积累了大量 PDF、Word 和 PPT 形式的制度文档、产品手册和技术规范,但员工却常常“知道有资料&a…

作者头像 李华
网站建设 2026/3/20 8:29:52

24、探索 Linux:游戏与命令行的精彩世界

探索 Linux:游戏与命令行的精彩世界 1. Linux 游戏的多样魅力 Linux 系统中有着丰富多样的游戏,为用户带来了别样的娱乐体验。 1.1 Kolf:虚拟高尔夫之旅 Kolf 是 KDE 界面下的一款电脑高尔夫游戏,即便不喜欢在真实球场上打高尔夫的人,也能在其中找到放松的乐趣。启动新…

作者头像 李华
网站建设 2026/3/20 3:50:44

Kotaemon压缩传输(Gzip)开启指南

Kotaemon压缩传输(Gzip)开启指南在今天的高并发、实时交互系统中,哪怕节省几百毫秒的响应时间,也可能直接影响用户的留存率。特别是在像Kotaemon这类以数据流为核心的应用场景下——比如消息推送、状态同步或API批量返回——原始J…

作者头像 李华