面试题答案
一键面试关键技术点
- 分布式事务框架:如Seata、XA协议等。Seata以高效、轻量级著称,它包含TC(事务协调者)、TM(事务管理器)和RM(资源管理器),能有效协调分布式事务。XA协议是一种经典的分布式事务协议,通过数据库的XA接口实现事务协调,但性能相对较低。
- Spring Cloud Config特性:Spring Cloud Config支持动态刷新配置,可通过@RefreshScope注解实现。需了解其配置更新的触发机制,如通过Spring Cloud Bus结合消息队列(如RabbitMQ、Kafka)进行广播式刷新。
- 消息队列:如RabbitMQ、Kafka等。在分布式事务中,消息队列可用于异步通信和事件驱动。当配置更新触发事务时,可通过消息队列发送事务相关消息,确保各微服务能及时接收到事务指令。
实现思路
- 初始化事务:当Spring Cloud Config检测到配置更新时,事务发起方(通常是负责接收配置更新的微服务)向分布式事务协调者(如Seata的TC)发起事务开始请求。
- 业务操作预执行:事务发起方将配置更新和相关业务操作封装成一个事务单元,并向参与事务的各个微服务发送预执行请求。各微服务接收到请求后,执行业务操作的预检查,比如检查数据一致性、资源可用性等。如果预检查失败,微服务向事务协调者发送回滚请求。
- 配置更新与业务操作执行:若所有微服务预执行成功,事务协调者向各微服务发送提交请求。事务发起方首先更新本地配置(利用Spring Cloud Config的动态刷新机制),然后执行具体业务操作。其他微服务接收到提交请求后,同样执行配置更新和业务操作。
- 事务状态监控与补偿:在事务执行过程中,事务协调者持续监控各微服务的事务状态。如果某个微服务在执行过程中出现异常,事务协调者发起全局回滚。回滚时,各微服务按照预先定义的补偿逻辑恢复到事务前的状态,比如删除新创建的数据、撤销已执行的操作等。
- 消息驱动的最终一致性:利用消息队列实现最终一致性。如果事务在执行过程中因网络等原因出现不确定状态,可通过消息队列进行重试或补偿。例如,事务发起方将事务相关信息发送到消息队列,各微服务从消息队列获取消息并根据事务状态进行相应处理。