分布式系统题目答案

Posted ConstXiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式系统题目答案相关的知识,希望对你有一定的参考价值。


6、分布式事务的解决方案

分布式事务是指一个事务包含多个操作,这些操作分布在不同的服务器上,要么都成功,要么都失败。


分布式事务问题的主要来源
1、存储,分库分表跨库增删改时,保证数据的一致性
2、服务拆分,一个操作依赖多个服务,一个服务失败就影响了整体的操作

分布式事务解决方案

  • 2PC 两阶段提交,两个阶段:准备与提交;两个角色:事务管理者与资源管理者。容易产生同步阻塞、单点故障、数据不一致等问题,并不能完全保证事务的一致性。

  • 3PC 三阶段提交,三阶段:预备、准备、提交。与二阶段提交相比,加入了超时机制解决同步阻塞的问题;加入预备阶段提早发现问题。三阶段提交也存在极小概率的数据不一致问题。

  • TCC 模式,分为三个操作:Try、Confirm、Cancel。TCC 是分为两个阶段提交。第一阶段主业务服务调用全部的从业务服务的 Try 操作,并且事务管理器记录操作日志;第二阶段,当全部从业务服务都成功时,直接执行 Confirm 操作,否则会执行 Cancel 逆操作进行回滚。

  • Saga 模式,拆分分布式事务为多个本地事务,然后由 Saga 引擎负责协调。比 TCC 少了一个 Try 操作,Saga 会直接提交到数据库,出现失败时进行补偿。极端情况下的补偿动作可能比较麻烦;但对于简单的业务逻辑侵入性更低,减少了通信次数,更轻量。

  • 补偿模式,通过补偿的方式让数据最终一致。方式有:操作幂等 + 重试机制 + 人工介入机制;定时校对;网络抖动和服务不可用导致的情况,可使用下次更新前,检查和修复上一次数据的更新。

  • 可靠事件模式,通过引入可靠的消息队列,保证当前的可靠事件投递并且消息队列确保事件传递至少一次,这个事件能够被订阅者消费即可。未操作或未消费消息的持久化、消息的幂等性、消息的重发、消息的 ACK 都是要注意的问题。

  • 不要求最终一致性的柔性事务,会尽最大努力通知。


7、解决分布式事务的开源组件

阿里开源组件 Seata,分为全局事务和分支事务,分支事务满足 ACID 特性,全局事务基于二阶段提交对分支事务进行协调;同时也满足上述的几种模式。

http://seata.io/zh-cn/docs/overview/what-is-seata.html


tcc-transaction 框架是 TCC 模式的一种实现,tcc-transaction 的使用
https://github.com/changmingxie/tcc-transaction


华为 ServiceComb 框架的 Saga 模块:
https://github.com/apache/servicecomb-pack/blob/master/README_ZH.md


8、三阶段提交比二阶段提交的改进

两阶段提交:

  • 提交请求(Commit-request)阶段,协调者将通知事务参与者执行事务但不提交,参与者反馈是否可以正常提交。

  • 提交(Commit)阶段,协调者将基于第一个阶段的反馈结果进行决策,提交或回滚这个事务;只有当所有的参与者同意提交,协调者才会通知各个参与者提交事务,否则协调者将通知各个参与者回滚事务


两阶段提交存在的问题:

  • 资源被同步阻塞

  • 协调者可能出现单点故障

  • Commit 阶段发出 commit 通知,但网络抖动可能导致出现数据不一致


三阶段提交:

  • CanCommit 阶段,协调者询问参与者是否可以正常提交,此阶段不执行仅评估与反馈,反馈 no 或超时直接终止。

  • PreCommit 阶段,所有参与者反馈可提交,进行事务的预提交;否则反馈 no 或超时,中断事务。

  • DoCommit 阶段,事务提交;协调者没接收到或接收超时中断事务;参与者接受协调者提交请求超时自动提交


三阶段提交进行了改进:

  • 协调者与参与者都引入了超时机制,解决同步阻塞问题

  • 添加预提交阶段,锁定资源前进行了预判,提早发现问题


三阶段提交依然存在数据不一致的问题,如网络问题 DoCommit 阶段接收者接收超时自动提交,其余节点回滚,此时就会产生数据不一致。


以上是关于分布式系统题目答案的主要内容,如果未能解决你的问题,请参考以下文章

软考 - 04 分布式缓存系统

Java工程师面试题及答案,通讯录管理系统java课程设计

java基础面试题大全带答案,帮你解决95%以上的问题!

课程报名 | 如何通过 IM 实现分布式任务调度系统,这里有答案

# 每日3分钟技术干货 | 面试题+答案 | 分布式锁篇

怎么理解分布式高并发多线程?(含面试题和答案解析)