当前位置: 首页 > news >正文

贵州建设厅报名登录网站建设银行网上营业厅官方网站下载

贵州建设厅报名登录网站,建设银行网上营业厅官方网站下载,申请做网站 论坛版主,网站风格介绍本文已经收录到Github仓库#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点#xff0c;欢迎star~ Github地址 大家好#xff0c;我是大彬~ 今…本文已经收录到Github仓库该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点欢迎star~ Github地址 大家好我是大彬~ 今天来聊聊接口幂等性。 什么是接口幂等性如何保证接口幂等性 什么是接口幂等性 首先看看幂等性的概念 幂等性原本是数学上的概念用在接口上就可以理解为同一个接口多次发出同一个请求必须保证操作只执行一次。调用接口发生异常并且重复尝试时总是会造成系统所无法承受的损失所以必须阻止这种现象的发生。 比如下面这些情况如果没有实现接口幂等性会有很严重的后果支付接口重复支付会导致多次扣钱 订单接口同一个订单可能会多次创建。 为什么会产生接口幂等性问题 那么什么情况下会产生接口幂等性的问题呢 网络波动, 可能会引起重复请求用户重复操作,用户在操作时候可能会无意触发多次下单交易,甚至没有响应而有意触发多次交易应用使用了失效或超时重试机制(Nginx重试、RPC重试或业务层重试等)页面重复刷新使用浏览器后退按钮重复之前的操作,导致重复提交表单使用浏览器历史记录重复提交表单浏览器重复的HTTP请求定时任务重复执行用户双击提交按钮 面试网站 如何保证接口幂等性 那么最关键的来了如何保证接口幂等性 解决办法分为两个方向一个方向是客户端防止重复调用一个是服务端进行校验。当然客户端防止重复提交并不是绝对可靠的优点是实现起来比较简单。 按钮只可操作一次 一般是提交后把按钮置灰或loding状态,消除用户因为重复点击而产生的重复记录,比如添加操作,由于点击两次而产生两条记录。 token机制 功能上允许重复提交,但要保证重复提交不产生副作用,比如点击n次只产生一条记录,具体实现就是进入页面时申请一个token,然后后面所有的请求都带上这个token,后端根据token来避免重复请求。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4egwIRj-1679818606246)(http://img.topjavaer.cn/img/接口幂等.png)] 使用唯一索引防止新增脏数据 利用数据库唯一索引机制,当数据重复时,插入数据库会抛出异常,保证不会出现脏数据。 乐观锁 如果更新已有数据,可以进行加锁更新,也可以设计表结构时使用乐观锁,通过version来做乐观锁,这样既能保证执行效率,又能保证幂等, 乐观锁的version版本在更新业务数据要自增。 update table set version version 1 where id #{id} and version #{version}示例: 当有重复请求的时候,第一个请求会获取当前商品的version版本号,得到的version为1,紧接着由于第一个请求还没更新商品的version,第二个请求获取的version依然也是1, 这时候第一个请求操作更新的时候带上version并作为条件并且自增更新,这时候商品的version就会变成2,当第二个请求去操作更新的时候明显version不一致导致更新失败。 select insert or update or delete 该方案就是操作之前先查询一下,符合要求再插入,该方案在没有并发的系统中可以解决幂等问题在单JVM有并发的时候可以用JVM加锁来保证幂等性,在分布式环境它是无法保证幂等性,可以使用分布式来保证。 分布式锁 如果是分布式系统构建全局唯一索引比较困难例如唯一性的字段没法确定这时候可以引入分布式锁通过第三方的系统(redis或zookeeper)在业务系统插入数据或者更新数据获取分布式锁然后做操作之后释放锁。要点某个长流程处理过程要求不能并发执行可以在流程执行之前根据某个标志(用户ID后缀等)获取分布式锁其他流程执行时获取锁就会失败也就是同一时间该流程只能有一个能执行成功执行完成后释放分布式锁(分布式锁要第三方系统提供)。 状态机幂等 在设计单据相关的业务或者是任务相关的业务肯定会涉及到状态机(状态变更图)就是业务单据上面有个状态状态在不同的情况下会发生变更一般情况下存在有限状态机这时候如果状态机已经处于下一个状态这时候来了一个上一个状态的变更理论上是不能够变更的这样的话保证了有限状态机的幂等。注意订单等单据类业务存在很长的状态流转一定要深刻理解状态机对业务系统设计能力提高有很大帮助 。 防重表 以支付为例: 使用唯一主键去做防重表的唯一索引,比如使用订单号作为防重表的唯一索引,每一次请求都根据订单号向防重表中插入一条数据,插入成功说明可以处理后面的业务,当处理完业务逻辑之后删除防重表中的订单号数据,后续如果有重复请求,则会因为防重表唯一索引原因导致插入失败,直接返回操作失败,直到第一次请求返回结果,可以看出防重表作用就是加锁的功能。 注: 最好结合状态机幂等先判断一下 缓冲队列 将请求都快速地接收下来后放入缓冲队列中,后续使用异步任务处理队列中的数据,过滤掉重复的请求,该解决方案优点是同步处理改成异步处理、高吞吐量,缺点则是不能及时地返回请求结果,需要后续轮询得处理结果。 最后给大家分享一个Github仓库上面有大彬整理的300多本经典的计算机书籍PDF包括C语言、C、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等可以star一下下次找书直接在上面搜索仓库持续更新中~ Github地址
http://www.dnsts.com.cn/news/178326.html

相关文章:

  • 苏州电子商务网站开发公司义乌商城网站开发
  • 鲜花网站建设项目策 划书黄冈网站建设效果
  • 白山市住房和建设局网站南宁网站建设兼职
  • 连州市网站建设wordpress清理软件
  • 做3d图的网站有哪些软件东莞市建设局网站首页
  • 深圳美容网站建网站和域名都注册怎么连接成网址
  • 12306网站谁建设的企业制作小程序
  • thinkphp 微网站开发如何选择wordpress主机
  • 做网站用那一种语言最好百度地图排名怎么优化
  • 内部网站建设appwordpress采集规则
  • 专业模板网站设计公司百度seo优化排名
  • 濮阳网站建设哪里便宜中国建设银行联行号查询网站
  • 设计素材网站飘集团网站建设方案书
  • 怎么用电脑windows做网站互联网技术的作用
  • 城市门户网站建设wordpress好用主题
  • 上海网站建设的价北京网站建设 seo公司哪家好
  • 绍兴做网站比较专业的公司一般通过会社员
  • 怎样开发设计网站建设百度如何添加店铺位置信息
  • 网站翻页动画效果不属于c2c网站的是
  • 如何做一款服装网站深圳专业高端网站建设费用
  • 颇有名气的网站建设专家淮南哪里做网站
  • 网站建设用到的工具青岛网站seo优化
  • 网站视觉规范万能建站网站
  • 校园学生网站开发怎么样建网站啊
  • 企业网站设计服务营销策划的流程
  • 网站建设所有权网页微信版官网登录不扫码
  • ftp 上传网站怎样在设计网站做图赚钱吗
  • 网站服务器速度对seo有什么影响?威县网站建设报价
  • 淘宝客做网站怎么赚钱网站建设 公司
  • 淄博中企动力关键字优化价格