范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

接口的幂等性的多重考虑,你会了吗?

  前言
  今天的主题: 接口幂等性的解决方案 。本来是想把对象的存储过程和内存布局肝出来的,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说的好,好事多磨,对吧。
  在实际项目开发中接口是我们在开发中经常接触到的,而且是经常经常要写,每一个项目可能都会伴随着大量的接口开发,在涂鸦的这几个月,基本上就是在与接口作斗争了,新需求除了业务相关就是设计表和接口编写了。
  当然,在接口设计中我们要考虑很多问题,安全性,格式,设计等等,今天我们先来聊聊,在高并发环境下,接口幂等性的解决方案有哪些。 正文
  1 接口幂等性
  就是说在多次相同的操作下保证最终的结果是一致的。
  其实这个概念还是比较简单的,很容易理解,那我们思考一个问题, 如果不保证接口幂等性会有什么问题 ? 1.1 案例
  我们简单的举个例子,现在有一个接口,提供了转账的功能, a要给b转账1000元 ,正常情况下我们接口一次性就调用成功了,但是却因为网络抖动等其它原因没有成功,于是就开始不停的重试,突然网络好了,但是这时却连续发出去了三个请求,但是这个接口 没有保证幂等性,于是从结果上来看就是a给b转了3000元 ,这显然是程序业务逻辑上不能接受的。 2 解决方案2.1 token机制
  token机制其实是比较简单的,我们先来简单的说一下流程。 首先客户端先请求服务端,服务端生成token, 每次请求生成的都是一个新的token (这个token一定要设置超时时间),将token存入redis当中 ,然后将token返回给客户端。客户端携带刚刚返回的token请求服务端做业务请求 。服务端收到请求,做判断。 如果token在redis中 ,则直接删除该token,然后继续做业务请求。如果token不在redis中 ,代表已经执行过当前业务了,则不执行业务。
  图示如下:
  token机制实现方式还是比较简单的,但是其实对于我们某些响应速度要求很高的业务不太友好, 缺点就是需要多一次请求获取token的过程 。
  正常来说是每次请都会生成一个新的token,如果有极限情况下,有两个请求都带着相同的token进来,会存在都走入判断是否存在的过程, 可能都会同时查到存在 ,这样也会有问题,针对这种情况, 我们可以在删除前判断下是否存在,存在就删除,为了保证原子性,这部分逻辑建议使用lua脚本完成 。 2.2 去重表
  去重表的机制是根据mysql唯一索引的特性来的,我们先来说下它的流程: 首先客户端先请求服务端, 服务端先将这次的请求信息存入一张mysql的去重表中 ,这张表要根据这次请求的其中某个特殊字段建立唯一索引,或者主键索引 。判断是否插入成功 如果插入 成功 ,则继续做后续业务请求。如果插入 失败 ,则代表已经执行过当前请求。
  图示如下:
  去重表机制的问题有两点: 1 .mysql容错性,也就是mysql本身如果不是高可用的那么业务可能会受到影响:2 .既然是唯一索引,自然在写表的时候就没有办法用到changbuffer,每次都要从磁盘查出来判断再写入,对于一个高并发的接口来说,这些都是需要考虑的因素。2.3 redis 的 SETNX键值
  过程如下: 首先客户端先请求服务端, 服务端将能代表这次请求业务的唯一字段以 SETNX 的方式存入redis ,并设置超时时间,超时时间可以根据业务权衡。判断是否插入成功 如果插入 成功 ,则继续做后续业务请求。如果插入 失败 ,则代表已经执行过当前请求。
  这里我们是利用了redis setnx 的特性来完成的。
  setnx:只在键key不存在的情况下,将键key的值设置为value。若键key已经存在,则SETNX命令不做任何动作。 命令在设置成功时返回1,设置失败时返回0 。
  图示如下:
  这种方案可以说是针对上一个方案改进的,效率也会提高很多。 2.4 状态机幂
  这种机制适用于有不同状态的业务,我的上一家公司就是这样做的。
  我们的订单系统,一条订单会有多个状态,如:待付款,锁定,已付款等状态,而这些状态都是有流程和逻辑的,我们可以根据这个状态判断是否执行后续业务操作。 2.5 乐观锁(更新操作)
  就是数据库中增加版本号字段,每次更新根据版本号来判断
  过程如下: 首先客户端先请求服务端,先查询出当前的version版本。 select version from .. where .. 根据version版本来做sql操作 UPDATE .. SET ... version=(version+1) WHERE .. AND version=version;
  这个图示我就不再画了,还是比较简单的 2.6 悲观锁(更新操作)
  假设每一次拿数据,都有认为会被修改,所以给数据库的行上锁,也是基于数据库特性来完成。
  当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。 START TRANSACTION; # 开启事务 SELETE * FROM TABLE WHERE .. FOR UPDATE; UPDATE TABLE SET ... WHERE ..; COMMIT; # 提交事务 结语
  关于接口幂等性这部分内容,解决方案其实大同小异,很多方式的原理都是一样的,更多的其实都是在业务链路中去过滤,也会有很多是有消息中间件去解决的,默认在中间件这一层就直接过滤掉了,当然每种方式都有各自的优点和缺点,需要结合当前的业务去选择,今天的文章内容,你get到了吗?

