分布式事务——理论篇

         数据库事务的四个原则ACID 原子性,一致性,隔离性,持久性

        微服务的软件开发,数据库相互分离,在调用多个服务的过程中,涉及到多个数据库,数据库本身事务无法满足多个数据源之间的ACID。因此引出目前业界比较难处理的分布式事务问题。

分布式事务

原则CAP

一致性,可用性,分区容错性。

在分布式事务处理过程,不可能同时满足上述三者,只能同时满足两者,后续通过其他方案来弥补,到达最终一致性。

理论BASE

通过控制软状态的变化,到达最终一致性效果

相关协议

XA 两段式协议

         XA有协调者,负责通知按链路执行通知所有参与者准备执行,待收到所有参与者都可以执行成功消息,通知参与者正式提交。因为XA协议是链路顺序执行,很容易因为某个端点超时处理,造成“同步阻塞”,影响之后链路的正常执行,而造成整个事务失败。

基于两段式产生的三段式协议

       对于二阶段中同步阻塞问题优化,引入超时机制,解决阻塞问题。三阶段分为预备,准备,终止事务

      在预备,准备阶段任何参与者回复执行异常或者等待超时,则直接终止事务。但是等待超时,其他事务回滚,超时者本身却执行成功,也存在造成数据不一致性的情况。

具体的实现方案

1、最终一致性(可靠消息服务)

方案特点

可独立部署,独立伸缩(扩展性)

兼容所有实现JMS标准的MQ中间件

能降低业务系统与消息系统间的耦合性

可在数据可靠的前提下确保最终一致性

利用可靠消息服务的时候,注意处理逻辑过程的幂等性,防止因为网络波动,重复请求,分布式消息消费,用户重复操作,未关闭的重试机制等原因造成的逻辑重复处理。

在幂等性的处理方案分为以下几种

1)、分布式锁

2)、数据库唯一索引

3)、状态流转——状态机控制

4)、乐观锁,多版本控制

5)、select + insert (先查后处理,此方式对于高并发场景不建议使用)

2、TCC (阿里框架)

本质上是二阶段提交,实现最终一致性。

try confirm cancel,在try预处理过程,通过执行结果,选择confirm或者cancel二者之一。

方案特点

不与具体的服务框架耦合

位于业务服务层,而非资源层

灵活选择业务资源的锁定粒度

适用于强隔离性,严格一致性要求的业务场景

适用于执行时间较短的业务

3、最大努力通知型方案

适用于跨平台,尽量去处理通知,即便失败,影响不大的场景

在实际的业务场景中一般这几种情况配合使用,能满足具体的业务场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值