spring cloud
分布式服务的接口幂等性如何设计?
幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 ❒ 需要幂等场景 ✔ 用户重复点击(网络波动) ✔ MQ消息重复 ✔ 应用使用失败或超时重试机制 ❒ 基于RESTfuIAPI的角度对部分常见类型请求的幂等性特点进行分析 ✔ GET 查询操作,天然幂等 ✔ POST 新增操作,请求一次与请求多次造成的结果不同,不是幂等的 ✔ PUT 更新操作,如果是以绝对值更新,则是幂等的。如果是通过增量的方式更新,则不是幂等的 ✔ DELETE 删除操作,根据唯一值删除,是幂等的 ❒ 数据库唯一索引(新增) ❒ token + redis (新增、修改) 1. 加载提交页面时返回token 2. 提交请求时带上token,与后端对比,成功后删除token 3. 再次请求时token不存在,拦截请求 ❒ 分布式锁 (新增、修改) 1.先抢到锁的执行,执行完毕后释放锁。 2.后抢到锁的请求拦截
❒ 幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致 ✔ 如果是新增数据,可以使用数据库的唯一索引 ✔ 如果是新增或修改数据 ▣ 分布式锁,性能较低 ✔ 使用token + redis来实现,性能较好 ✔ 第一次请求,生成一个唯-token存入redis,返回给前端 ✔ 第二次请求,业务处理,携带之前的token,到redis进行验证, ✔ 如果存在,可以执行业务,删除token;如果不存在,则直接返回,不处理业务