惊喜!微软深夜更新SurfaceBook3SurfaceGo2以及Earbuds上架5月6日,微软在其官网更新了四款全新产品,SurfaceBook3Surfacego2以及SurfaceEarbudsSurfaceheadphones2。单从外观来看,其产品变化iPad9即将到来,配置曝光,发布时间暂定随着iPhone12系列的发布,苹果的新机已经告一段落,但是我们都知道苹果也有在春季发布新产品的传统。最近,有更多关于苹果平板电脑的新闻。iPad9似乎即将到来。目前,新机的配置和自6月以来,以太坊Gas费用上涨了2,300根据加密指标网站BitInfoCharts的数据,以太坊的平均交易费用飙升至51。45美元,数据显示自6月下旬以来增长了2,293。自8月伦敦硬分叉以来,以太坊上的交易价格一直在摇Coinbase确认将推出零费用订阅服务美国最大的加密货币交易所Coinbase正在测试一项新的订阅服务,该公司今天向Decrypt证实。该消息在今天早上泄露,因为一些Coinbase用户昨晚过早地获得了该服务的测试版,扬帆破浪正当时,微博携手商业合作伙伴立势谋新7月27日,2021微博商业合作伙伴年中总结会在北戴河阿那亚圆满落幕。本次会议以创新理念升级服务质领未来为主题,微博营销专家与众多代理及服务商齐聚一堂分享对营销的独特见解,共同探讨PaxfulCEO否认了比特币交易所数据泄露的传闻在被盗数据的在线市场RaidForums上,一名卖家一直在兜售一个所谓的数据库,其中包含约480万Paxful客户和点对点比特币交易所工作人员的个人信息。这位以mafufi为名的卖TCL第一季度业绩报告出炉冰箱洗衣机出货量翻倍近日,以家电业务为主体的TCL实业,在2021年一季度交出了一份不错的成绩单。一季度TCL实业营业收入达到243亿元,同比增长接近60,净利润接近7亿元,同比大幅增长54倍。由于T美国政府抛售的这几十亿比特币可能只是杯水车薪比特币(BTC)价格最近就像一列失控的火车,似乎没有什么可以阻挡它。一些人认为,即使最大的BTC鲸鱼之一的美国政府决定出售其现在价值数十亿美元的藏品,也不会对市场产生实质性影响,因雷军秀小米6双摄拍照看这是什么鸟?小米6身上黑科技满满,不过在小米和雷军看来,最大亮点应该还是支持2倍光学变焦的双摄像头,特别加入的人像模式,也可以拍出更好的背景虚化效果。正在美国波士顿出差的雷军也时刻不忘为自家产一张图看懂摩拜新单车风轻扬省力304月22日,摩拜单车在一周年发布会上,推出了新款智能单车,内部的代号为风轻扬。摩拜单车创始人总裁胡玮炜介绍说,新款智能单车,其主要变化为,包括车架车圈车轮在内,整体轻量化使用汽车级好用,小个头大本事!Mac下轻量级清理软件。Mac系统下的应用删除软件其实非常多,知名的清理软件如clener(国外,付费),lemon(国产,免费)等,有付费的,也有免费的,功能都大同小异。由于苹果系统的封闭性,导致大多数
台积电张忠谋突然发声,事关华为芯片订单全球缺芯,本来正常来说,应该是台积电迎来了春天,但是,美国修改规则,限制台积电的出货自由,并且还强迫台积电在半导体布局尚不完善的美国本土去建厂,去产芯。美国这样咄咄逼人的行为终于激壕!内马尔花费超百万美元购买两枚无聊猿NFT直播吧1月24日讯阿斯报报道,内马尔几日前购买了两枚无聊猿NFT(非同质化代币),交易总金额超过100万美元。交易记录显示,内马尔为无聊猿编号6633支付了159。99枚以太坊交易网友称有手机软件开屏广告摇一摇即进入工信部回应加大手机软件广告治理力度(建议回复)近日,河北石家庄市网友邹先生在人民网领导留言板反映,有些手机软件开屏广告是摇一摇进入的,如果手机没拿稳,轻微摇晃一下,就会进入广告,建议相关部门我们为什么看不到未来人我们经常看穿越剧,穿越到古代,展示现代人的能力,唐诗宋词随手拈来,根据爱因斯坦相对论,如果旅行者超光速,我们是倒着时间回答过去,但我们为何看不到未来人呢?理论上,如果人类不灭绝,是oracle临时表空间删除和重建过程分享一临时表空间概念临时表空间用来管理数据库排序操作以及用于存储临时表中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sortareasize大小不够时,工信部培育一批进军元宇宙等领域的中小企业中新财经1月24日电24日,在工信部举行的新闻发布会上,工信部中小企业局局长梁志峰称,要加大力度推动中小企业数字化发展。培育一批进军元宇宙区块链人工智能等新兴领域的创新型中小企业。明日主题前瞻固态电池产业化第一枪!被认为是最具前景的新一代动力锂电今日导读固态电池产业化第一枪!被认为是最具前景的新一代动力锂电,这家公司相关产品已应用于固态电池中双高双峰形势下转型升级,年度投资计划首次突破5000亿元,这家公司该领域处于排头兵飞科FS967评测横扫茂密黑森林,光亮的感觉犹如初恋科技圈De那点事评测长,每天都需要对胡须以及脸颊进行呵护,否则就会形成所谓油腻男,否则会让人产生一种反感,所以说清晨起来一定要认真刮胡须,会使人看起来荣光换发。俗话说,一日之计在于华为Mate50外观曝光,延续家族传统,但是配置大幅度升级首先Mate50一定会在不久上市的。华为轮值董事余承东表示过,华为绝对不会放弃智能手机市场。已经一推再推的华为Mate50,相信被华为打磨好之后,一定会在近期上市。从爆料出来的消息北汽刘宇华为高等级辅助驾驶车型正在路测未来将推出更小车型新京报贝壳财经讯(记者白昊天)1月20日,北汽集团副总经理刘宇在智驾碳新第十七届超级汽车论坛上表示,目前北汽极狐旗下的ARCFOXS华为HI版正在紧锣密鼓的筹备中,目前已有部分拿到微软670亿美元收购暴雪豪赌元宇宙值不值?网易代理咋整才过去一周,游戏史上最大并购记录再次刷新。1月18日,微软以溢价45687亿美元的高价收购动视暴雪,其收购金额超过上周侠盗猎车手(GTA)系列游戏制造商TakeTwo收购Zynga