网站大量收购闲置独家精品文档,联系QQ:2885784924

高并发下的接口幂等性解决方案.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果 或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统 bug 重发,也应该只扣一次钱; 3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等( idempotent 、idempotence )是一个数学与计算机学概念,常见 于抽象代数中。 在编程中 . 一个幂等操作的特点是其任意多次执行所产生的影响均与一 次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执 行,并能获得相同结果的函数。 这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 例如,“ getUsername() 和 setTrue() ”函数就是一个幂等函数 . 更复杂的操作幂等保证是利用唯一交易号 ( 流水号 ) 实现 . 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的 结果都是一样的 三、技术方案 1. 查询操作 查询一次和查询多次,在数据不变的情况下,查询结果是一 样的。 select 是天然的幂等操作 2. 删除操作 删除操作也是幂等的,删除一次和多次删除都是把数据删除。 ( 注意可能返回结果不一样,删除的数据不存在,返回 0,删除的数据多条, 返回结果多个 ) 3. 唯一索引,防止新增脏数据 比如:支付宝的资金账户,支付宝也有用户 账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个, 那么给资金账户表中的用户 ID 加唯一索引,所以一个用户新增成功一个资 金账户记录 要点: 唯一索引或唯一组合索引来防止新增数据存在脏数据 (当表 存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存 在了,返回结果即可) 4. token 机制,防止页面重复提交 业务要求: 页面的数据只能被点击提交一次。发生原因:由于重复点击或者网络重 发,或者 nginx 重发等情况会导致数据被重复提交 解决办法:集群环境:采用 token 加 redis (redis 单线程的,处理需 要排队) 单 JVM环境:采用 token 加 redis 或 token 加 jvm 内存 处理流程: 1. 数据提交前要向服务的申请 token ,token 放到 redis 或 jvm 内存, token 有效时间 2. 提交后后台校验 token ,同时删除 token ,生成新的 token 返回 token 特点:要申请,一次有效性,可以限流 注意: redis 要用删除操作来判断 token ,删除成功代表 token 校验通 过,如果用 select+delete 来校验 token ,存在并发问题,不建议使用 5. 悲观锁 获取数据的时候加锁获取 select * from table_xxx where id=xxx for update; 注意: id 字段一定是主键或者唯一索引,不然是锁表,会死人的 悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际 情况选用。 6. 乐观锁 乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相 对于悲观锁,效率更高。 乐观锁的实现方式多

文档评论(0)

虾虾教育 + 关注
官方认证
内容提供者

有问题请私信!谢谢啦 资料均为网络收集与整理,收费仅为整理费用,如有侵权,请私信,立马删除

版权声明书
用户编号:8012026075000021
认证主体重庆皮皮猪科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
91500113MA61PRPQ02

1亿VIP精品文档

相关文档