1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Spring事务&分布式事务&单服务处理多数据源事务

实际业务中的事务处理

作为本际云服务器推荐网的小编小本本,今天我们将讨论一个实际业务问题,即事务处理。在业务系统中,对接外部系统是不可避免的,这些外部系统包括很多中间件(例如数据库),而事务处理则涉及到将这些外部系统与业务系统有机地结合起来。在本文中,我们以一个以gitlab为底层系统的代码仓为例,来说明如何处理事务。

Spring事务&分布式事务&单服务处理多数据源事务

对接外部系统的优劣势

对接任何外部系统都可以概括为两种方式:对接方式A和对接方式B。对接方式A是上游系统提供的接口,无需关注其自身业务逻辑,只需要维护接口版本;对接方式B则需要对上游系统底层存储(例如数据库、文件等)进行梳理和维护,而这也意味着在代码层面上具备了很高的灵活性和可控性。在本业务例子中,gitlab接入采用HTTP的方式,而非直接对接其数据库,原因在于创建代码仓的业务逻辑较为复杂,直接对接会增加梳理和维护的成本。

分布式事务浅谈

分布式事务一直是实现分布式系统的挑战之一。在单个数据源的系统中,只要该数据源支持事务,例如大部分关系型数据库和一些MQ服务,实现事务相对容易。但在分布式系统中,对于多个数据源访问同一资源的情况,实现事务则会变得比较复杂。为了解决数据一致性问题,我们需要考虑分布式事务的实现,其原则也是最终一致性。虽然在分布式系统中实现完全一致性是不可能的,但我们可以采用其他实现方式来保证最终一致性,例如在单服务多数据源的情况下,可以使用Spring来保证绝大数情况下的事务问题,再加上重试、自行处理错误和异常等补救措施来提高可靠性。

在单服务多数据源的情况下,我们可以利用单数据库事务特性,同时借助Spring的事务管理方式。虽然Spring官方文档建议使用申明式事务管理方式,但在回滚数据库事务需要执行其他操作时(如API的反操作)时,手动方式才能够实现。事实上,分布式系统越复杂,它的出错情况就越多,因此需要综合多种机制来实现分布式事务最终一致性的目标。

在实现分布式事务时,我们可以选择五种模式:XA方案、TCC方案、本地消息表、可靠消息最终一致方案和最大努力通知方案。在具体场景中,我们需要根据业务要求选择切合实际的模式。

总体而言,在实现分布式事务时需要注意的问题尽量较少代码改动。同时,我们需要考虑如

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7424.html