java分布式事务解决方案,微服务架构和分布式架构的区别
- 软件开发
- 2023-09-18
- 72

大家好,今天来为大家解答java分布式事务解决方案这个问题的一些问题点,包括微服务架构和分布式架构的区别也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们...
大家好,今天来为大家解答java分布式事务解决方案这个问题的一些问题点,包括微服务架构和分布式架构的区别也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
分布式事务和本地事务有冲突吗
分布式事务和本地事务在一定情况下可能会存在冲突。传统的本地事务是指在单一数据库上执行的事务,具有ACID(原子性、一致性、隔离性和持久性)特性。本地事务通常只涉及单一数据库的操作,因此可以较为简单地进行管理和控制。而分布式事务是指涉及多个独立的系统或数据库的事务,它要求对多个系统或数据库的更新操作保持一致性。分布式事务需要处理多个资源的协调和同步,因此比本地事务更加复杂。在某些情况下,分布式事务和本地事务可能会冲突。例如,在分布式系统中,一个事务可能涉及到多个独立的数据库或服务,可能需要在不同的网络环境中执行操作。在这种情况下,需要通过分布式事务管理机制来确保事务的一致性和隔离性。然而,由于分布式事务的复杂性和性能开销,有时会选择在某些系统中使用本地事务而不是分布式事务。这种情况下,可能会存在分布式事务和本地事务之间的冲突。在这种情况下,可能需要考虑使用一致性协议或其他机制来解决分布式事务和本地事务之间的冲突。
细观分布式事务的出现和演变过程是什么
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。*阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。*阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。分布式事务处理(TP)系统旨在协助在分布式环境中跨异类的事务识别资源的事务。在分布式TP系统的支持下,应用程序可以将不同的活动合并为一个事务性单元,这些活动包括从"消息队列"队列检索消息、将消息存储在MicrosoftSQLServer数据库中、将所有现有的消息引用从OracleServer数据库中移除,等等。因为分布式事务跨多个数据库资源,故强制ACID属性维护所有资源上的数据一致性是很重要的。
如何使用消息队列解决分布式事务
使用prepared消息和确认消息是一种常见的基于消息中间件实现分布式事务的方式。具体实现流程如下:
事务协调器向消息中间件发送Start消息,表示开始一个新的分布式事务。消息中间件返回TransactionID(tid),表示该事务的唯一标识。业务系统向消息中间件发送Prepare消息,并携带该事务的tid和需要执行的本地事务数据。同时,业务系统需要等待消息中间件回复Prepare-Ack消息。消息中间件收到Prepare消息后,向所有参与者节点分别发送Prepare消息,并携带该事务的tid和参与者需要执行的操作数据。参与者节点如果能够成功执行操作,则向消息中间件返回Prepare-ok消息。消息中间件依次接收每个参与者节点的Prepare-ok消息,如果所有参与者节点都返回了Prepare-ok消息,则向业务系统回复Prepare-ack消息,并进入提交状态。如果有任何一个参与者节点返回了Prepare-fail消息,则向业务系统回复Prepare-fail消息,并进入回滚状态。如果消息中间件回复了Prepare-ack消息,则业务系统开始执行本地事务,并将结果存储到准备提交的消息数据结构中。同时,业务系统需要发起Confirm消息,携带该事务的tid和本地事务执行结果。消息中间件收到Confirm消息后,向所有参与者节点分别发送Commit消息或Rollback消息。参与者节点需要根据消息携带的tid和本地事务执行结果,决定是执行Commit操作还是Rollback操作,并返回Commit-ok或Rollback-ok消息。消息中间件依次接收每个参与者节点的Commit-ok或Rollback-ok消息,如果正常接收到了所有参与者节点的消息,则向业务系统回复Confirm-ack消息,并完成该事务的提交或回滚操作。疑问:如果有节点没有commit-ok消息呢?
如果有参与者节点在接收了Commit消息后没有正常返回Commit-ok消息,那么消息中间件需要进行异常处理。
一种处理方式是等待所有参与者节点的反馈,如果在超时时间内收到反馈则继续往下执行,到达Commit-ok或Rollback-ok消息对应的阶段,而缺失的参与者节点则被认为是异常的,进入补偿阶段进行回滚操作。这需要利用消息中间件保证消息的幂等性。
手动补偿:由管理员手动对已经提交的事务进行回滚操作。这种方式需要手动介入,操作费用高,且容易出错。基于本地事务回滚:由消息中间件向参与者发送回滚消息,让参与者执行本地事务回滚操作,保证事务的一致性。这种方式简单易行,但是需要保证参与者的本地事务支持回滚操作。基于日志记录的回滚:在事务提交的过程中,记录所有涉及到的数据和操作,如果出现异常,则利用记录的日志进行回滚操作。这种方式需要保证日志的完整性和正确性,并且需要对没有回滚的日志进行处理,否则可能会导致数据不一致。基于分布式事务管理器的回滚:利用分布式事务管理器(如TCC、Seata)提供的回滚机制来实现补偿操作,保证事务的一致性。这种方式依赖于分布式事务管理器的技术选型,并且需要进行适当的配置和使用。基于消息队列的重试机制:将无法提交或回滚的事务信息重新发送至消息队列,等待下一次操作,如果多次尝试后仍然失败,则需要进行手动补偿操作。基于定时任务的重试机制:利用定时任务对未能成功提交或回滚的事务进行自动重试,如果多次尝试后仍然失败,则需要进行手动补偿操作。基于容错性框架的自动重试:依据具体业务需求选择适合的分布式容错框架,通过配置自动重试次数和时间间隔等参数来实现自动重试,减少手动干预。分布式事务框架有哪些
可以按照几个大的维度来区分:1、有状态、无状态;2、重存储还是重计算;3、longservice还是批处理。一些常见的分布式系统大类:支持持久化存储的分布式存储系统;着重计算的分布式/并行计算框架;分布式消息队列。
同时也可以根据不同的应用的领域,把上述分类细化。
如何创立阿里巴巴分布式事务高效全新解决方案
钱到位,人到位,然后时间到位,至少三年后才行。
分布式、中间件和消息队列到底是怎么的一种工作模式
分别解释一下什么是分布式、中间件和消息队列;如果有说的不对的地方,请留言指正:
分布式一个业务被拆成多个子业务,部署在多台服务器上,这个就叫做分布式。
我有一个系统A,提供一个很简单的接口,根据员工编号查询员工姓名和他的考勤记录。
我拆开两个系统:人员管理系统B和考勤系统C,分别部署在两台服务器上。
这个需求,需要调用一下系统B,再调用一下系统C,最后得到需要的结果。
这个就是分布式。
中间件将具体业务和底层逻辑解耦的软件。
举个例子:
我要开一家炸鸡店(业务端),需要鸡肉,有很多养鸡场(底层),我需要一个一个比较价钱,然后找一家性价比高的养鸡场合作(适配不同底层逻辑)。可能一段时间后,我需要重新选一家养鸡场合作,进货方式、交易方式等要重新制定(重新适配)。
这一套事情太复杂了,于是我找到了一个专门整合养鸡场的第三方代理(中间件),跟他谈好价格和质量后(统一接口),以后我就只需要给代理钱,然后拿肉就行。具体这个第三方代理怎么操作,我不用管。
消息队列消息队列可以看做内存中的队列,有人往里放消息,有人从里取消息。
Producer:消息生产者。Broker:消息处理中心,负责消息存储、确认、重试等。Consumer:消息消费者。消息队列的特点是:异步、解耦、可靠性(消息队列一般会把接收到的消息持久化到本地硬盘上)
用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ,它们又可以被称作是消息中间件,消息中间件解决的就是分布式系统之间消息传递的问题。
举个例子:
比如我是做网上商城的,有一个短信系统,当客户下了一个订单之后,通知客户你下单成功。
当订单量比较小的时候,只需要调用发送短信的接口就可以了。
但是如果订单量大了之后呢,并且短信发送晚个一两分钟也没有什么问题,那么就可以使用消息中间件:把待发送的短信发送到消息队列里面,短信系统从消息队列中取出短信进行发送就可以了。
而且还有一个好处:如果短信系统挂掉了,短信消息保存在消息中间件里面不会丢失,等短信系统恢复了之后,继续短信发送即可。
我将持续分享Java开发、架构设计、科技前沿、程序员职业发展等方面的见解,希望能得到你的关注。好了,文章到此结束,希望可以帮助到大家。
本文链接:http://xinin56.com/ruanjian/26294.html