服务高可用:幂等性设计

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

什么是幂等性?

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


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


幂等性设计

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


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


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


相关文章
|
安全 前端开发 Java
Springboot中如何优雅的进行字段以及业务校验
Springboot中如何优雅的进行字段以及业务校验
566 0
|
前端开发 数据库 微服务
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
2463 0
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
|
传感器 机器学习/深度学习 人工智能
仿生机器人:自然界灵感的工程应用
【10月更文挑战第14天】仿生机器人作为自然界灵感与工程技术的完美结合,正逐步改变着我们的生活和工作方式。通过深入了解其设计原理、关键技术、应用领域以及未来的发展趋势,我们可以更加清晰地看到仿生机器人在推动科技创新和社会发展中的重要作用。让我们共同期待仿生机器人在未来带来的更多惊喜和变革!
|
SQL JavaScript 小程序
来了,MyBatisPlus的join联表查询!
来了,MyBatisPlus的join联表查询!
来了,MyBatisPlus的join联表查询!
|
安全 算法 测试技术
Python后端技术栈(一)
Python后端技术栈(一)
|
网络协议 Linux 数据安全/隐私保护
Linux Iptables 的基本原理
【2月更文挑战第29天】iptables有5种链(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTE),对应不同数据包处理阶段。
|
存储 JSON 前端开发
Spring 参数校验最佳实践及原理解析
背景 在参数校验框架出现前,业务逻辑代码中经常会充斥着参数校验的代码,将参数校验视为业务逻辑的一部分不失为是一种较为灵活的做法,然而对于一些通用的校验,如字符串不能为空、数值范围限制等,如果还放在业务逻辑中,则会导致业务代码出现大量的重复,为了避免这种问题,Java 社区提出了 JSR-303 规范,用于对 bean 进行校验。
876 0
Spring 参数校验最佳实践及原理解析
|
SQL 关系型数据库 MySQL
Mysql主从同步及主从同步延迟解决方案
Mysql主从同步及主从同步延迟解决方案
752 0
Mysql主从同步及主从同步延迟解决方案
|
Java 测试技术 容器
JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象
JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象 问题 在Java中,一般使用JUnit作为单元测试框架,测试的对象一般是Service和DAO,也可能是RemoteService和Controller。
2734 0