冪等性

冪等性

定義:

解釋1:一次和多次請求某一個資源應該具有同樣的副作用。
解釋2:同樣的請求被執行一次與連續執行多次的效果是一樣的,服務器的狀態是一樣的。
解釋3:任意多次執行對資源本身所產生的影響均與一次執行相同。
解釋4:調用接口成功,即使再多次調用,對系統的影響也是一致的。
解釋5:用戶對同一個操作發起的一次請求或多次請求的結果是一致的,不會因爲多次點擊而產生的副作用。

如果沒有冪等性的場景:

用戶在APP上點擊多次提交訂單,後臺會生產多個訂單
多次點擊支付,由於網絡原因,扣了多次錢

爲什麼需要冪等性?

用戶處理方便,雖然服務邏輯複雜,保證了用戶的體驗

HTTP的冪等性:

GET:從服務器獲取資源,雖然數據再變動,結果不同,但冪等性強調的是1次操作和N次操作不會對數據造成副作用,滿足冪等
DELETE:一次刪除和多次刪除造成的結果是一樣的,滿足
PUT:update語句沒有++等操作時候,一次更新和多次更新的結果都是一樣的,滿足
POST:一次和多次會給服務器造成多個不同的結果,即產生了副作用,不滿足

保證冪等性的關鍵:

唯一標識;
將並行變成串行;

  1. 比如秒殺業務中,可以將用戶id和秒殺訂單id聯合作爲唯一鍵,保證冪等性
  2. 多次點擊支付,可以攔截用戶請求,將請求進行排隊。只有一條請求可以在mysql將訂單狀態變爲支付成功,剩下的的請求在判斷該訂單是否支付過。此時滿足冪等性

保證冪等性的解決方案:(具體介紹看下面大佬的鏈接吧)

  • 樂觀鎖
  • 防重表
  • 分佈式鎖
  • token令牌

感謝:
深入理解冪等性
分佈式系統中的冪等設計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章