当前位置: 首页 > 知识库问答 >
问题:

java - 最终一致性思想应用的业务场景以及实现形式?

家志学
2023-10-18

最近在学分布式事务,了解到分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP和BASE两大理论,实现AP模式或者CP模式。

对于CP模式的使用场景,我可以理解成将多个事务合成为一个大的事务去提交、回滚。

但是我对于AP的最终一致性思想仅仅停留在概念上,对于具体业务场景以及在出现不一致情况下如何进行弥补依然比较模糊,望大佬们可以解答一下,此外,如果可以,希望大佬可以分享一下,实践中这两个模式如何选择。

共有2个答案

姜泰宁
2023-10-18

看一下大佬的:分布式事务

不用想太多,当我们真正用到的时候大多场景是还是CP模式,例如用户的金额操作。

AP操作少,我目前想到的场景也没几个,例如用户注册:在其他系统注册资料时候失败了,但是有一个主资料就可以认为成功,后面通过一定的机制去弥补这部分数据就可以。

姚淳
2023-10-18

AP模式(最终一致性)在业务场景中通常应用在以下几个方面:

  1. 不可预测的业务逻辑:当业务逻辑的执行顺序无法确定,或者执行时间间隔无法控制时,使用AP模式可以保证业务的最终一致性。例如,在金融系统中,用户提交了两个并行的交易请求,一个购买股票,一个卖出股票。由于交易的执行时间和执行顺序无法预测,因此使用AP模式可以保证两个交易的最终一致性。
  2. 高并发场景:在并发量极高的场景下,事务的执行顺序和执行时间都无法控制,此时可以使用AP模式保证最终一致性。例如,在电商网站的促销活动中,由于用户请求并发量很高,事务的执行顺序和时间间隔都无法预测,因此采用AP模式可以保证所有用户的活动权益的最终一致性。

在实践中,选择CP模式还是AP模式,需要考虑到以下几点:

  1. 对一致性的要求:如果业务对一致性要求非常高,那么应该选择CP模式。例如,在银行系统,每个事务的一致性都必须保证,否则会造成严重的经济损失。因此,在这种情况下,应该选择CP模式。
  2. 系统的可用性和性能:如果系统对可用性和性能的要求非常高,那么可以选择AP模式。例如,在一个实时交易系统中,系统的可用性和性能是非常重要的,因此可以采用AP模式以牺牲一致性为代价来保证系统的可用性和性能。
  3. 业务场景的特性:对于一些无法确定执行顺序和时间间隔的业务场景,可以选择AP模式。对于一些强一致性的业务场景,应该选择CP模式。

总的来说,选择哪种模式需要根据具体的业务场景和对一致性的要求来决定。在实践中,也可以通过采用一些技术手段来保证两种模式的灵活切换,如使用分布式锁、事务补偿等机制来保证事务的一致性。

 类似资料:
  • 本文向大家介绍isinstance作用以及应用场景?相关面试题,主要包含被问及isinstance作用以及应用场景?时的应答技巧和注意事项,需要的朋友参考一下 isinstance(对象,类) 判断这个对象是不是这个类或者这个类的子类的实例化   应用场景:rest framework 认证的流程 scrapy-redis  

  • 本文向大家介绍metaclass作用?以及应用场景?相关面试题,主要包含被问及metaclass作用?以及应用场景?时的应答技巧和注意事项,需要的朋友参考一下 metaclass用来指定类是由谁创建的。 类的metaclass 默认是type。我们也可以指定类的metaclass值。在python3中    

  • MySQL多实例的作用与问题 有效的利用了服务器的资源 当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务 节约服务器资源 当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且需要主从同步等技术时,MySQL服务器多实例是一个不错的选择 资源互相抢占的问题 当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存,CPU,磁盘IO资源,导致服务器上的其他的示例提供服务的质量

  • 本文向大家介绍logging模块的作用?以及应用场景?相关面试题,主要包含被问及logging模块的作用?以及应用场景?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题描述 当前分页查询已经不局限于传统的通过用户单击页码栏实现分页 比如微博的首页就实现了滚动实时分页 所以出于好奇想问问大佬当前分页查询都有哪些成熟的实现方案,其各自的适用场景是什么

  • 本文向大家介绍饰器器的写法以及应用场景。相关面试题,主要包含被问及饰器器的写法以及应用场景。时的应答技巧和注意事项,需要的朋友参考一下 含义:装饰器本质就是函数,为其他函数添加附加功能 原则: 不修改被修饰函数的代码 不修改被修饰函数的调用方式 应用场景: 无参装饰器在用户登录 认证中常见 有参装饰器在flask的路由系统中见到过