分布式 幂等性/服务降级
一、幂等性
1. 定义:用户对同一操作发起的一次或多次接口请求的结果是相同的,不会因多次单击而产生副作用;
注意:对于编程来说就是CRUD,而查询和删除是天然具有幂等性的,剩下就是需要考虑增加和删除,特别是增加。
2. 导致多次请求的场景
A. 前端重复提交;
B. 接口超时重试;
C. 消息重复消费。
3. 实现方式
虽然前端可以拦截一部分,如防止表单重复提交、按钮置灰等,但是不够安全,因为懂技术的可以通过工具进行请求模拟,所以还是需要从后端接口控制;
A. 数据库唯一性索引;
B. 先查询后判断;
C. token机制防重复提交;
D. 乐观锁/悲观锁等。
设计核心:校验请求参数的有效性,及与已有数据对比,如果同样的请求参数已经处理过就不要重复处理,直接返回。
4. 应用场景
A. 创建支付订单接口:同样的订单号,同样的金额信息,重复支付,可能会因为服务超时或网络故障等原因无法无法及时响应而造成金额累加;
B. 发送短信接口:因为短信接口收费,重复提交会导致多条短信产生。
可参考:分布式系统中实现幂等性的几种方式
二、服务降级
1. 定义:尽可能的把系统资源让给优先级高的服务使用;
2. 措施
A. 拒绝服务:高峰期时拒绝优先级低的应用的服务请求,保证核心应用正常工作,也可以随机拒绝请求,直接返回服务器繁忙;
B. 关闭服务:临时关闭一些冷门的或者边缘不重要的服务,给核心服务让出资源;
3. 作用:因为资源有限,请求无限,在高峰期时降级处理,可以避免整体服务的性能变差,还可以避免因为宕机导致服务不可用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2019-09-03 JavaScript DOM对象的事件