幂等设计

1.请求的幂等(请求重试)

定义:一个请求执行一次,读请求不需要做幂等,写请求需要,因为写请求可能对数据发生改变,原则:谁对数据发生改变就需要做幂等。

如:一个写请求网关层发到业务逻辑层1上进行写数据,但由于写操作比较慢,返回网关状态是写超时,但实际上是写入成功的。由于网关得到的是写超时,会将该写请求重先转发给业务逻辑层2上进行再次写操作,这时就会发生重复写,会造成数据的错乱,所以这种场景就需要写请求的幂等。

1.1.请求幂等范围

从读写请求层面:只有写请求会对数据改变。

从架构层面看,哪些层(App ->Nginx->网关层->业务逻辑层->数据访问层->db/Cache),主要看哪些层对数据造成改变,可以看出主要是在数据访问层会对数据进行改变。

1.2.数据访问层:主要就是CRUD

1.2.1. create/insert

尽量不使用自增主键,自增主键会造成二次查找(index找到自增主键,自增主键再查找数据),自增主键不好做幂等。(一般禁止使用自增主键,都使用业务主键,业务主键在插入时就会自动幂等)

1.2.2.update:

   update user set age=18 where uid=58 // 绝对值是幂等

   update user set age++ where uid =58  // 相对值是不幂等的

1.2.3. Delete

   Delete from user where uid = 58 // 幂等

  Delete user where unid in bottom 10; // 不幂等

最终是分布式事务解决

2.业务层的幂等

场景:1)、同一用户不重复下单(对同一类商品进行一次下单)

           2)、端口不超卖(不超过库存) 如:发送方发了多次请求到MQ

           3)、MQ消费端去重

2.1.冗余部署多个进程

         存在并发消费的可能 性,并发转变成串行消费

本质:分布式锁问题 如对发送到mq中的订单消息,可以根据订单号进行分布式锁控制幂等

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值