图灵学院 java架构师学习路线-分布式架构为什么需要保证幂等性
编程中的“幂等性”是指任意执行次数的效果,与一次执行的效果相同。具有幂等设计的接口可确保无论该接口被调用一次还是多次,都可以获得相同的结果。在某些情况下(例如用户下订单的情况),接口的幂等设计是必需的。
我们知道,服务之间的调用存在三种状态:成功、失败、超时。超时是一种未知的状态:被调服务是否执行成功,这个状态是未知的。上游服务调用下游服务超时时可能会进行重试。对于用户下单的场景的超时重试我们考虑以下问题:
是否会导致最终创建了两条一样的订单?
是否会扣除两遍库存?
是否会重复扣除用户的钱?
如果每个订单都带有唯一的序列号,则订单放置界面可以使用该序列号来记录订单操作的状态。当订单状态成功时,将阻止重复执行以避免上述问题。这样,下游方被转移以确保幂等。
另外,订单服务还可以提供用于查询订单状态的界面。上游在下订单之前执行查询,并确认尚未成功支付订单,然后重复执行订单操作。
一般而言,服务本身需要自己保证幂等性,幂等性不应移交给上游呼叫者。
如果你想了解更多关于java架构师的专业知识,可以一起交流:11604这里面都是同行05674,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!