icql

架构基础_高可用架构模式_幂等

旧文档,TODO重新总结

幂等性

一段逻辑被执行一次和多次产生的对业务数据产生的影响是相同的,表示具有幂等性。如果返回值也是相同的则代表有可重入性

HTTP的幂等性

常见HTTP请求动词的:

GET,幂等 POST,非幂等 PUT,幂等 DELETE,幂等



DB数据库的幂等性

select,幂等 insert,非幂等 update,幂等 delete,幂等



应用的幂等性

网络抖动、失败重试、用户重复操作等都会造成幂等性问题

1)页面操作幂等(不可靠)

(1)按钮只可操作一次

点击按钮后,按钮置灰,等待请求结果返回再恢复

(2)token机制

进入页面后向后台申请一个token,每个表单提交时都携带token

(3)post/redirect/get模式

提交表单后跳转到新的页面

2)接口幂等

分为两种,可重入、对系统影响幂等

(1)使用唯一索引

对于需要有幂等性要求的数据表,增加唯一索引

(2)token + redis

A向B调用申请token B生成token,放入redis,返回token A调用B携带token执行业务操作 B在redis中删除token 返回1删除成功,代表token存在,表示第一次操作 返回0删除失败,代表token不存在,表示重复操作 再执行业务操作

(3)状态机幂等

根据订单的状态进行保证,实际上是利用单向改变的特性 最后更新db时,利用 where 订单id + 状态 来保证

(4)乐观锁

更新单个表时,可以从接口的入口处同时携带version字段 进行乐观锁更新

(5)防重表

业务操作前先往防重表(有唯一索引)加入数据