服务高可用:幂等性设计

QQ用得起来越少了,现在就加入300+技术微信群,公众号回复"微信群"即可加入。

什么是幂等性?

一般在服务调用时,读服务如果调用失败了,会自动按配置次数转移到别的服务上去请求。而写服务就不能重复请求,如果因为超时或者网络故障等原因被调用服务并没有返回成功的响应,服务调用方就认为是失败了,但很有可能的是已经成功了,如果继续重复请求写服务,如转账类的服务,可能会造成严重的后果。所以,写服务失败不能设计成继续发重复请求,被调用服务也要设计幂等性,即使重复请求,也不会造成影响。

知道上面的背景,所以,幂等性就是同样的参数,重复请求相同的服务,必须得到相同的结果。

幂等性设计

举一个支付的场景,请求一个第三方支付接口发起支付功能,同样的订单号,同样的金额信息,返回的都是成功。同样的订单号,不同的金额信息,返回的是订单号重复。这就是幂等性设计,第三方支付效验了请求参数和已有数据库的信息一致时直接返回已有的成功数据,如果数据不一致而又订单号重复直接报订单号重复。而如果不做幂等性设计,同样的订单号,同样的金额信息,重复支付,可能会造成金额累加。为了服务友好性,同样的订单号同样的金额信息返回订单号重复也是不友好的。

有些服务天生就具有幂等性,如修改用户邮箱、性别等,不管你重复请求修改多少次,返回的结果都是一样的。

所以,对于服务幂等性设计的要点就是一定要效验请求参数有效性,及已有数据的对比。如果同样的请求参数已经处理过就不要重复处理,直接返回,这就是幂等性核心点。

下面这张图已经很形式的说明了幂等性的重要性。

image.png

推荐阅读


去BAT面试完的Mysql面试题总结(55道,带完整答案)

阿里高级Java面试题(首发,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

Spring面试题(70道,史上最全)

通往大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。


推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 122,828评论 15 534
  • 1.幂等性定义 1.1 数学定义 在数学里,幂等有两种主要的定义: 在某二元运算下,幂等元素是指被自己重复运算(或...
    王帅199207阅读 3,792评论 1 148
  • 阳台是室内的延伸,是屋子与外界沟通的途径,也是助你恢复元气的地方。想象一下,某个周末的清晨,你慵懒地起了床,走到阳...
    小七宇阅读 847评论 0 14
  • 夏有夏的西瓜 西瓜含糖但是夏天最好的降温水果;时间太短却是最美的季节
    Lo1999阅读 28评论 1 1
  • 昨夜斗回北,今朝岁起东。 我年已强仕,无禄尚忧农。 桑野就耕父,荷锄随牧童。 田家占气候,共说此年丰。
    黄金屋916阅读 43评论 0 0