幂等性、重复提交、ABA问题

幂等性(idempotence):是指一个函数在多次执行时,无论执行多少次,产生的结果都是一样的。在分布式系统中,幂等性是指一个操作无论执行多少次,对系统状态都没有影响。

重复提交:是指在分布式系统中,由于网络延迟等原因,同一个请求可能会被多次提交。重复提交会导致系统状态不一致,甚至数据丢失。

ABA问题:是指在分布式系统中,由于某些原因,一个事务可能会被多次提交,但是每次提交的值都不同。ABA问题会导致系统状态不一致。


1、如何避免重复提交

    1.1、使用乐观锁
        乐观锁是一种基于版本号的并发控制方式,它假设在大多数情况下,不会发生冲突。当一个事务开始时,会获取一个版本号。当事务提交时,会检查数据库中该数据的版本号是否与事务开始时获取的版本号相同。如果相同,则提交事务;如果不同,则回滚事务。
    1.2、使用悲观锁
        悲观锁是一种基于排他的并发控制方式,它假设在大多数情况下,会发生冲突。当一个事务开始时,会对数据库中该数据进行加锁。只有该事务结束后,才会释放锁。其他事务在获取该数据时,会被阻塞。
    1.3、使用事务组
        事务组是一种将多个事务组合在一起进行提交的并发控制方式。当事务组中的所有事务都提交成功时,整个事务组才会提交成功。如果有一个事务提交失败,则整个事务组都会回滚。

2、如何避免ABA问题

    2.1、使用版本号
        在每次更新数据时,都增加一个版本号。当一个事务开始时,会获取数据的当前版本号。当事务提交时,会检查数据的版本号是否与事务开始时获取的版本号相同。
        如果相同,则提交事务;如果不同,则回滚事务。
    2.2、使用时间戳
        在每次更新数据时,都增加一个时间戳。当一个事务开始时,会获取数据的当前时间戳。当事务提交时,会检查数据的时间戳是否与事务开始时获取的时间戳相同。
        如果相同,则提交事务;如果不同,则回滚事务。

3、出现问题的场景

    3.1、重复提交
        用户在网上下单,但是由于网络延迟,订单可能被多次提交。如果系统没有对重复提交进行处理,则用户可能会收到多份订单。

    3.2、ABA问题
        用户在网上银行转账,但是由于网络延迟,转账金额可能被多次修改。如果系统没有对ABA问题进行处理,则用户的账户余额可能不正确。
 

你可能感兴趣的:(分布式系统,程序人生)