服务高可用:幂等性设计

简介: 什么是幂等性?一般在服务调用时,读服务如果调用失败了,会自动按配置次数转移到别的服务上去请求。而写服务就不能重复请求,如果因为超时或者网络故障等原因被调用服务并没有返回成功的响应,服务调用方就认为是失败了,但很有可能的是已经成功了,如果继续重复请求写服务,如转账类的服务,可能会造成严重的后果。所以,写服务失败不能设计成继续发重复请求,被调用服务也要设计幂等性,即使重复请求,也不会造成影响。

什么是幂等性?

一般在服务调用时,读服务如果调用失败了,会自动按配置次数转移到别的服务上去请求。而写服务就不能重复请求,如果因为超时或者网络故障等原因被调用服务并没有返回成功的响应,服务调用方就认为是失败了,但很有可能的是已经成功了,如果继续重复请求写服务,如转账类的服务,可能会造成严重的后果。所以,写服务失败不能设计成继续发重复请求,被调用服务也要设计幂等性,即使重复请求,也不会造成影响。


知道上面的背景,所以,幂等性就是同样的参数,重复请求相同的服务,必须得到相同的结果。


幂等性设计

举一个支付的场景,请求一个第三方支付接口发起支付功能,同样的订单号,同样的金额信息,返回的都是成功。同样的订单号,不同的金额信息,返回的是订单号重复。这就是幂等性设计,第三方支付效验了请求参数和已有数据库的信息一致时直接返回已有的成功数据,如果数据不一致而又订单号重复直接报订单号重复。而如果不做幂等性设计,同样的订单号,同样的金额信息,重复支付,可能会造成金额累加。为了服务友好性,同样的订单号同样的金额信息返回订单号重复也是不友好的。


有些服务天生就具有幂等性,如修改用户邮箱、性别等,不管你重复请求修改多少次,返回的结果都是一样的。


所以,对于服务幂等性设计的要点就是一定要效验请求参数有效性,及已有数据的对比。如果同样的请求参数已经处理过就不要重复处理,直接返回,这就是幂等性核心点。


相关文章
|
2天前
|
NoSQL Java API
分布式系统---幂等性设计
分布式系统---幂等性设计
41 1
|
2天前
|
SQL 存储 NoSQL
系统设计——幂等性与解决方案
系统设计——幂等性与解决方案
89 0
系统设计——幂等性与解决方案
|
7月前
|
消息中间件 Java 关系型数据库
分布式系统第五讲:分布式事务及实现方案
分布式系统第五讲:分布式事务及实现方案
|
9月前
|
NoSQL 前端开发 Java
高并发下接口幂等性解决方案
高并发下接口幂等性解决方案
|
9月前
|
存储 消息中间件 SQL
浅谈高并发和分布式系统的幂等如何处理
幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
|
SQL 消息中间件 NoSQL
一文搞定接口幂等性架构设计方案
现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计。那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用。那么既然产生了服务调用,就必然会存在服务调用延迟或失败的问题。当出现这种问题,服务端会进行重试等操作或客户端有可能会进行多次点击提交。如果这样请求多次的话,那最终处理的数据结果就一定要保证统一,如支付场景。此时就需要通过保证业务幂等性方案来完成。
148 0
|
NoSQL JavaScript 小程序
高并发下如何保证接口的幂等性?
高并发下如何保证接口的幂等性?
|
SQL 安全 关系型数据库
FAQ系列 | 如何保证主从复制数据一致性
FAQ系列 | 如何保证主从复制数据一致性
106 0
|
消息中间件 缓存 NoSQL
详细讲解服务幂等性设计
在日常工作中的一些技术设计方案评审会上,经常会有提到注意服务接口的幂等性问题,最近就有个同学就跑到跟前问我,幂等性到底是个啥?
详细讲解服务幂等性设计
|
NoSQL 前端开发 Java
高并发下接口幂等性技术方案
高并发下接口幂等性技术方案
228 0
高并发下接口幂等性技术方案