系统幂等性设计与实践

系统幂等性设计与实践

一、幂等性的定义
就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了错误。
二、确定需要幂等性的范围
2.1. 确定大范围
1.请求层面:读请求、写请求
其中读请求没有影响数据变化不需要做幂等性
2.微服务层面:负载均衡、api网关、业务逻辑层、数据访问层
其中负载均衡、api网关、业务逻辑层没有影响数据变化不需要做幂等性
2.2. 数据访问层-写请求
1.Insert
需要做幂等性
2.Update
直接更新某个值的:不需要做幂等性
累加操作等计算式的更新:需要做幂等性
3.Delete
重复删除结果是一样:不需要做幂等性
三、幂等性解决方案
没有最优的方案只有最适合的
3.1. Insert幂等方案
1.数据字段增加唯一索引
优点:实现简单方便
缺点:影响数据库性能不适合该字段会被频繁更新的场景,唯一索引比普通索引在写操作上开销会大很多
2.insert时使用临时表查询判断
优点:不需要创建唯一索引,语法相对通用(mysql和oracle)
缺点:写操作会增加一次select子查询开销,增加sql语法的复杂度可读性较差

3.2. Update计算操作幂等方案
这个需要结合具体业务来设计方案,常用的场景可通过版本号的方式来控制
在表里面添加version字段
然后更新的时候通过这个version来判断是否为过期无效操作,这是乐观锁的一种思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值