MST

星途 面试题库

面试题:微服务架构基于TCC模式,如何处理并发场景下的事务一致性

在微服务架构采用TCC模式进行事务管理时,不可避免会遇到并发操作。请描述你会采用哪些策略来保证在并发场景下事务的一致性,并且说明这些策略在实际应用中的优缺点。
38.6万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

策略

  1. 基于锁机制
    • 悲观锁:在操作数据前,先对数据加锁,其他事务需要等待锁释放才能操作。例如在数据库层面,使用 SELECT ... FOR UPDATE 语句锁定相关记录。
    • 乐观锁:不提前加锁,在更新数据时,通过版本号或时间戳机制检查数据在读取后是否被修改。如果未被修改则更新成功,否则重试。比如在数据库表中添加一个 version 字段,每次更新时 version 自增,更新语句带上版本号条件判断。
  2. 使用分布式事务协调器:如使用阿里的 Seata 等分布式事务框架。Seata 基于全局事务 ID 来协调各个微服务的事务分支,通过 TC(事务协调器)统一管理事务的提交和回滚,确保各个分支事务要么都成功,要么都失败。
  3. 队列处理:将并发请求放入队列中,按顺序依次处理。例如使用 RabbitMQ、Kafka 等消息队列,把事务相关操作封装成消息发送到队列,消费端按顺序消费消息来执行事务操作。

优缺点

  1. 基于锁机制
    • 悲观锁
      • 优点:实现简单,能有效防止并发冲突,保证数据一致性。
      • 缺点:并发性能低,锁的持有时间长会导致其他事务长时间等待,容易产生死锁。
    • 乐观锁
      • 优点:并发性能高,读操作不加锁,适合读多写少的场景。
      • 缺点:可能会导致大量重试,尤其在写操作频繁的场景下,会消耗额外的系统资源。
  2. 使用分布式事务协调器
    • 优点:能较好地保证分布式事务一致性,对业务侵入相对较小,框架提供了统一的事务管理机制。
    • 缺点:引入了额外的组件(如 Seata 的 TC 等),增加了系统的复杂性和维护成本,网络问题等可能导致事务协调出现异常。
  3. 队列处理
    • 优点:可以削峰填谷,将并发请求顺序化处理,保证事务按顺序执行从而确保一致性,实现相对简单。
    • 缺点:引入消息队列增加了系统的复杂性,处理速度依赖于队列消费速度,可能导致处理延迟,不适合对实时性要求极高的场景。