黑狐家游戏

微服务和分布式面试题,微服务的分布式事务面试题

欧气 3 0

《微服务分布式事务面试题全解析:从原理到实践》

一、微服务中分布式事务的产生背景

在微服务架构下,一个业务流程往往会涉及到多个微服务的协作,每个微服务都有自己独立的数据库,例如在一个电商系统中,订单服务管理订单信息,库存服务管理商品库存,用户服务管理用户相关数据,当用户下单时,需要同时在订单服务中创建订单、库存服务中减少库存、用户服务中可能记录用户的购买历史等操作,这些操作必须保证要么全部成功,要么全部失败,以确保数据的一致性,这就引出了分布式事务的需求。

微服务和分布式面试题,微服务的分布式事务面试题

图片来源于网络,如有侵权联系删除

二、常见的分布式事务解决方案

1、两阶段提交(2PC)

- 原理:

- 第一阶段是准备阶段,事务协调者向所有参与者(各个微服务对应的数据库资源等)发送事务内容,询问是否可以提交事务,并等待各参与者的响应,参与者执行事务操作,但不提交事务,而是记录事务的重做和回滚信息。

- 第二阶段是提交阶段,如果所有参与者都返回可以提交事务的响应,事务协调者向所有参与者发送提交事务的请求,参与者提交事务;如果有任何一个参与者返回不能提交事务的响应,事务协调者向所有参与者发送回滚事务的请求,参与者回滚事务。

- 缺点:

- 同步阻塞,在准备阶段,所有参与者都需要等待事务协调者的指令,在提交阶段也是如此,这会导致长时间的阻塞,影响系统的性能和可用性。

- 单点故障,事务协调者一旦出现故障,整个分布式事务将无法进行。

- 数据不一致风险,在第二阶段,如果事务协调者发送提交请求后,部分参与者收到并执行了提交,而部分参与者由于网络等原因未收到请求,就会导致数据不一致。

2、补偿事务(TCC)

- 原理:

- Try阶段:主要是对业务系统做检测及资源预留,例如在库存服务中,冻结要减少的库存数量。

- Confirm阶段:对Try阶段预留的资源进行确认提交,如真正减少库存。

- Cancel阶段:当业务执行失败时,执行回滚操作,释放Try阶段预留的资源,比如解冻库存。

- 优点:

- 相比2PC,TCC具有更好的性能和灵活性,它是一种异步的、基于业务逻辑的事务处理方式。

- 缺点:

- 对业务侵入性强,需要每个参与事务的微服务都实现Try、Confirm和Cancel三个接口,开发成本较高。

微服务和分布式面试题,微服务的分布式事务面试题

图片来源于网络,如有侵权联系删除

3、消息队列实现最终一致性

- 原理:

- 在下单的场景中,订单服务创建订单后,发送一个消息到消息队列,库存服务和用户服务监听这个消息队列,库存服务收到消息后减少库存,用户服务收到消息后记录购买历史,如果某个服务处理失败,消息队列可以支持消息的重发机制,直到所有服务都成功处理消息,从而达到最终一致性。

- 优点:

- 解耦性强,各个微服务之间通过消息队列进行通信,彼此之间的依赖关系降低。

- 具有较好的性能和可扩展性。

- 缺点:

- 实现复杂,需要处理消息的重复消费、消息丢失等问题。

三、分布式事务中的一致性模型

1、强一致性

- 定义:在任何时刻所有的用户或者节点看到的数据是一致的,就像在单机数据库中,事务提交后,数据立即更新并对所有查询可见,在微服务分布式事务中,2PC在理想情况下可以实现强一致性,但由于其存在的诸多问题,实际应用场景有限。

2、弱一致性

- 定义:允许系统在一定时间内数据存在不一致的情况,但最终会达到一致,消息队列实现最终一致性就是弱一致性的一种体现,在事务处理过程中,可能存在某个瞬间库存服务和订单服务的数据不一致,但随着消息的处理最终会一致。

3、最终一致性

- 是弱一致性的一种特殊形式,强调的是系统在经过一段时间后,所有的数据副本最终都能够达到一致状态,在微服务架构中,由于网络延迟、服务故障等多种因素,最终一致性是一种比较实用的一致性模型,它在保证数据整体正确的前提下,提高了系统的可用性和性能。

四、面试中的常见问题及回答要点

1、请解释一下在微服务中为什么会出现分布式事务的问题?

- 回答要点:

微服务和分布式面试题,微服务的分布式事务面试题

图片来源于网络,如有侵权联系删除

- 强调微服务架构的特点,即每个微服务有自己的数据库,业务流程往往跨越多个微服务。

- 举例说明如电商系统中的下单流程涉及多个微服务操作,这些操作需要保证数据一致性。

2、比较两阶段提交(2PC)和补偿事务(TCC)的优缺点。

- 回答要点:

- 对于2PC,详细阐述其准备阶段和提交阶段的操作流程,然后分别从同步阻塞、单点故障、数据不一致风险等方面说明缺点。

- 对于TCC,解释Try、Confirm和Cancel三个阶段的作用,重点说明其性能和灵活性的优势以及业务侵入性强的缺点。

3、如何使用消息队列实现微服务的分布式事务最终一致性?

- 回答要点:

- 描述订单创建后消息发送到消息队列,各服务监听消息队列进行操作的流程。

- 提及处理消息重复消费和消息丢失的关键技术点,如消息的唯一标识、消息的持久化和重发机制等。

4、在实际项目中,如何选择合适的分布式事务解决方案?

- 回答要点:

- 考虑业务的复杂性,如果业务逻辑相对简单且对一致性要求不是极高,可以优先考虑消息队列实现最终一致性。

- 对于对数据一致性要求非常严格、业务逻辑相对固定且对性能要求不是首要考虑因素的场景,2PC可能是一种选择,但要注意解决其存在的问题。

- 如果开发团队有足够的技术能力处理业务侵入性问题,TCC在需要较好的性能和灵活性的场景下是可行的,还需要考虑系统的规模、现有的技术栈等因素。

微服务中的分布式事务是一个复杂但又非常重要的话题,在面试中能够深入理解其原理、解决方案和一致性模型等内容,将有助于在众多求职者中脱颖而出。

标签: #微服务 #分布式 #事务 #面试题

黑狐家游戏
  • 评论列表

留言评论