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

网站流量统计表建筑人才网官网网址

网站流量统计表,建筑人才网官网网址,平度网站建设公司电话,做网站需要什么技能本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 大家好,我是大彬~ 今…

本文已经收录到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.yayakq.cn/news/142128/

相关文章:

  • 如何制作一个论坛网站北京十大网站建设公司
  • 网站主体负责人短视频app软件下载大全
  • 东莞网站建设企慕cms进行网站开发
  • 上海全国网站建设邢台手机网站建设
  • 广州企业网站推广爱站网 关键词挖掘工具
  • aspcms中英文双语网站360建筑网如何修改名字
  • 全网营销建设网站高端网站定制建设公司哪家好
  • 南宁优化网站网络服务网站组建 需求分析
  • 六盘水建设网站福州seo网站建设
  • 网站上线后的工作wordpress 国际化
  • 北京网站建设哪家好新闻资讯平台有哪些
  • 中国交通建设集团英语网站seo外包公司多少钱
  • dedecms 网站地图模板详情页设计软件
  • 好的网站你们会感谢我的网站模板 修改
  • 不同代码做的网站后期维护情况html5网站开发视频教程
  • jsp网站建设课程设计网站下雪特效
  • 网站维护教程温州建设网站哪家好
  • 怎么做网站导航地图网站分为
  • 做一个网站建设的流程做的网站客户拿去维违法
  • wordpress投稿插件网站建立好了自己怎么做优化
  • 昆明出入最新规定网站建设优化合同
  • 曲靖网站设计贵港网站设计
  • 手机网站源码asp营销策划方案的目的
  • 做网站需要做哪些东西vps搭建wordpress mu
  • 山西长治做网站公司做微课的网站有哪些
  • 网站专题设计模板网站策划书主题
  • wordpress超级密码seo网站优化网站编辑招聘
  • 新乡做网站哪家好wordpress去掉index
  • 织梦网站怎么做二级域名wordpress 文艺主题
  • 网站开发课程学习报告软件开发工具的范围是什么