Java微服务系统分布式事务解决方案(上)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Java微服务系统分布式事务解决方案(上)

0 分布式事务-微服务系统的最大挑战

单体系统通过事务解决的问题

  • 数据的并发访问、修改
  • 不同请求之间的数据隔离- 事务
  • 一个业务请求修改多个数据,保证都完成或失败
  • 发生异常时的数据回滚
  • Springcloud微服务系统架构

image.png

Event Sourcing 系统实例

image.png

分布式事务

定义

在分布式系统中实现事务。

1 CAP 定理

1.1 概念

CAP 理论在分布式系统中:

  • 一致性
    多个节点的数据是否强一致
  • 可用性
    分布式服务能一直保证可用状态。当用户发出一个请求后,服务能在有限时间内返回结果
  • 分区容忍性
    对网络分区的容忍性


对于共享数据系统,最多只能同时拥有CAP其中的两个,无法三者兼顾。

  • 任两者的组合都有其适用场景
  • 真实系统应当是ACID与BASE混合体
  • 不同类型的业务可以也应当区别对待
  • 分区容忍性不可或缺

1.png

分布式系统中,最重要的是满足业务需求,而不是追求抽象、绝对的系统特性。

2.2 中间件实例

  • 优先选择AP,弱化C
    Cassandra、Dynamo 等
  • 优先选择CP,弱化A
    HBase、MongoDB 等

2 BASE 理论

2.1 核心思想

  • 基本可用(BasicallyAvailable)
    分布式系统在出现故障时,允许损失部分的可用性来保证核心可用。
  • 软状态(SoftState)
    允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性。
  • 最终一致性(EventualConsistency)
    分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态

2.2 数据的一致性模型

分类

  • 强一致性
    数据更新成功后,任意时刻所有副本中的数据都是一致的。一般采用同步实现
  • 弱一致性
    数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久后可读到
  • 最终一致性
    弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值


分布式系统数据的强一致性、弱一致性和最终一致性可通过Quorum NRW算法分析。


3 分布式事务的解决方案

  • 异步校对数据
    支付宝、微信支付主动查询支付状态、对账单的形式;
  • 基于可靠消息(MQ)
    异步场景;通用性较强;拓展性较高
  • TCC编程式解决方案
    严选、阿里、蚂蚁金服自己封装的DTX

3.1 实现思路

理想状态

像单机数据库事务一样,多个数据库自动通过某种协调机制,实现跨数据库节点的一致性。

  • 使用场景
    要求严格的一致性,比如金融交易类业务。

一般情况

可容忍一段时间的数据不一致,最终通过超时终止,调度补偿等方式,实现数据的最终状态一致性。

  • 使用场景
    准实时或非实时的处理,比如 T+1 的各类操作,或者电商类操作。

3.2 实现方案

3.2.1 XA方案

3.2.2 TCC方案

三阶段

  • Try
    对各个服务的资源做检测,对资源进行提前锁定或者预留
  • Confirm
    在各个服务中执行实际的操作
  • Cancel
    如果任何一个服务的业务方法执行出错,那么这里就需要进行补偿,即执行已操作成功的业务逻辑的回滚操作

4.2 跨行转账案例

涉及到两个银行的分布式事务,如果用TCC实现:


Try阶段

先把两个银行账户中的资金给它冻结住,不让操作


Confirm阶段

执行实际的转账操作,A银行账户的资金扣减,B银行账户的资金增加


Cancel阶段

如果任何一个银行的操作执行失败,那么就需要回滚进行补偿

比如A银行账户如果已经扣减了,但是B银行账户资金增加失败了,那么就得把A银行账户资金给加回去。


该方案很少使用,但也有使用场景。

因为这个事务的回滚实际上严重依赖于你自己写代码来回滚和补偿了,会造成补偿代码巨大,非常恶心!

比如说我们,一般来说和钱相关的支付、交易等相关的场景,我们会用TCC,严格严格保证分布式事务要么全部成功,要么全部自动回滚,严格保证资金的正确性!

4.3 适用场景

除非你是真的一致性要求太高,是系统中核心之核心的场景!

常见的就是资金类的场景,那可以用TCC方案,自己编写大量的业务逻辑,自己判断一个事务中的各个环节是否ok,不ok就执行补偿/回滚代码。


而且最好是你的各个业务执行的时间都比较短。

但尽量别这么搞,自己手写回滚逻辑,或者是补偿逻辑,实在太恶心了,业务代码也很难维护。

4.4 方案示意图

image.png



目录
相关文章
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
3月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
86 2
|
6天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
261 13
Spring Cloud Alibaba:一站式微服务解决方案
|
11天前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
32 1
|
21天前
|
运维 监控 Java
为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案
本文记录并复盘了生产环境中Spring Boot应用内存占用过高的问题及解决过程。系统上线初期运行正常,但随着业务量上升,多个Spring Boot应用共占用了64G内存中的大部分,导致应用假死。通过jps和jmap工具排查发现,原因是运维人员未设置JVM参数,导致默认配置下每个应用占用近12G内存。最终通过调整JVM参数、优化堆内存大小等措施解决了问题。建议在生产环境中合理设置JVM参数,避免资源浪费和性能问题。
60 3
|
1月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
81 4
|
2月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
142 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
【AI系统】分布式通信与 NVLink
进入大模型时代后,AI的核心转向大模型发展,训练这类模型需克服大量GPU资源及长时间的需求。面对单个GPU内存限制,跨多个GPU的分布式训练成为必要,这涉及到分布式通信和NVLink技术的应用。分布式通信允许多个节点协作完成任务,而NVLink则是一种高速、低延迟的通信技术,用于连接GPU或GPU与其它设备,以实现高性能计算。随着大模型的参数、数据规模扩大及算力需求增长,分布式并行策略,如数据并行和模型并行,变得至关重要。这些策略通过将模型或数据分割在多个GPU上处理,提高了训练效率。此外,NVLink和NVSwitch技术的持续演进,为GPU间的高效通信提供了更强的支持,推动了大模型训练的快
52 0