面试题答案
一键面试接口设计思路
- 全局事务管理器接口
- 定义:
GlobalTransactionManager
- 方法:
beginTransaction(String transactionId)
:开启一个全局事务,生成唯一的事务ID。commitTransaction(String transactionId)
:提交全局事务,协调各微服务提交本地事务。rollbackTransaction(String transactionId)
:回滚全局事务,通知各微服务回滚本地事务。
- 定义:
- 微服务事务参与者接口
- 定义:
TransactionParticipant
- 方法:
prepare(String transactionId)
:微服务准备提交事务,执行本地事务逻辑,标记为可提交状态。commit(String transactionId)
:在全局事务提交时,正式提交本地事务。rollback(String transactionId)
:在全局事务回滚时,回滚本地事务。
- 定义:
协调不同微服务间事务操作
- 开启全局事务
- 客户端调用
GlobalTransactionManager
的beginTransaction
方法,获取全局事务ID。 - 将事务ID传递给涉及的各个微服务。
- 客户端调用
- 微服务执行本地事务
- 各微服务接收到事务ID后,实现
TransactionParticipant
接口。 - 执行本地业务逻辑,调用
prepare
方法,进行预提交,检查本地事务是否可提交。
- 各微服务接收到事务ID后,实现
- 全局事务提交或回滚
- 当所有微服务
prepare
成功后,GlobalTransactionManager
调用commitTransaction
方法,通知各微服务调用commit
方法正式提交事务。 - 如果任何一个微服务
prepare
失败,GlobalTransactionManager
调用rollbackTransaction
方法,通知各微服务调用rollback
方法回滚事务。
- 当所有微服务
处理事务一致性和隔离性问题的策略
- 事务一致性
- 两阶段提交(2PC):通过
prepare
和commit
/rollback
两个阶段,确保所有微服务要么都提交事务,要么都回滚事务,保证数据的一致性。 - 引入补偿机制:对于部分已提交但最终全局事务回滚的情况,提供补偿操作来恢复数据到事务前状态。
- 两阶段提交(2PC):通过
- 事务隔离性
- 使用本地事务隔离级别:各微服务在执行本地事务时,根据业务需求设置合适的隔离级别,如读已提交(Read Committed)、可重复读(Repeatable Read)等。
- 分布式锁:在涉及共享资源访问时,使用分布式锁保证同一时间只有一个微服务能够访问和修改共享数据,避免并发问题,保证事务隔离性。