幂等校验是什么意思_阿里面试官:接口的幂等性怎么设计?
一、什么是冪等?
看一下維基百科怎么說的:
冪等性:多次調用方法或者接口不會改變業務狀態,可以保證重復調用的結果和單次調用的結果一致。
二、使用冪等的場景
1、前端重復提交
用戶注冊,用戶創建商品等操作,前端都會提交一些數據給后臺服務,后臺需要根據用戶提交的數據在數據庫中創建記錄。如果用戶不小心多點了幾次,后端收到了好幾次提交,這時就會在數據庫中重復創建了多條記錄。這就是接口沒有冪等性帶來的 bug。
2、接口超時重試
對于給第三方調用的接口,有可能會因為網絡原因而調用失敗,這時,一般在設計的時候會對接口調用加上失敗重試的機制。如果第一次調用已經執行了一半時,發生了網絡異常。這時再次調用時就會因為臟數據的存在而出現調用異常。
3、消息重復消費
在使用消息中間件來處理消息隊列,且手動 ack 確認消息被正常消費時。如果消費者突然斷開連接,那么已經執行了一半的消息會重新放回隊列。
當消息被其他消費者重新消費時,如果沒有冪等性,就會導致消息重復消費時結果異常,如數據庫重復數據,數據庫數據沖突,資源重復等。
三、解決方案
1、token 機制實現
通過token 機制實現接口的冪等性,這是一種比較通用性的實現方法。
示意圖如下:
具體流程步驟:
注意:
2、基于 mysql 實現
這種實現方式是利用 mysql 唯一索引的特性。
示意圖如下:
具體流程步驟:
3、基于 redis 實現
這種實現方式是基于 SETNX 命令實現的
SETNX key value:將 key 的值設為 value ,當且僅當 key 不存在。若給定的 key 已經存在,則 SETNX 不做任何動作。
該命令在設置成功時返回 1,設置失敗時返回 0。
示意圖如下:
具體流程步驟:
總結
這幾種實現冪等的方式其實都是大同小異的,類似的還有使用狀態機、悲觀鎖、樂觀鎖的方式來實現,都是比較簡單的。
總之,當你去設計一個接口的時候,冪等都是首要考慮的問題,特別是當你負責設計轉賬、支付這種涉及到 money 的接口,你要格外注意嘍!
原文:https://mp.weixin.qq.com/s/6kcfTke9TciYOhcrUqq4rA
總結
以上是生活随笔為你收集整理的幂等校验是什么意思_阿里面试官:接口的幂等性怎么设计?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql可以使用dataguard_逻
- 下一篇: mysql selectprovider