|   登录   |   注册   |   设为首页   |   加入收藏   

用户登录

close

用户名:

密码:

新用户注册

close

用户名:

密码:

密码确认:

电子邮箱:

关注内容:

个人主页:

帮助

close

龙宇网成立于2008年3月,网站进入整体运作于2010年10月1日。

在这里,我们把它做成了一个真正意义上的网站,完全以个人的信息为内容,以网友的需要为主导,全力搜罗各种信息,建立完善的网站功能,使网友在这里可以第一时间找到所需要的信息。

现在,经过三年的努力,网站的资料已经相当丰富,而网站得到了大家的喜爱和认可。

但,我们还是会继续努力下去,让网间的这份快乐继续持续下去,让这份闲暇时的日子,与快乐一并同行。

寻觅快乐,网住快乐,关注网络,是龙宇网的宣言与承诺。

幂等性

标签: 幂等性
分类: 流式计算 发布时间: 2018-02-08 15:37:32 浏览次数: 499
内容提要: 我们系统设计的时候,多多考虑我们的执行逻辑是否可以幂等执行是否可以,如果可以幂等执行我们就幂等执行,因为系统支持幂等操作是件太幸福的事情了。

我们系统设计的时候,多多考虑我们的执行逻辑是否可以幂等执行是否可以,如果可以幂等执行我们就幂等执行,因为系统支持幂等操作是件太幸福的事情了。

先来说说什么是幂等性。

幂等, 是一个数学和计算机学概念,常见于抽象代数中。在编程中一个幂等操作,就是操作执行多次和执行一次的结果是一样的。幂等函数是指用相同的参数执行多次, 获得的结果相同。这些执行不会担心对相同造成影响。

我们在系统设计的时候,异常是不可避免的,但是如果我们的服务可以做到幂等性,那真是太好了。比如存储系统中,我们在写入数据的时候,存储系统出现了异常,在存储系统恢复后,我们不知道数据是否已经存在了,我们需要将操作重复执行,这个时候存储系统如果做到幂等性,那我们写入一次和写入N次是没有区别的。

另外说说计费系统,扣款这个是个敏感问题,在商业系统中,服务追求的稳定性永远是第一位的,和用户系统(微信之类)的不同在于,用户系统追求的大并发,高效率, 甚至在设计的时候都可以为了效率而牺牲稳定性,但是商业系统却不一样。

计费系统也有异常,在异常出现的时候,我们怎么做到幂等呢,但是这个幂等和我们之前的幂等又有写差异,同样的一次扣款行为,我们执行一次和一行多次的结果是一致的,那就是只扣款一次。不能因为服务异常而不扣或者少扣。那我们怎么做到这样的功能, 我们每次扣款都有订单,订单是唯一的,我们的系统记录扣款的订单,在每次扣款之前都查询一下已扣的订单号,是不是扣过了,但是这个方案的不足之处就是,我们要保留多久的订单号呢。如果超过保留的订单号,在来了怎么办呢?这个方案就是潜在的风险。

针对这个潜在的时间窗口的风险,我们在想想我们的订单是否可以做到单调递增,在我们的订单系统处理中,订单号是递增处理的,如果有了这个递增的订单号,我们只需要在系统中保留最后一个订单号就可以了,小于这个订单号的订单可以全路打回,认为已经处理过了,而大于这个订单号的订单,我们可以放心的进行处理。所以我们的问题,又从幂等转变了单调递增ID

我们的系统如果可以接受幂等操作,尽量做到幂等操作,因为在处理异常的时候,幂等可以让我们轻轻松松处理问题。

 

16
21

分类: 流式计算   |   评论: 0   |   引用: 0   |   浏览次数: 499