Transaction Coordinator:事务协调器。维护分布式事务的状态,负责对分布式事务进行补偿提交或回滚。
事务协调器定义的接口如下:
Transaction Manager:事务管理器。控制分布式事务的边界,负责开启一个分布式事务,并最终发起分布式事务提交或回滚的决议。
事务管理器定义的接口如下:
事务记录是用来记录每笔分布式事务状态的记录以及事务中各个分支事务状态的记录,需要在实际事务操作发生前,先写入到事务记录表,再进行事务操作,如果遇到异常情况,就可以根据存储的事务记录,通过二阶段接口进行分布式事务的恢复,来保证分布式事务的最终一致性。
这种数据恢复的思路也叫做WAL(Write-Ahead-Log) 预写式日志 ,该机制用于数据的容错和恢复,在数据写入到数据库之前,先写入到日志,再将日志记录变更到存储器中。
在工作的过程中,经常会遇到一些分布式环境下数据一致性的问题,尤其是在做一些交易、支付、账户等业务的时候,其中不可避免的会涉及到一些分布式事务领域的技术方案,在之前的工作中也曾经使用过分布式事务框架来解决问题,一直对这一领域的问题十分感兴趣,所以就想着自己动手造个轮子,从零开始写一个分布式事务框架,以此加深自己对分布式事务的理解和在系统架构与实现上的经验积累,在这里记录一下自己造轮子过程中的过程和思考。
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
下面通过源码来了解下SpringBoot的启动流程。(展示代码基于2.1.1.RELEASE
)
|
|
随着业务的发展,为了提高系统的可用性,可维护性等,单一系统逐渐分解为业务功能独立的多个微服务组成的分布式系统集群,事务处理能力也被拆解到各个微服务中。这个时候一笔交易会涉及到交易,支付,券,账户等多个微服务系统的交互,多个微服务之间的交互如何保证上下游系统的数据一致性,就成了在日常研发过程中比较头疼的事情。