`
huangyongxing310
  • 浏览: 499188 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

最终一致性的常用做法

 
阅读更多
最终一致性的常用做法

1、单数据库事务
利用数据库的事务特性来满足事务的一致性,这时候的一致性是强一致性的。


2、多数据库事务
针对多数据库事务可以根据二阶段提交协议,采用spring 3.0 + Atomikos + JTA进行支持;


3、基于事务型消息队列的最终一致性
借助消息队列,在处理业务逻辑的地方发送消息,业务逻辑处理成功后,提交消息,确保消息是发送成功的,之后消息队列投递来进行处理,如果成功,则结束,如果没有成功,则重试,直到成功,不过仅仅适用业务逻辑中,第一阶段成功,第二阶段必须成功的场景。


4、基于消息队列+定时补偿机制的最终一致性
前面部分和上面基于事务型消息的队列,不同的是,第二阶段重试的地方,不再是消息中间件自身的重试逻辑了,而是单独的补偿任务机制。其实在大多数的逻辑中,第二阶段失败的概率比较小,所以单独独立补偿任务表出来,可以更加清晰,能够比较明确的直到当前多少任务是失败的。对应上图的E流程。


5、异步回调机制的引入
A应用调用B,在同步调用的返回结果中,B返回成功给到A,一般情况下,这时候就结束了,其实在99.99%的情况是没问题的,但是有时候为了确保100%,记住最起码在系统设计中100%,这时候B系统再回调A一下,告诉A,你调用我的逻辑,确实成功了。其实这个逻辑,非常类似TCP协议中的三次握手。


6、类似double check机制的确认机制
A在同步调用B,B返回成功了。这次调用结束了,但是A为了确保,在过一段时间,这个时间可以是几秒,也可以是每天定时处理,再调用B一次,查询一下之前的那次调用是否成功。例如A调用B更新订单状态,这时候成功了,延迟几秒后,A查询B,确认一下状态是否是自己刚刚期望的。



分布式事务的缺点
1、二阶段提交协议缺点
两阶段提交涉及到多个节点的网络通信,通信时间如果过长,事务的相对时间也就会过长,那么锁定资源的时间也就长了.在高并发的服务中,就会存在严重的性能瓶劲,也不一定可以保证一致性


2、消息队列
在高并发的环境中,我们一般会采用消息队列来避免分布式事务的执行。
在使用消息队列时,我们需要做到可靠凭证的保存(分布式事务的消息),有如下几种方式:
以支付宝和余额宝为例进行说明.
支付宝完成扣钱的动作时,记录消息数据,将消息数据和业务数据存在同一个数据库实例中.(同一个库保证了一致性)

将支付宝完成扣钱的消息及时发送给余额宝,余额宝完成处理后返回成功消息,支付宝收到消息后,消除消息表中对应的消息记录,即完成本次扣钱操作.




//=========================================
MQ也可以在另一个线程中进行发送,发送成功后就删除,就算删除不成功也没问题,大不了多发了一个消息。


为了确保消息的安全性,可以在发送端保存消息,更改状态表示消息已经发送了,通过消费端的回复再确认消息已经消费成功了就更安全了(防止MQ的数据丢失)
当然确保消息一定发送出去也是要确保才行



https://blog.csdn.net/zxl315/article/details/53433707(分布式事务最终一致性常用方案)

https://blog.csdn.net/qq_27384769/article/details/79305402(分布式事务)


































分享到:
评论

相关推荐

    分布式事务最终一致性常用方案.docx

    **二、最终一致性常用做法** 1. **单数据库事务**:利用数据库自身的事务机制,如MySQL的InnoDB引擎,保证单个数据库内的强一致性。 2. **多数据库事务**:采用二阶段提交(2PC)协议,通过Spring的JTA支持,协调多...

    .NET-Ray分布式高性能事件溯源事件驱动最终一致性框架

    最终一致性是分布式系统中常用的一致性模型,它允许数据在多个副本间存在短暂的不一致,但最终会达到一致状态。在Ray框架中,通过事件复制和冲突解决策略来实现最终一致性。例如,使用事件排序和版本控制来管理并发...

    springboot缓存一致性解决

    常见的有三种:强一致性、最终一致性和读已写一致性(Read-Your-Writes Consistency)。在分布式系统中,强一致性很难实现,因为需要保证所有节点在同一时刻看到相同的数据,这通常会牺牲系统的可用性。因此,Spring...

    多智能体一阶二阶一致性matlab仿真

    首先,一阶一致性是指多智能体系统的每个个体通过与邻居交换信息,最终使所有个体的状态(如位置、速度等)收敛到同一值。这通常通过一阶动态模型来描述,即每个智能体的状态更新依赖于其自身状态和邻居状态的偏差。...

    一致性_多智能体_多智能体MATLAB_一致性_多智能体MATLAB_multiagent

    一致性是多智能体系统中的核心概念,它是指多个智能体通过相互交互,最终达到一种集体行为或状态的一致性。这种一致性可以体现在位置、速度、决策等多个方面,目的是使得整个系统能够协同工作,达成共同的目标。在...

    consensus.rar_consensus_consensus算法_matlab_一致性_一致性算法

    "数学中常用的30个MATLAB程序和函数.doc"文档提供了额外的学习资源,帮助用户更好地理解和应用一致性算法。这些程序和函数可能包括向量和矩阵操作(如dot product、matrix multiplication)、线性代数工具(如...

    分布式一致性最优化的梯度算法与收敛分析.pdf

    这可能涉及到解决约束条件下的一致性优化问题,例如,保证所有智能体的决策或状态最终达成一致。 3. 梯度算法:在分布式环境中,利用节点之间的信息交互,通过梯度下降方法进行最优化计算。 4. 收敛性与参数设定:...

    从GFS失败的架构设计来看一致性的重要性.docx

    强一致性要求读操作总能返回最近写操作的结果,而最终一致性则允许短暂的数据不一致,但随着时间推移,所有节点最终会达成一致。 GFS在设计之初,为了实现高可用性和性能,选择了牺牲部分一致性来换取更大的系统...

    7 一致性和复制1

    1. **最终一致性**:在一段时间后,所有副本最终达到一致状态。这是许多分布式系统的常用策略,因为它允许较高的可用性和性能。 2. **单调读一致性**:确保一旦读取到某个值,后续读取不会返回更旧的值。 3. **...

    高可用数据库系统中的分布式一致性协议.pdf

    为保证数据的一致性,必须确保这些副本之间能够在事务更新操作时,通过某种协议来确定一个全局的执行顺序,保证数据状态能够最终一致。分布式一致性协议的挑战在于如何处理并发更新,并在多个副本间进行有效协调。如...

    掘地三尺搞定 Redis 与 MySQL 数据一致性问题.doc

    最后,文章总结了缓存的一致性问题的解决方案,并强调了设置缓存的过期时间是保证最终一致性的解决方案。 关键词:Redis、MySQL、数据一致性、缓存、Cache-Aside Pattern、Read-Through Pattern、Write-Through ...

    具有时延和网络攻击的多智能体系统一致性.pdf

    在这些应用中,一致性问题是一个关键问题,因为需要所有智能体的最终状态趋近相同。 本文的主要贡献是在时延和网络攻击下的多智能体系统一致性问题。时延是指智能体之间的通信延迟,而网络攻击是指恶意攻击智能体的...

    分布式系统一致性(ACID、CAP、BASE、二段提交、三段提交、TCC、幂等性)原理详解1

    然后,BASE原则是大型分布式系统中常用的一种弱一致性模型,它是Basically Available(基本可用)、Soft state(软状态)和Eventually Consistent(最终一致性)的组合。它允许系统在短时间内容忍不一致,但最终会...

    行业分类-设备装置-为缓存一致性处理缓存回写和缓存淘汰.zip

    这类系统通常采用强一致性或最终一致性模型,前者要求所有读写操作都能看到最新的数据,后者允许短暂的数据不一致,但最终会达到一致状态。Paxos、Raft等一致性算法是解决此类问题的常用方法。 总的来说,缓存回写...

    实时数据的一致性保障技术.pptx

    1. **非二进制一致性(Eventual Consistency)**:允许数据副本存在短暂的不一致性,但在一定时间内会达到最终一致性。这种方式适用于对实时性要求不高、可以接受最终一致性的场景。 2. **冲突检测与解决**:通过...

    无线网络控制系统一致性研究.pdf

    一致性是指网络中的多个节点通过相互交互,最终达到相同状态或遵循同一规则运行的状态。在分布式控制系统中,一致性是确保系统整体性能和稳定性的重要指标。在无线网络控制系统中,由于无线通信的不稳定性、传输延迟...

    非完整性一致性编队(小车 会议).rar

    一致性算法则是多智能体系统中的一种关键控制策略,它允许每个个体仅与其邻居进行通信,通过不断更新状态,最终使得整个系统的状态达到一致。在编队控制中,一致性算法可以确保所有小车的速度和位置逐渐趋近于某个...

    具有通信时延的多自主体系统时变参考输入的平均一致性跟踪.docx

    在多自主体系统中,一致性问题是指设计适当的一致性算法,使自主体间通过局部通信交流最终趋向于相同的状态值。自主体动态包括单积分、双积分、高阶线性模型、非线性模型等动态模型。在设计一致性算法时,需要考虑多...

    非均匀拓扑网络中的分布式一致性状态估计算法.pdf

    在研究分布式系统领域中,分布式一致性状态估计算法是确保网络中各个节点能够协同工作并最终达成对某一状态的共识的关键技术。本文深入探讨了在非均匀拓扑网络环境下,如何高效地实现分布式一致性状态估计,提出了四...

Global site tag (gtag.js) - Google Analytics