高并发下接口幂等设计中业务唯一键、去重表和状态机分别解决哪些问题
进阶版来源:alibaba中级工程师业务幂等保护消息幂等设计
草稿
答案解析
在高并发接口幂等设计里,业务唯一键、去重表和状态机解决的问题侧重点不一样。
业务唯一键主要解决“同一笔业务如何识别”的问题。
比如支付场景里的 orderNo,退款场景里的 refundNo,转账场景里的 requestNo,这些都可以作为业务唯一键。它的作用是把多次请求映射到同一个业务动作上,避免因为网络重试、用户重复点击、MQ 重复投递导致生成多笔业务数据。
一般会在数据库层加唯一索引,比如:
这样即使并发请求同时进来,也只有一个请求能插入成功,其他请求会因为唯一键冲突失败,然后查询已有结果返回即可。它依赖数据库唯一约束,是比较强的兜底手段。
去重表主要解决“请求级别的重复提交和并发抢占”的问题。
有些场景业务表本身不好直接加唯一约束,或者一个接口涉及多张表、多步操作,这时可以单独设计一张去重表,例如:
请求进来后先尝试插入去重表,插入成功说明这
登录后查看完整内容
