码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 分布式事务


    实际问题的产生:

    实例:订单到支付(锁库存、发积分等业务多)

    情况:

    本地服务、操作本地数据库、本地事务无问题

    调用远程服务,就出现了分布式事务,无法控制其他服务的回滚

    产生分布式事务的最大原因:网络问题,

    事务的基本性质:ACID

    事务的隔离级别

    本地事务失效问题:

    问题:同一对象方法互调,覆盖事务

    解决:使用代理对象调用事务方法,aspectj

    @EnalbleAspectJAutoProxy(exposeProxy = true)

    分布式事务的定理

    CAP

    BASE理论

    强一致性、弱一致性、最终一致性

    分布式事务的几种方案

    1、2PC、3PC(自动TCC)

    2、柔性事务、TCC补偿事务,

    3、柔性事务、最大努力通知

    4、柔性事务、可靠消息、最终一致性(异步确保性)

    解决框架Seata

    提供了AT、TCC、SAGA、XA事务模式

    TC 事务协调器

    TM 事务管理器

    RM 资源管理器

    步骤

    1、创建数据库表

    2、AT模式,每个微服务/库增加,创建UNDO_LOG表 (UNDO:回滚)

    UNDO_LOG表有固定的业务字段

    3、安装SEATA-server

    4、整合

    4.1,pom依赖

    4.2、根据依赖的版本、启动对应版本server

       registry_config文件

    配置注册中心(例如nacos)、

    指定相关配置 file-config,例如NIO,TCP、store(db-store)

      每个微服务增加file.config(修改service微服务对应名字),registry.conf

    4.3启动server,登录nacos,查看serverAddr—即seata服务器

    5、开启:

    所有想用到分布式事务的微服务,都需要seata作为代理数据源

    6、给分布式大事务入口(方法)标记全局事务

    给每个远程的小事务配置单事务(方法)

    @GlobalTransication

    @Transicastion(本地自己处理)

    模式适用
    AT、阻塞,不适合高并发(2PC,TCC不适合高并发)。例如后台管理系统

    使用MQ消息队列处理、避免事务阻塞

    如何保证消息可靠性

    1、消息丢失

    1.1情况:网络错误,消息没抵达服务器:

    解决:Try catch 捕获发送失败,发送消息都记录日志,数据库中保存每个消息的详细信息,

    定期扫描数据库,将失败的消息再发送。

    1.2情况:Broker宕机

    解决:使用发送者的确认机制,confirmCallback、returnCallback监听

    1.3 手动ACK

    2、消息重复

    2.1情况:ack失败、会重复消费。消费者的业务消费接口应该设计为幂等性、防重表、判断是否redelivered

    2.2消费失败,自动发出,正常

    3、消息积压

    3.1 消费者宕机

    3.2 消费者消费能力不足

    3.3 发送者发送流量太大

    解决:1、增加消费者,上线专门的队列消费服务器,先取存,后离线处理。2、限流

  • 相关阅读:
    【案例教学】华为云API图像搜索ImageSearch的快捷性—AI帮助您快速归类图片
    万界星空科技低代码平台云MES系统功能场景
    AI大模型日报#0420:开源模型击败GPT-4、西湖大学蛋白质通用大模型、GPT的七条经验
    代码随想录算法训练营第三十二天 | 动态规划理论基础 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯
    Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程
    组合数 rust解法
    Java Web 学习笔记(四) —— MyBatis
    Thread类的常用方法
    【Rust日报】2022-07-18 Rust 1.62.1 pre-release 测试
    整合vue elementui springboot mybatisplus前后端分离的 简单增加功能 删改查未实现
  • 原文地址:https://blog.csdn.net/zhangbinHn/article/details/126583473
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号