新闻  |   论坛  |   博客  |   在线研讨会
中电金信技术实践|分布式事务简说
中电金信人 | 2022-08-04 11:10:20    阅读:113   发布文章

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。本篇文章主要是对分布式事务进行简说,与各位同仁进行探讨切磋。

传统事务


在传统单体应用架构下,我们通常会将业务数据存储在一个数据库中,应用各模块直接对数据库进行操作业务数据。由数据库提供基ACID的事务保证。


A是Atomic原子性的简称(事务作为整体来执行,要么全部执行,要么都不执行。)


C是Consistency一致性的简称(事务应确保数据从一个一致的状态转变为另一个一致的状态。)


I是Isolation隔离性的简称(多个事务并发执行时,一个事务的执行不应影响其他事务的执行。)


D是Durability持久性的简称(已提交的事务修改数据会被持久保持。)


业务拆分微服务化事务


随着微服务架构和云计算的流行,很多大型的业务流程被拆分成了多个功能单一的基础服务,大家会根据业务的诉求在这些基础服务之上编写一些组合调用服务以满足业务诉求。


为了保证微服务能够独立开发部署运行,通常我们会采用一个微服务一个数据库的架构,将内部数据经微服务封装之后,以服务方式对外暴露。


这样以往基于数据库来实现的数据操作就变成了多个对外提供服务的微服务系统的协同完成操作。因为单个微服务只知道自己的服务执行情况,为了保证分布事务的一致性,参与分布式事务的微服务通常会依托协调器完成相关的一致性协调操作。


编辑


分库分表跨库事务


随着微服务的兴起,单库的连接数和并发已经达到了瓶颈,为了解决单库性能瓶颈的问题,我们引入了数据库的垂直分库和水平分表,而分库分表后,原来在一个数据库上就能完成的写操作,可能就会跨多个数据库,这时原有的单机事务往往会变成分布式事务,出现了跨库事务问题。


编辑


分布式事务诉求


■ 跨数据库分布式事务

系统分库、分表后,跨库事务几乎无法避免,分布式事务可以让应用轻松具备跨库事务处理能力。


■ 跨服务的分布式事务

分布式事务与分布式微服务平台结合,提供跨库、跨服务的事务支持,实现业务链路级别的分布式事务。


■ 消息队列分布式事务

在多次调用消息系统的场景中,通过分布式事务应用可轻松具备消息事务的处理能力。


■ 混合的分布式事务

分布式事务可将各个资源加入事务范畴,实现同时跨服务、数据库、跨消息系统的事务处理能力。


■ 多种事务模式

提供了标准事务模式、自定义事务模式和重试模式,以供选择并应用于不同的业务场景。


分布式事务架构


编辑


分布式事务模式(SAGA事务模式)


编辑


Saga是一种补偿协议,在Saga模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。


分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。Saga正向服务与补偿服务也需要业务开发者实现。


分布式事务模式(TCC事务模式)


编辑


TCC(Try-Confirm-Cancel)实际上是服务化的两阶段提交协议,业务开发者需要实现这三个服务接口,第一阶段服务由业务代码编排来调用Try接口进行资源预留,所有参与者的Try接口都成功了,事务管理器会提交事务,并调用每个参与者的Confirm接口真正提交业务操作,否则调用每个参与者的Cancel接口回滚事务。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客