聊聊“幂等”

Posted 思考的犀牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊“幂等”相关的知识,希望对你有一定的参考价值。

幂等的定义

    从数学的角度来说,就是无论处理多少次,返回的结果和处理一次是一样的,比如:1n次方和1。

    幂等性是系统对外的一种承诺而不是实现,承诺只要接口调用成功,外部系统调用一次和多次的影响是一致的。声明为幂等的接口认为外部系统调用失败是常态,并且失败之后一定会有重试。 


操作的幂等说明

  • 对数据的读操作,在数据不变的情况下,无论执行多少次,返回的结果也是一直的,是天然的幂等性;

  • 对数据的删除操作,也是幂等性的,因为不论是删除一次还是删除多次,实现的效果是一致的;

  • 对于数据的新增操作,因为可能向数据库中插入重复的多条记录,因为不是幂等性的;

  • 对于数据的更新操作,也会出现多次重复被更新的情况,一次也不是幂等性的;


幂等的业务场景

  • 账户资金的加减操作;

  • 电商订单的创建

  • 页面的多次提交问题;

  • 并发下的计数问题;

  • 大型系统中的消息消费问题;


幂等的解决方案

    幂等只是一个承诺,一个概念,保证调用多次返回结果的一致性,具体实现需要考虑多种环境下的高并发情况,并根据不同的场景选择合适的方案;

  • 对于新增的幂等性问题,可以配合数据库的唯一索引进行控制;

  • 对于数据的更新幂等性问题,可以通过悲观锁,乐观锁,缓存的分布式锁来控制并发;

  • 对于页面的多次提交,可以通过token机制进行控制;

  • 消息消费的场景,可以通过在消息上设置一个taskid来进行控制;


总结

    幂等性是优秀程序员必备的一个基因,在实现业务过程中,是应该被首先考虑的问题,尤其是在银行,金融的系统里,要同时保证数据的高效和准确性。



整理了下之前的大数据知识分享,空了记得复习哦!

大数据基础知识篇:






Hive知识篇:



以上是关于聊聊“幂等”的主要内容,如果未能解决你的问题,请参考以下文章

专家原创聊聊“幂等”

聊聊接口幂等性设计

聊聊接 API 口幂等性设计

每个工程师都应该了解的:聊聊幂等

聊聊幂等设计

每个工程师都应该了解的:聊聊幂等