幂等性是什么?如何解决分布式幂等性?

幂等性是分布式系统的关键点,也是大厂经常考察的内容,下面我重点谈谈分布式幂等性@mikechen

幂等性

幂等性(Idempotence),在计算机科学中,特别是分布式系统、和网络编程中是一个非常重要的概念。

幂等性,指的是一个操作,无论执行一次还是多次,产生的结果都是相同的,并且不会因为多次执行而产生副作用。

幂等性是什么?如何解决分布式幂等性?

 

幂等性实现原理

幂等性的核心实现,是通过设计让重复操作不影响最终结果。

主要为了防止用户在网络异常、请求重复提交、或恶意操作时,生成重复订单,保证每个订单的操作是唯一的。

在电商平台中,下订单的幂等性非常重要,可以防止用户重复下单。

如下图所示:

幂等性是什么?如何解决分布式幂等性?

商品下订单的幂等性,就是电商系统中一个非常重要的问题。

在商品下订单的过程中,幂等性确保无论用户因网络延迟、或误操作多次提交相同请求,最终结果都应保持一致,即只创建一个订单。

实现这一点的关键在于:唯一标识符。

比如:为每个订单生成一个唯一标识符,比如:订单号/或支付流水号。。。等等都可以,系统在处理请求时首先检查该标识符是否已存在。

如下所示:

public boolean createOrder(Order order) {
    // 生成唯一订单号
    String orderId = generateOrderId();
    order.setOrderId(orderId);

    // 查询订单是否存在
    Order existingOrder = orderDao.findByOrderId(orderId);
    if (existingOrder != null) {
        // 订单已存在,直接返回成功
        return true;
    }

    // 插入订单
    orderDao.insertOrder(order);

    return true;
}

大致流程,如下:

首先,前端生成唯一请求 ID(订单号),并求提交到后端;

然后,后端检查数据库、或缓存中,是否存在该请求 ID;

然后,如果不存在,处理下单逻辑并记录请求 ID;

如果已存在,直接返回已有的订单结果;

在处理订单请求时,首先根据订单号查询数据库,如果已经存在该订单,则直接返回成功,否则继续处理。

确保用户在下单时,即使因网络原因多次点击“提交”按钮,也只会生成一个有效的订单,避免重复扣款。

总之,通过幂等性的设计、和实现,可以有效地避免重复订单、保证数据一致性,提升用户体验。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