zoukankan      html  css  js  c++  java
  • 幂等

    对外提供的接口承诺幂等性,其要表达的含义是:只要调用接口成功,外部对接口的多次调用得到的结果是相同的。即执行多次和一次的效果是一样的。

    业务开发中,经常会遇到重复提交的情况,无论是由于网络问题无法收到请求结果而重新发起请求,或是前端的操作抖动而造成重复提交情况。幂等接口认为,外部调用者会存在多次调用的场景,为了防止重试对数据状态的改变,需要将接口的设计为幂等的。

    幂等策略

    幂等需要通过唯一的业务单号来保证。也就是说相同的业务单号,认为是同一笔业务。使用这个唯一的业务单号来确保,后面多次的相同的业务单号的处理逻辑和执行效果是一致的。

    通过幂等(Idempotent)模式处理重复的消息,基本处理思路是:

    • 调用者给消息一个唯一请求ID标识。ID标识一个工作单元,这个工作单元只应执行一次,工作单元ID可以是Schema的一部分,也可以是一个定制的SOAP Header,服务的Contract 可以说明这个唯一请求ID标识是必须的;
    • 接收者在执行一个工作单元必须先检验该工作单元是否已经执行过。检查是否执行的逻辑通常是根据唯一请求ID ,在服务端查询请求是否有记录,是否有对应的响应信息,如果有,直接把响应信息查询后返回;如果没有,那么就当做新请求去处理。

     业务系统实现幂等的通用方式

    先识别出幂等和非幂等操作。有些操作是天然幂等的,譬如数据库查询操作。

    然后是一般是排重表校验。

    考虑如下场景:在一个面向交易的分布式应用中,支付子系统完成了支付功能,支付子系统通知订单子系统,通知的方式无非是调用订单子系统的一个函数f而已,只是调用的方式分为同步和异步。无论是同步还是异步,f都可能存在超时,所以为了支持重试,f必须是幂等的。f会首先根据传入的订单号来查找订单,检查订单状态。如果是已经支付,就会直接返回成功。如果是待支付状态,那么会尝试锁定(悲观锁和乐观锁)订单,修改状态,指定其他操作,其中锁定只是为了防止并发操作。

    参考资料

    http://yongpoliu.com/idempotent/

    http://marvinsworld.cn/2016/06/02/idempotent-solutions/

  • 相关阅读:
    Python爬虫-- BeautifulSoup库
    Python爬虫--Requests库
    Python爬虫--Urllib库
    Python爬虫--初识爬虫
    性能测试--十个命令迅速发现性能问题
    性能测试--测试流程、APDEX、linux性能知识
    性能测试--Jmeter的Non GUI模式、集群
    Python使用Timer实现验证码功能
    Python 之Event
    Python信号量
  • 原文地址:https://www.cnblogs.com/lddbupt/p/5768482.html
Copyright © 2011-2022 走看看