码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 微服务实战 06 分布式事务常见解决方案


    微服务实战 06 分布式事务常见解决方案

    • TCC
    • 基于可靠性消息的最终一致性方案
    • 最大努力通知型

    在这里插入图片描述

    参考《Spring Cloud Alibaba 微服务原理与实战》
    上一篇介绍了分布式事务入门,这边文章来一起了解一下分布式事务的常见解决方案
    微服务实战 05 分布式事务 入门

    TCC

    TCC ( Try - Confirm - Cancel ) 他把完成的业务差分为如下三个步骤

    • Try:这个阶段主要对数据的校验或者资源的预留
    • Confirm:确认真正执行的任务,只操作Try阶段预留的资源
    • Cancel:取消执行,释放Try阶段预留的资源
      在这里插入图片描述

    其实 TCC 就是两阶段提交的思想

    • 第一阶段:通过 try进行准备工作
    • 第二阶段: Confirm/Cancel 表示Try阶段的操作的提交和回滚
      在一些特殊情况下,比如图中的 业务服务2 宕机或者出现异常,导致该服务并没有收到TCC事务协调器的Cancel或者Confirm请求,TCC事务框架会记录一些分布式事务的操作日志,保证分布式事务运行的各个阶段和状态.TCC服务支持接口调用失败发起充实,以达到数据的最终一致性。也正因如此,TCC暴漏的接口都需要满足幂等性

    基于可靠性消息的最终一致性方案

    基于可靠性消息的最终一致性方案是互联网公司比较常用的分布式数据一致性解决方案。
    它主要利用消息中间件的可靠性机制来实现数据一致性投递。
    在这里插入图片描述
    支付服务收到支付结果通知后,先更新订单状态,再发送消息到消息队列,账户服务监听指定队列的消息并进行响应的处理,完成数据的同步。
    在第四和第五步骤中,支付服务需要 操作订单数据库,发送消息到消息队列,在这里存在操作的原子性问题,要么两个操作都成功,要么都失败

    • 先发送消息,在执行数据库操作,消息发送成功但是数据库操作失败,导致数据不一致
    • 先执行事务操作,在发送消息,MQ响应超时导致异常,从而将本地事务回滚,但是消息可能已经发送成功了,也会存在数据一致性问题。
      如果使用 RacketMQ ,可以使用他的事务模型
      在这里插入图片描述
      如果使用 RabbitMq 也可以使用事务机制但是影响性能
      也可使使用下面方案先执行数据库事务操作,再发送消息
      每天一个知识点- rabbitMq 如何防止消息不丢失

    最大努力通知型

    最大努力通知型也是基于可靠性消息的最终一致性方案的方案类型,它是一种简单柔性事务解决方案,适用于对数据一致性要求不高的场景。
    在下图中的第四步,如果 支付服务没有返回支付宝 “success” 状态码,那么这个支付结果回调请求会以衰减重试机制(即逐步拉大间隔时间进行通知)知道达到最大通知次数,如果达到最大次数后支付服务还没有返回确认,这种情况下,支付宝提供查询支付结果接口,根据返回结果支付服务可以更新订单状态。

    在这里插入图片描述
    支付宝网页端支付时序图
    在这里插入图片描述

  • 相关阅读:
    百钱买百鸡
    鼠标悬停阴影的效果被旁边div挡住的解决办法
    基于SpringBoot的在线聊天室系统,源码,数据库脚本,项目导入运行视频教程,论文撰写教程
    springboot整合其它项目
    新版本的AndroidStudio生产签名文件打包失败
    数据结构与算法之美09(排序)
    IntelliJ IDEA 2023.2 最新版如何激活?IntelliJ IDEA 2023.2最新版激活方法及验证ja-netfilter配置成功提示
    Figma UI UX设计教程
    Windows 安装 汉化版 burp suite
    【Flask基础】六,拦截器/请求钩子(全局+模块+资源选择性放行)
  • 原文地址:https://blog.csdn.net/qq_44808472/article/details/126431200
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号