幂等性是分布式系统的关键点,也是大厂经常考察的内容,下面我重点谈谈分布式幂等性@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面试题总结》