美文网首页程序员分布式架构
保证最终一致性模式

保证最终一致性模式

作者: Real_man | 来源:发表于2019-01-22 22:49 被阅读14次

在分布式系统中,一个功能被拆分成多个具有单一功能的子模块,一个流程就会有多个服务模块组合实现,数据可能会出现不一致的问题,但是有时候我们不需要实时的保持一致,只要我们能保证最终一致性即可。

下面介绍几个常见的保证最终一致性的模式:

查询模式

任何服务都提供一个查询接口,用来向外部输出操作执行的状态。调用方根据查询接口得知服务执行状态,根据不同状态做不同的处理操作。

每一个操作都需要有唯一的请求流水号,也可以提供批量查询接口。

比如:支付宝的资金冻结接口与资金操作查询接口。支付接口(可能会出现支付成功与支付失败)与支付状态查询接口。

异步确保模式

异步确保模式是补偿模式的一个典型案例,经常应用到使用放对响应时间要求不太高的场景中,有时候执行方无法立刻返回结果,先告知业务方等待,在执行成功的时候再异步通知业务方执行成功,不过业务方在调用的时候需要指定回调的URL,如果回调失败,记录失败状态,等定时任务再次进行回调,直到成功为止。

关键:操作入库,定时任务捞取未完成任务进行补偿。

image

定期校对模式

系统再没有达到一致之前,系统的状态可能是不一致的,需要补偿操作来达到最终的一致性目的,但是如何发现需要补偿的操作呢?

在操作主流程中的系统间执行校对操作,可以在事后异步的批量校对操作的状态,如果出现不一致的操作则进行补偿。定期校对的一个关键是分布式系统中需要有一个自始至终唯一的ID。

生成方式的话有很多项目可以做到。参考生成全局唯一 ID 的 3 个思路

定期校对模式多应用于金额系统中,金融系统由于涉及资金安全,需要保证准确性,所以需要多重的唯一性保证机制。包括商户对账,现金对账,财务对账等。

最后

在系统对一致性没有那么及时,那么强的要求情况下,我们可以使用上面的方式来保证最终一致性,有时候我们可能会引入MQ来进行完全的解耦。

参考

相关文章

  • 保证最终一致性模式

    在分布式系统中,一个功能被拆分成多个具有单一功能的子模块,一个流程就会有多个服务模块组合实现,数据可能会出现不一致...

  • 缓存的一致性

    最终一致性 给缓存设置过期时间,是保证最终一致性的解决方案。 场景:更新缓存呢,还是删除缓存? Cache Asi...

  • Eventually-Consistent Storage Ba

    当Janusgraph运行在具有最终一致性的存储后端上时,为了保证数据的一致性,需要使用Janusgraph支持最...

  • ClickHouse 21.7.3.14-2(十一) 数据一致性

    查询 CK 手册发现,即便对数据一致性支持最好的 Mergetree,也只是保证最终一致性.我们在使用 Repla...

  • 面试官问:ZooKeeper是强一致的吗?怎么实现的?

    Zookeeper通过ZAB保证分布式事务的最终一致性。 ZAB全称Zookeeper Atomic Broadc...

  • 分布式事务

    一致性保证 强一致性 任何依次读的数据都是最新的。 弱一致性 最终一致性 分布式事务 两阶段提交 分为2部分 vo...

  • 聊聊面试中的分布式事务-强一致性保证

    一致性保证 强一致性 任何依次读的数据都是最新的。 弱一致性 最终一致性 分布式事务 两阶段提交 分为2部分 vo...

  • Java面试题2018

    Java三大特性封装:继承:多态: 设计模式单例模式: 多线程 数据一致性如何保证;Synchronized关键字...

  • session一致性保证

    目录 一致性保证 一致性保证 保证session一致性的架构设计常见方法: session同步法:多台web-se...

  • 事物补偿模式 Compensating Transaction

    为了保证最终一致性, 在错误发生时, 沿着整个错误的传递路径进行undo操作. 对于复杂的工作流来说, 尽可能保证...

网友评论

    本文标题:保证最终一致性模式

    本文链接:https://www.haomeiwen.com/subject/tqldjqtx.html