`

分布式事务--我们是否真的需要

 
阅读更多
  我们不断的拆分schema,说了为了下一步的分库做准备,但是由此带来的代价也是显而易见的,我们的分布式事务在不断的增多。我们期望利用分布式事务来保证数据的一致性,但是其带来的影响也是不容忽视的。
   摘录他人语:分布式事务提供的ACID保证是以损害系统的可用性、性能与可伸缩性为代价的 只有在参与分布式事务的各个数据库实例都能够正常工作的前提下,分布式事务才能够顺利完成,只要有一个工作不正常,整个事务就不能完成。这样,系统的可用性就相当于参加分布式事务的各实例的可用性之积,实例越多,可用性下降越明显。从性能和可伸缩性角度看,首先是事务的总持续时间通常是各实例操作时间之和,因为一个事务中的各个操作通常是顺序执行的,这样事务的响应时间就会增加很多;其次是一般Web应用的事务都不大,单机操作时间也就几毫秒甚至不到1毫秒,一但涉及到分布式事务,提交时节点间的网络通信往返过程也为毫秒级别,对事务响应时间的影响也不可忽视。由于事务持续时间延长, 事务对相关资源的锁定时间也相应增加,从而可能严重增加了并发冲突,影响到系统吞吐率和可伸缩性 。
   如此这般,我们当初分库的目的是为了缓解主库的压力,解决热点资源锁的问题,以期这些问题解决后,能够提高系统的吞吐率。但是当我们schema分离,大量使用分布式事务的时候,新的问题来了, 事务时间增长, 系统的响应可能仍然无法提高,还有一个就是每个事务节点都可能成为瓶颈,毕竟是一根绳子上的蚱蜢,一个有问题,大家一样的都是死翘翘。 我们的目的没有达到, 反而是增加了DBA的工作量。
   如果大家一定要使用分布式事务,请仔细想想如下问题
1.  这步操作一定得在事务当中吗?这步操作如果没完成或者失败了,值得回滚整个事务吗?难道没有优雅的补偿措施或者容错措施?
2.  分布式事务涉及到的点,必须的这么多?必须得实时的操作这一大串?不能通过通知类操作去精简掉某些点?
3.  在发起分布式事务之后,你是不是做了事务无关的操作,尽管这些操作跟事务无关?(如,读取数据、计算、等用户返回消息、等其他模块的调用返回等等)要知道事务应该尽快结束。
4.  你没有把一些读操作也算在事务里面了吧?这是很容易犯的错误,你在事务中 Enlist 了一个 select  操作。
5.   你的操作,某些步骤可以等全部操作完成之后再执行.这类操作具有明显的通知类特点。通知类操作是说,我给你一个通知,并且我保证通知到了你;你必须吃下这个通知,并且保证处理成功,但是你不必我一通知你你就处理。这样的操作很明显可以用另外一个任务去搞。
 
原则是,尽量缩短事务时间。

 

分享到:
评论

相关推荐

    大规模SOA服务分布式事务处理-程立.rar

    首先,我们需要理解什么是分布式事务。在传统的单体应用中,事务管理相对简单,但在SOA架构下,服务可能分布在多个不同的节点上,这就需要一种机制来确保跨服务的数据一致性,即分布式事务。分布式事务是跨越多个...

    go-zero对接分布式事务dtm保姆式教程-gozerodtm.zip

    在IT行业中,分布式事务是构建高可用、高并发系统的关键技术之一。Go语言以其高效、简洁的特性在后端开发领域越来越受欢迎,而go-zero框架则为Go开发者提供了丰富的工具来构建微服务架构。本教程将围绕“go-zero对接...

    【分布式事务】面试题.pdf

    #### 三、是否真的需要分布式事务? 在考虑实现分布式事务之前,首先要评估是否真的需要它。有时可以通过合并相关的服务或简化架构来避免复杂的分布式事务处理。 1. **减少微服务数量**: - 如果是因为微服务过多...

    分布式事务

    当我们谈论分布式事务时,我们实际上是在讨论如何在多个不同的数据库或者资源管理器之间协调和执行一系列操作,这些操作要么全部成功,要么全部回滚,以维护事务的ACID特性。 **ACID属性**: 1. **原子性(Atomicity...

    5种分布式事务解决方案优缺点对比.docx

    选择合适的分布式事务管理方案时,需要根据具体的业务需求、系统架构以及对一致性和可用性的偏好来决定。未来随着技术的发展,或许会有更多新的解决方案出现,以更好地应对日益复杂的分布式系统挑战。

    zookeeper分布式锁实例源码

    在这个场景下,我们将关注ZooKeeper如何实现分布式锁,特别是不可重入锁、可重入锁以及可重入读写锁的概念与实践。 首先,我们要理解什么是分布式锁。在多节点并发访问共享资源时,分布式锁能确保同一时刻只有一个...

    seata-demo.zip

    分布式事务是现代软件系统中一个重要的技术挑战,尤其是在...在实践中,你可能会遇到并发控制、事务隔离级别、事务超时等问题,这些都是分布式事务设计需要考虑的关键因素。持续学习和实践,将使你在这个领域更加熟练。

    zookeeper伪分布式搭建(1)1

    Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    单机模拟ORACLE分布式数据库数据复制环境的实现

    Oracle提供了一套完整的分布式数据库解决方案,包括全局唯一标识符(Global Unique Identifier, GUID)、分布式事务处理、数据复制等机制,以确保数据的一致性和完整性。 在单机上模拟Oracle分布式数据库数据复制,...

    数据同步spingboot连接多个mysql数据库.zip

    - 对于多数据源的事务管理,评估是否真的需要分布式事务,避免引入复杂性。 通过以上步骤,你可以构建一个能够连接并同步多个MySQL数据库的SpringBoot应用。在实际开发中,还需关注性能优化、安全性以及错误处理等...

    ShardingSphere笔记(三):自定义分片算法 - 按月分表·真·自动建表

    ShardingSphere是一个开源的分布式数据库中间件,它提供了数据分片、数据库连接池、读写分离以及事务管理等核心功能,广泛应用于大数据量场景下的数据库解决方案。 首先,我们要理解什么是分库分表。当单个数据库的...

    zookeeper之分布式环境搭建.zip

    在IT行业中,ZooKeeper...不过,要真正掌握Zookeeper,还需要进一步深入研究它的高级特性,如Watcher机制、事务操作以及与其他分布式系统的集成策略。在实践中不断探索,才能更好地利用Zookeeper解决实际的分布式问题。

    pgxl与tbase架构_7.pdf

    分布式事务需要保证跨多个节点的数据一致性,即使在节点出现故障时也不影响整体的数据一致性。为了实现这一目标,通常采用两阶段提交(2PC)和三阶段提交(3PC)等协议。例如,Spanner采用了一种全局时序ID系统来...

    SpringBoot整合rocketmq事务消息

    1. **开启事务监听器**:在SpringBoot应用中,我们需要开启一个事务监听器,它会监控本地事务的执行状态,并据此决定消息是否发送。 2. **实现LocalTransactionExecuter接口**:在业务逻辑中,我们需要实现`...

    dubbo-tcc:关于dubbo事务补偿机制的

    TCC(Try-Confirm-Cancel)是一种基于业务的分布式事务解决方案,由三个阶段组成:尝试(Try)、确认(Confirm)和取消(Cancel)。在Try阶段,服务提供者执行业务操作的尝试;在Confirm阶段,如果Try成功,服务提供...

    1000道 互联网Java工程师面试题 485页

    - **接口绑定**:允许我们将接口和XML映射文件绑定在一起,使得接口方法可以直接调用对应的SQL语句。 - **实现方式**:通过`@Mapper`注解或在XML映射文件中指定namespace。 #### 25、使用MyBatis的mapper接口调用时...

    精通Hibernate.精通Hibernate.

    - **事务管理**:Hibernate提供了对事务的支持,包括本地事务和分布式事务,确保数据的一致性和完整性。 - **性能优化**:除了上述提到的缓存和批量操作外,还可以通过调整Hibernate的配置参数、合理设计实体类和...

    java springboot oceanbase测试代码

    注意,由于OceanBase的特性,可能需要对事务处理、分布式事务、读写分离等有特别的考虑和处理。 此外,为了提高测试效率,可以使用Mockito或Spring Boot的`@DataJpaTest`注解来隔离数据库操作,只测试业务逻辑,而...

    HTTP协议详解(真的很经典)

    - **Connection**字段指明了连接是否应该保持打开状态。 **2. 响应消息结构** HTTP响应消息也由三部分组成:状态行、响应头部、实体主体。 - **状态行**包含HTTP版本、状态码以及状态消息。 - **状态码**用于...

Global site tag (gtag.js) - Google Analytics