区别是:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。普通事务就是一般所说的数据库事务。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
普通事务
普通事务就是一般所说的数据库事务。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
事务的ACID特性
原子性(A):所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。
一致性(C):事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B 50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那么最后A账户一定是450元,B账户一定是350元。
隔离性(I):所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。
持久性(D):所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。
有了原子性为什么还要提一致性呢,原子性不能保证一致性吗?这就涉及到并发事务的概念。对于单个事务来说,原子性就能保证一致性,但是对于多个并发执行的事务,即使每个事务都是原子执行的,但它们同时执行的话,最终效果可能会不一致。
分布式事务
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。
阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免于难并且在失败之后可以重新对所有资源进行更新。
阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。 在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。
延伸阅读:
分布式事务的用途
分布式事务处理 (TP) 系统旨在协助在分布式环境中跨异类的事务识别资源的事务。在分布式 TP 系统的支持下,应用程序可以将不同的活动合并为一个事务性单元,这些活动包括从“消息队列”队列检索消息、将消息存储在 Microsoft SQL Server 数据库中、将所有现有的消息引用从 Oracle Server 数据库中移除,等等。因为分布式事务跨多个数据库资源,故强制 ACID 属性维护所有资源上的数据一致性是很重要的。
在 Transact-SQL 中启动的分布式事务的结构相对比较简单:
1. Transact-SQL脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。
2. 执行该语句的 Microsoft® SQL Server™ 成为事务中的主控服务器。
3. 然后脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。
4. 当执行了分布式查询或远程过程调用后,主控服务器将自动调用 MS DTC 以便登记分布式事务中链接的服务器和远程服务器。
5. 当脚本或应用程序发出 COMMIT 或 ROLLBACK 语句时,主控 SQL Server 将调用 MS DTC 管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
文章标题:分布式事务和普通事务有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37888