- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
你们项目中有遇到分布式事务问题,你
是如何解决的呢?
回答:
1.单体项目架构中在多数据源的情况下会发生分布式事务问题
解决办法:jta+Atomikos;
2.分布式在RPC远程调用过程中分布式事务问题
在接口调用的过程中调用服务接口之后,当接口报错无法回滚接口的事务导
RPCABAB
致最终接口事务回滚了,接口事务没有回滚,需要解决分布式事务问题。
AB
如果调用服务接口,如果服务接口直接报错了,响应错误的状态码给接口,
ABBA
接口在根据该错误的状态码判断如果等于错误状态码则直接手动回滚接口中的事务。
AA
分布式事务有哪些解决方案呢?
回答:
1.单体项目多数据源可以jta+Atomikos;
2.基于MQ的形式解决最终一致性的思想;
3.基于RocketMQ解决分布式事务采用事务消息;
4.LCN采用LCN模式假关闭连接(目前已经被淘汰)官网已经无法访问;(基
于2PC)
5.Alibaba的Seata背景非常强大,已经成为了主流但是性能一般;(基于2PC)
以上适合于在微服务架构中,不适合于和外部接口保证分布式事务问题。
6.跨语言的方式实现解决分布式事务问题类似于支付宝回调方式
如果项目是追求快速响应建议采用MQ最终一致性方案实现解决分布式事务
问题。
2PC、3PC应用场景?
学习到主流分布式事务解决框架
LCN、Seata
如何基于MQ解决分布式事务问题
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
核心思想就是最终一致性短暂延迟这是允许。
1.生产者:必须确保消息投递到MQ成功;
Ack消息确认机制
同步或者异步的形式
方式1:Confirms
方式2:事务消息
如果生产者投递消息失败的情况下,则通过日志记录下来后期通过
定时任务自动补偿投递msg。
2.MQ服务器端:需要将消息持久化,避免MQ宕机之后消息丢失;Mq服务器端在默认的
情况下都会对队列中的消息实现持久化
持久化硬盘。
刷盘同步(严格意义上保证消息不丢失)或者是异步有可能会丢失。
3.消费者:必须确保消息消费成功(同时需要注意幂等性问题);
3.1在rabbitmq情况下:
必须要将消息消费成功之后,才会将该消息从mq服务器端中移除。
3.2在kafka中的情况下:
不管是消费成功还是消费失败,该消息都不会立即从mq服务器端移除。手动提交offset
如果消费者消费失败的情况下则MQ会采用间隔的形式不断重试重试。
重试过程中需要解决幂等性问题
如何解决幂等问题:根据msgid作为全局id根据该全局id提前查询下该数据是否已经插
入了如果插入了不能够继续插入,db层面根据该msgid创建一个唯一约束,防止db层面重
复插入。
4.延迟问题:提高消费的速率
1.MQ消费者批量消费
2.MQ消费者集群消费
该流程环境是不需要解决消息顺序一致性。
LCN模式解决分布式事务原理
1.发起方与参与方与我们的LCN管理器全局事务协调者一直保持长连接;
2.发起方在调用接口之前会使用Aop生成一个全局的事务分组id;
3.发起方在调用之后的时候会在请求头中传递该全局事务分组id;
4.参与方从请求头中获取该事务分组id,当前业务执行完毕之后不会提交该事
务,则会使用假关闭。
5.发起方调用接口完之后,如果出现异常的情况下,会通知给协调者回滚该事
务,协调者在通知给参与方实现回滚事务
该模式存在的缺陷:
LCN基于数据源假关闭代理数据源事务不会提交-
文档评论(0)