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

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

  前言
  今天的主题: 接口幂等性的解决方案 。本来是想把对象的存储过程和内存布局肝出来的,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说的好,好事多磨,对吧。
  在实际项目开发中接口是我们在开发中经常接触到的,而且是经常经常要写,每一个项目可能都会伴随着大量的接口开发,在涂鸦的这几个月,基本上就是在与接口作斗争了,新需求除了业务相关就是设计表和接口编写了。
  当然,在接口设计中我们要考虑很多问题,安全性,格式,设计等等,今天我们先来聊聊,在高并发环境下,接口幂等性的解决方案有哪些。 正文
  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到了吗?

Intel奔腾和赛扬处理器喜提傲腾8代U即可支持IntelOptane(傲腾)是存储产品界冉冉升起的新星,不过,其本身价格就不菲,同时对兼容的平台也有苛刻要求,需要7代酷睿处理器100系以上主板等。不过,可能是想加大普及力度同时新iPhone背板疑曝光方块三摄可能成真据国外媒体报道,周四在微博首次曝出的一个可疑的产品照片,或许被认为是苹果即将要推出的2019版iPhone新产品。发布在知名爆料网站Slashleaks上的这张照片,与2018版i央行全面推广移动支付应用e公司讯,3月29日,人民银行召开支付结算工作电视电话会议。会议要求,2019年深化支付领域改革开放,加快支付清算市场结构优化升级,推动支付产业高质量发展。要处理好当前与长远规范与华为新品手机Y6Prime登陆巴基斯坦,仅售160美元3月29日消息,据GSM报道,华为在巴基斯坦推出了华为Y6Prime(2019)新款手机。它是一款入门级手机,虽然也是华为Y6Prime系列,却不同于去年发的2018版的Y6PriJmeter接口测试压力测试,一看就会jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以小米雷军谈5G明后年将迎来手机换机潮讯28日,在博鳌亚洲论坛5G物联网的成就者分论坛上,来自中国移动华为小米华为等通信相关企业的代表共同探讨了5G的应用空间。小米雷军明后年将迎5G手机换机潮雷军28日出席论坛。(图片微信朋友圈的小心思终于知道为啥文字被折叠了根据腾讯3月21日发布的最新财报显示,截至2018年底,微信及WeChat的合并月活跃账户数增至约10。98亿,每天平均有超过7。5亿微信用户阅读朋友圈的发帖。作为国内第一大社交A中美联手搭建神秘设备!可直接改变世界,多国求合作随着人类科学技术的不断进步,世界各国的生活水平都得到了快速的提升,在日常生活方面,科技已经进入人们的方方面面,而要完成众多复杂的科技生产,能源是不可或缺的重要资源,就目前的情况而言又拿第一!华为P30系列发布,全新徕卡四摄刷新DxOMark史上最高分刚刚,华为又在法国巴黎开了场发布会。没错,就是被网友们心念念的旗舰新机P30系列的发布。这次发布会上,华为准备了两款新机HUAWEIP30和HUAWEIP30Pro,还有手表眼镜耳被这些APP折磨了十年!才发现国际版是没有广告的免费的,永远是最贵的。这是互联网用户的共识,想看个免费的视频,得看180秒的广告,想和朋友聊聊天,得看见缝插针的推广,想认认真真关心下社会,资讯页面总有渣渣辉想不看这些广告难度系数中国网红经济再次惊掉了我的下巴一个贡献15亿年成交额的中国网红可能要带领她背后的集团去纳斯达克敲钟作者刀姐Doris来源刀姐Doris(doriskerundong)张大奕很可能会是第一位上纳斯达克敲钟的中国网
航拍陕西地坑院四周堆满麦子油菜老人讲窑背上45吨能承受陕西三原柏社距今已有一千六百多年的发展历史,蕴含有古老的人居文化基因,是关中地区最大的地窑村,从空中俯瞰一个个方方正正的地坑隐匿在茂密的树林中。地坑院的窑背上,人们正在打油菜籽晒麦昨天的西安天气瞬息万变一张报纸前一秒遮阳后一秒挡雨昨天西安39度的高温酷热难耐,外出的行人和游客做足了防晒措施。打着伞行走在太阳下,心里想着下场雨降降温多好啊。下午,天空风云变幻,一阵大风后,下起了太阳雨。走在路上的行人,手中的遮还以为托塔天王就是虚构的神陕西三原卫国公李靖是原型真实存在在去中国传统村落柏社村的路上,偶然一眼看到这个牌楼,边被它吸引,决定停下来去看看,原来这里是李靖故居。李靖故居位于陕西三原县鲁桥镇东里堡,始建于唐贞观年间,是唐代卫国公李靖的故居。老人废弃地坑院摘杏等孩子回来吃父母时刻挂念着不在家的娃小时候住在农村,房前屋后有各种果树,果子成熟的时候一定是左邻右舍一起分享,在城市中很难有哪种分享的感觉。去陕西柏社村看地坑院,看到几位老人在摘杏,便走过去想拍几张照片。一位奶奶看到中国第一家票号分号遍布汇通天下一度操纵清王朝的经济命脉中国第一家票号日升昌,创建于道光初年,百年沧桑,业绩辉煌,分号遍布全国30余个城市远及欧美东南亚等国,以汇通天下著称于世。日升昌,座落于大清金融第一街平遥古城西大街的繁华地段,就是中望仿真软件算例教程底座零件静力分析接下来,关于中望仿真软件的应用,将带来一个系列的案例分析,有没有下一期就靠大家的收藏和点赞啦。1仿真介绍线性静力分析是力学分析方法的一种,当载荷应用于物体上时,物体发生变形,载荷作关于元宇宙系统的介绍元宇宙是今年成为互联网圈子流行的概念与场景。与区块链概念兴起不同,元宇宙是真正以一家上市公司(Roblox,中译罗布乐思)的案例为佐证的,这也让元宇宙区别于泡沫式的概念,具备了现实中国企业的数字化场景,具体挑战在哪里?未来几年最有可能爆发的行业是什么微软CEO纳德拉说我们的经济正在经历广泛的数字化,我们还处于初级阶段,科技产业仍仅占GDP的5,它将会达到10。但问题是,其他90的GDP用这些技术中望软件参股安怀信强化国产CAE生态建设3月22日,广州中望龙腾软件股份有限公司(以下简称中望软件)完成对北京安怀信科技股份有限公司(以下简称安怀信)新一轮投资,双方将在CAE仿真验证技术研究产品开发市场开拓等多维度展开中望软件与金慧软件达成战略合作,助力工程建设行业数字化转型近日,广州中望龙腾软件股份有限公司(以下简称中望软件)与上海金慧软件有限公司(以下简称金慧软件)正式达成战略合作,共同打造全国产中望CAD平台金慧协同设计应用解决方案,助力新时期工中望软件科创板上市,成国内A股首家研发设计类工业软件上市企业3月11日,广州中望龙腾软件股份有限公司(股票简称中望软件,股票代码688083)登陆上交所科创板,成为A股第一家研发设计类工业软件上市企业。3月11日,中望软件正式在上交所科创板