精华内容
下载资源
问答
  • TTP 1.1 [1] 一共有 8 种方法(methods):OPTIONS、HEAD...这里有两个概念:安全方法(safe methods)以及幂等方法(idempotent methods)。 首先 GET 是「安全」的而 POST 不是。安全方法仅仅获取资源而不进行任何
    TTP 1.1 [1] 一共有 8 种方法(methods):OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。其中我们常用的主要是 GET 和 POST。

    这里有两个概念:安全方法(safe methods)以及幂等方法(idempotent methods)。

    首先 GET 是「安全」的而 POST 不是。安全方法仅仅获取资源而不进行任何其他操作。然而有些服务生成的动态内容会因 GET 而变,比如在搜索引擎多次访问同一个搜索结果条目可能导致它在后续的搜索中排序提升。但这里的所谓安全是对于请求发起者而言,他并不主动期待这样的变化,而是单纯地获取资源。

    而幂等是说,这个方法执行多次和执行一次的效果是一样的。显然 GET 是幂等的,因为除了获取资源什么都不会做;POST 则是像服务器提交数据请求处理,可能导致修改或者创建资源,所以是非幂等的。

    所以你要在 GET 和 POST 之间做选择的话,一个简单的方法是,问问自己:这个操作的目的是使得服务器上的资源或数据发生变更吗?是的话,就用 POST 吧;否则就应该是 GET。
    展开全文
  • http的幂等性及幂等

    千次阅读 2016-09-20 11:05:33
    幂等

    幂等性方法定义:

    9.1.2 Idempotent Methods

    Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.
    (幂等性有下面的属性:当操作次数N>0时,每次得到的结果是相同的,在http请求中GET, HEAD, PUT and DELETE 方法具有幂等性)

    However, it is possible that a sequence of several requests is non- idempotent, even if all of the methods executed in that sequence are idempotent. (A sequence is idempotent if a single execution of the entire sequence always yields a result that is not changed by a reexecution of all, or part, of that sequence.) For example, a sequence is non-idempotent if its result depends on a value that is later modified in the same sequence.
    (非幂等操作同样有重要的意义,比如说最终结果需要依赖一系列修改的时候)

    A sequence that never has side effects is idempotent, by definition (provided that no concurrent operations are being executed on the same set of resources).
    (如果一个操作不是负面影响的,就是幂等操作)比如:在http请求中get 操作,sql中的select操作都是幂等的,而http的put操作,sql的update操作都是非幂等的。

    参考:
    https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
    http://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html

    展开全文
  • 幂等解疑

    2019-05-24 23:08:06
    在编程中,幂等(idempotent)特点就是其任意多次执行所产生的影响均与一次执行的影响相同。幂等的场景有很多,这里不再列举。然而很多人对幂等有一些误解:提到幂等就侃侃而谈悲观锁、乐观锁和分布式锁。这是不对的...

    在编程中,幂等(idempotent)特点就是其任意多次执行所产生的影响均与一次执行的影响相同。幂等的场景有很多,这里不再列举。然而很多人对幂等有一些误解:提到幂等就侃侃而谈悲观锁、乐观锁和分布式锁。这是不对的,其实幂等并不是并发场景下的才有问题,幂等的核心是确保唯一性,重点是防止数据重复

    关于并发

    可以用幂等的手段来解决部分并发场景,也可以使用并发的手段来解决部分幂等,也可参阅之前文章

    回到主题,如何确保唯一性呢?

    唯一索引

    大概80%的人都会想到:在数据库中建立唯一索引,用作幂等记录,可以防止插入重复的数据。一般采用的手段都是:幂等函数中先执行一次查询操作,如存在幂等记录则返回第一次执行的结果,如不存在幂等记录则继续执行。

    好处:很简单就能满足分布式场景,并发场景下也可以保证只有一个线程插入成功。

    缺点:如果所以场景都先落数据到数据库并结合事务使用,成功后再向下执行,一方面存储了很多一次性的数据浪费空间,另一方面数据库性能可能会成为瓶颈。

    状态机约束

    在单据相关的业务,基本会涉及到状态机。通过约束状态机的跳转,就可以做到有限状态机的幂等。比如:订单状态的流转最好满足正向更新,即后一次更新一定大于等于前一次。

    CAS之version 字段

    该方案应用非常广泛,version 字段每次更新自动增长,作为乐观锁(compare and sweep)依据,理论上没有性能瓶颈,但局限性很大:仅适用于update。

    SETNX

    在分布式场景中,新增除了上面利用唯一索引外,还可以使用redis、memcache和zookeeper都可以实现唯一数据。以redis的SETNX:『SET if Not eXists』(如果不存在,则 SET) 。它的使用很特别巧妙,利用一个较短的时间窗口(key的有效期)便可保障一段时间内唯一(并发)。

    消息有序

    对于有些业务如果上面的手段不再适合时,消息端的有序变得尤为重要,应从集群消费端上加以控制(必定单机控制手段很多,比如:一致性 hash 负载均衡策略),可以修改负载均衡策略或mq拉取的规则(如订单号取模),保证同一笔订单的变更始终会被推送到集群中某一台机器上处理,再分配到其中一个内存队列中强制排队来确保他们的顺序性,这样就保证一个订单始终在一个内存队列中,并由一个线程去消费,是不是有点RocketMQ局部有序性的味道。优势很明显,放弃唯一索引和SETNX,高性能。但该方案并发完美,如果集群中某一台宕机会需考虑单机控制手段是否满足。

    很多时候我们要做到真正幂等,主要考虑分布式集群的环境、去重、并发等。

    展开全文
  • 幂等

    千次阅读 2019-04-06 17:18:31
    什么是幂等性 就是对资源的操作,无论操作一次还是多次,其资源本身不发生变化。 幂等性设计其实是分布式中十分重要的概念 比如表单重复提交是一个典型的需要进行幂等性设计的一个问题。 需要幂等的场景 ...
    • 什么是幂等性

    就是对资源的操作,无论操作一次还是多次,其资源本身不发生变化。

    • 幂等性设计其实是分布式中十分重要的概念

    比如表单重复提交是一个典型的需要进行幂等性设计的一个问题。

    • 需要幂等的场景
    1. 网络波动:
      因网络波动,可能会引起重复请求
    2. 分布式消息消费:
      任务发布后,使用分布式消息服务来进行消费。
    3. 用户重复操作:
      用户在使用产品时,可能会误操作而触发多笔交易,或者因为长时间没有响应,而有意触发多笔交易。
    4. 未关闭的重试机制:
      技术人员人为的错误,因开发人员、测试人员或运维人员没有检查出来,而开启的重试机制(如Nginx重试、RPC通信重试或业务层重试等)
    • 如何进行幂等设计

    对于get、detele、put请求,具有天然的幂等性,因此只需讨论post请求:
    1.设置全局ID
    根据业务的操作和内容生成一个全局ID。例如,在提交表单前,进入表单页面时,先向服务器端请求生成全局ID的接口,服务器将这个值存于内存中,待用户提交表单时,将这个全局ID附带上,服务器端校验是否存在这个值(一般用删除delete方法,通过返回值判断。采用select+delete容易出现并发问题),如果存在则运行请求接口。【方案可以,只是实现由点小麻烦】
    2. 添加去重表
    这种方法适合于业务中有唯一标识的插入场景中,如对某订单进行支付,订单号即可以作为唯一标识。通过创建一张去重表。这个表将支付的订单号设为唯一索引,第一次请求将支付订单记录插入表中并设置为未支付同时返回给支付系统完成实际支付操作,后续重复请求就会因为唯一索引导致插入失败而不会再走后续的实际支付操作。
    3.采用锁机制(如悲观锁和乐观锁)
    悲观锁,就是悲观的认为数据会被改变,在数据修改的过程中始终是加锁的。其他线程无论是读还是写都无法拿到数据。通过for update来进行锁表。
    乐观锁,相对悲观锁来讲更为广泛一些,因为乐观锁不依赖数据库,只会在update的一瞬间加锁,其余处理过程中并不加锁。通过版本号来实现。乐观锁每次只会有一个线程执行成功,其他线程因为条件发生了改变,而执行失败,这样就避免了数据覆盖的可能性。
    4. 分布式锁
    可以用redis或zookeeper实现分布式锁。

    • HTTP协议的安全性和幂等性

    1.安全性
    GET、HEAD和OPTIONS这三个HTTP方法旨在发送请求以或者所需的信息,是安全的方法。
    POST、PUT、PATCH和DELETE),它们旨在针对目标资源作添加、修改和删除操作,它们会导致服务端资源的变化,所以被认为是不安全的方法。
    2. 幂等性
    上述3种安全的HTTP方法(GET、HEAD和OPTIONS)均是幂等方法。由于DELETE现有的某个资源,所以它们是幂等方法。对于PUT请求,只有在对应资源不存在的情况下服务器才会进行添加操作,否则只作修改操作,所以它也是幂等方法。
    PATCH提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的资源。换句话说,PATCH请求是会执行某个程序的,如果重复提交,程序可能执行多次,对服务器上的资源就可能造成额外的影响,这就可以解释它为什么是非幂等的了。(修改次数)
    至于最后一种POST,由于它总是进行添加操作,如果服务器接收到两次相同的POST操作,将导致两个相同的资源被创建,所以这是一个非幂等的方法。

    • 带着幂等性的原则设计API

    1.查询类的
    查询不应该影响资源的变化,所以我们选择get类型的操作,而不选择非幂等性的post。
    2.更新类的
    如果是全部更新,更新多次资源还是不变,我们则使用put,如果更新资源部分数据发生变化(这个变化一般是由程序控制的,比如最后修改时间,最后修改次数等),这个是有建议使用patch。
    3.创建类的
    创建资源属于非幂等操作,建议采用post。
    4.删除类的
    毋庸置疑,delete。

    拓展资料

    [^1]使用mysql乐观锁解决并发问题
    [^2]使用mysql悲观锁解决并发问题
    [^3]分布式锁与幂等性问题

    展开全文
  • 幂等

    2015-07-21 19:17:58
     post是用来提交数据的。提交的数据放在HTTP请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要...post操作既不是安全的,也不是幂等的,比如常见的post重复加载问题:当
  • 数据幂等

    千次阅读 2018-06-14 21:41:21
    在系统设计的时候,操作幂等设计是一点需要考虑的点。 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的...
  • 幂等和非幂等的概念

    2019-11-19 09:08:30
    幂等: 对于同一种行为,如果执行不论多少次,最终的结果都是一致相同的,就称这种行为是幂等的。 (个人理解:不管是一次,还是多次操作,我们返回同样的结果,且不修改状态信息,接口可重复调用) 非幂等: 对于同一...
  • 在做流式计算过程中,最复杂最难做的莫过于数据幂等修改操作的设计。先解释一下概念【幂等性操作】,幂等性概念来源于数学专业表示对一个表达式做多次相同的操作,表达式不会改变。例如:逻辑回归中的Sigmod函数,...
  • 数据库的修改幂等(age++的情况展开讨论) 分布式系统的ID如何生成? 什么是幂等? 系统中的重复操作,不管执行多少次,都产生一样的效果,或返回一样的结果。 读和写请求都需要做幂等吗? 读请求不需要做...
  • 理解幂等

    2018-02-26 18:50:19
    幂等的含义一句话定义:一个操作如果任意多次执行所产生的结果与一次执行的结果相同,这个操作就是幂等的在数学里,幂等有两种主要的定义:1.在某二元运算下,幂等元素是指被自己重复运算的结果等于它自己的元素。例...
  • 幂等操作

    2018-09-06 12:35:00
    幂等操作: 就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副... Restful原则 get -> 查询操作 ...添加/修改操作 (非幂等操作) put -> 修改操作...
  • 接口幂等

    2019-01-26 09:36:03
    什么是幂等  数学角度  f(n) = 1^n 。无论n等于多少,f(n)永远值等于1  编程角度 程序无论执行多少次,其产生的结果均与一次执行相同,不会因为重复执行会对系统造成改变 为什么要做幂等  之所以强调幂等,...
  • 谈谈幂等机制

    2018-06-30 14:37:42
    一、什么是幂等性? 幂等性(Idempotence)。在HTTP/1.1规范中幂等性的定义是: Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N &...
  • 关于幂等

    2021-07-18 23:47:48
    1、什么是幂等性 2、 为什么需要幂等呢? 3、哪些场景需要保证幂等 4、幂等有什么缺点呢 5、如何保证幂等? 6、重复提交表单如何解决? 1、什么是幂等性 数学概念: 软件概念:服务执行一次和任意次的结果是一样的 ...
  • Java中的幂等

    千次阅读 2019-12-18 18:19:44
    深入理解Java中的幂等性什么是幂等幂等性的使用场景幂等和防重保证幂等性的情况设计幂等性服务保证幂等策略防重复提交策略乐观锁防重表分布式锁token令牌支付缓冲区幂等的不足 什么是幂等幂等性定义: 一次和...
  • 微服务:幂等机制和解决方案

    万次阅读 2019-08-23 14:10:13
    1.1 幂等性定义 数学定义 在数学里,幂等有两种主要的定义: 在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1,即s*s=s 某...
  • 一、什么是幂等幂等性是一个技术术语、类似鉴权、都有一堆的解决方案 二、什么情况需要幂等 业务开发中,经常会遇到重复提交的情况,无论是由于网络问题无法收到请求结果而重新发起请求,或是前端的操作抖动而...
  • 程序幂等性设计

    千次阅读 2019-05-06 17:55:31
    幂等的含义 一句话定义:一个操作如果任意多次执行所产生的结果与一次执行的结果相同,这个操作就是幂等的 在数学里,幂等有两种主要的定义: 1.在某二元运算下,幂等元素是指被自己重复运算的结果等于它自己的...
  • 转载自:https://www.cnblogs.com/geyifan/p/6128425.html内容目录:什么是幂等性什么情况下需要幂等幂等VS防重什么情况下需要保证幂等性为什么要设计幂等性的服务幂等的不足保证幂等策略防重复提交策略参考幂等概念...
  • 幂等性实现方案01

    万次阅读 2020-08-15 19:22:13
    幂等性实现方案 一、什么是幂等性 所谓幂等性,简单地说,就是对接口的多次调用所产生的结果和调用一次是一致的。扩展一下,这里的接口,可以理解为对外发布的HTTP接口或者Thrift接口,也可以是接收消息的内部接口,...
  • 幂等 (idempotence) 的概念

    万次阅读 2020-08-16 02:33:11
    幂等 (idempotence) 的概念 幂等的数学概念 幂等是源于一种数学概念。其主要有两个定义 如果在一元运算中,x 为某集合中的任意数,如果满足 f(x) = f(f(x)) ,那么该 f 运算具有幂等性,比如绝对值运算 abs(a) = abs...
  • 幂等和非幂等的关系与区别

    千次阅读 2018-07-04 22:59:28
    此时,我们服务端对方法的处理是,当调用一次方法,更新部分字段,将这条ticket记录的操作记录加一,这次,每次调用的资源是不是变了呢,所以它是有可能是非幂等的操作。 HTTP DELETE方法 HTTP DELETE方法用于删除...
  • 幂等策略分析

    2016-12-03 12:43:17
    幂等概念来自数学,表示N次变换和1次变换的结果是相同的。这里讨论在某些场景下,客户端在调用服务没有达到预期结果时,会进行多次调用,为避免多次重复的调用对服务资源产生副作用,服务提供者会承诺满足幂等
  • 幂等性问题

    千次阅读 2018-06-08 10:23:48
    所谓幂等,简单地说,就是对接口的多次调用所产生的结果和调用一次是一致的。扩展一下,这里的接口,可以理解为对外发布的HTTP接口或者Thrift接口,也可以是接收消息的内部接口,甚至是一个内部方法或操作。数学上的...
  • 分布式系统接口幂等

    千次阅读 2018-08-17 10:56:58
    1.幂等性定义 1.1 数学定义 1.2 HTTP规范的定义 2. 何种接口提供幂等性 2.1 HTTP支持幂等性的接口 2.2 实际业务 3.分布式系统接口幂等性 References 1.幂等性定义 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,858
精华内容 33,543
关键字:

修改幂等