精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

業務冪等性設計的六種方案

開發 前端
分布式鎖實現冪等性的邏輯就是,請求過來時,先去嘗試獲得分布式鎖,如果獲得成功,就執行業務邏輯,反之獲取失敗的話,就舍棄請求直接返回成功。

現如今很多系統都會基于分布式或微服務思想完成對系統的架構設計。那么在這一個系統中,就會存在若干個微服務,而且服務間也會產生相互通信調用。

那么既然產生了服務調用,就必然會存在服務調用延遲或失敗的問題。當出現這種問題,服務端會進行重試等操作或客戶端有可能會進行多次點擊提交。在存在重復請求的場景中(如支付交易),為確保系統最終處理結果的一致性并避免資損風險,必須通過業務冪等性設計保障數據操作的唯一性。

什么叫冪等

冪等(Idempotence) 是計算機科學和分布式系統中的核心概念,指在特定上下文中,對同一操作進行多次執行所產生的影響,與僅執行一次該操作的影響完全相同。無論該操作被調用一次還是多次,系統的最終狀態始終保持一致,資源狀態或業務結果不會因為重復調用而發生額外改變。

冪等用數學語言表達就是:f(f(x))=f(x)

圖片圖片

在分布式系統和網絡通信中,冪等性尤為重要,尤其是轉賬、支付等涉及金額交易的場景,如果出現冪等性的問題,造成的后果是非常嚴重的。

事故:轉賬無冪等、交易無冪等、發優惠券無冪等,都會造成不小的事故

冪等性設計主要從兩個維度進行考慮:空間、時間。

  • 空間:定義了冪等的范圍,如生成訂單的話,不允許出現重復下單。
  • 時間:定義冪等的有效期。有些業務需要永久性保證冪等,如下單、支付等。而部分業務只要保證一段時間冪等即可。

業務問題拋出

在業務開發與分布式系統設計中,有非常多的場景需要考慮冪等性的問題,如:

  • 當用戶購物進行下單操作,用戶操作多次,但訂單系統對于本次操作只能產生一個訂單。
  • 當用戶對訂單進行付款,支付系統不管出現什么問題,應該只對用戶扣一次款。
  • 當支付成功對庫存扣減時,庫存系統對訂單中商品的庫存數量也只能扣減一次。
  • 當對商品進行發貨時,也需保證物流系統有且只能發一次貨。

但是一旦考慮冪等后,服務邏輯務必會變的更加復雜。因此是否要考慮冪等,需要根據具體業務場景具體分析。

此處以下單減庫存為例,當用戶生成訂單成功后,會對訂單中商品進行扣減庫存。 訂單服務會調用庫存服務進行庫存扣減。庫存服務會完成具體扣減實現:

圖片圖片

如果出現調用超時,如網絡抖動,雖然庫存服務執行成功了,但結果并沒有在指定時間內返回,則訂單服務會進行重試。那就會出現問題,此時出現庫存扣減兩次的問題。 對于這種問題,就需要考慮冪等性設計。

冪等設計實現

方案一:數據庫唯一索引 

在保存數據前,可以先 select 一下數據是否存在。如果數據已存在,說明是重復數據,則不再寫入數據,如果數據不存在,則執行 insert 操作。如果 insert 成功,則直接返回成功,如果 insert 產生主鍵沖突異常,則捕獲異常進行處理。

但在高并發的場景下,可能會出現兩個請求 select 的時候,都沒有查到數據,然后都執行了 insert 操作,所以此時會有重復數據產生,因此在數據庫中,我們需要添加唯一索引來保證冪等,唯一索引是不會引起重復數據的兜底策略

方案二:防重表機制 

防重表機制與唯一索引機制是相同的原理,只不過是單獨建一個防重表,防重表也必須引入唯一索引,而且防重表與業務表必須在同一數據庫,并且操作要在同一個事務中。

防重表機制的主要流程:把唯一主鍵插入防重表,再進行業務操作,且它們處于同一個事務中。當重復請求時,因為防重表有唯一約束,導致請求失敗,可以避免冪等問題。

注意防重表和業務表應該在同一個庫中,這樣就保證處在一個事務中,即使業務操作失敗,也會把防重表的數據回滾。保證了數據的一致性。

該方案也是比較常用的,防重表跟業務無關,很多業務可以共用同一個防重表,只要規劃好唯一主鍵即可。

圖片圖片

方案三:數據庫樂觀鎖 

樂觀鎖實現的方式有兩種:基于版本號、基于條件。但是實現思想都是基于行鎖來實現的。

基于版本號實現

通過為表增加一個 “version” 字段來實現。讀取出數據時,將此版本號一同讀出,之后更新時,對此版本號加一。此時,將提交數據的版本號與對應記錄的當前版本號進行比對,如果提交的版本號等于當前版本號,則予以更新,否則認為是過期數據。

圖片圖片

基于條件實現

版本號控制在并發場景中雖然能保證數據一致性,但在高并發庫存扣減的場景下存在體驗問題:當多個用戶同時查詢到可售庫存后,只有基于版本號的最新請求能扣減成功,這會導致一些用戶看似有庫存卻最終下單失敗。

從業務角度而言,只要確保庫存實際不發生超賣即可,此時更推薦直接通過數據庫條件控制:

update tb_stock set amount=amount-#{num} 
where goods_id=#{goodsId} and amount-#{num}>=0"

總結:在競爭不激烈,出現并發沖突幾率較小時,推薦使用樂觀鎖。但是,樂觀鎖的每次沖突檢測都需要與數據庫交互,頻繁的更新操作仍會對數據庫產生一定壓力。此外,在高并發場景下,大量事務競爭可能導致數據庫連接池耗盡或成為性能瓶頸。

方案四:悲觀鎖 

悲觀鎖的實現,往往依靠數據庫提供的鎖機制,具有強烈的獨占和排他性。

通過 for update 可以實現排它鎖;

select * from account where id = 123 for update;

悲觀鎖在同一事務操作過程中,鎖住了一行數據。別的請求過來只能等待,如果當前事務耗時比較長,就很影響接口性能。所以一般不建議用悲觀鎖做這個事情。

方案五:防重 Token 令牌 

采用 Token 機制確保冪等性是一種廣泛應用的解決方案,能夠覆蓋絕大多數業務場景。該方案通過前后端協作實現。此方案包含兩個請求階段:

  1. 客戶端請求服務端申請獲取 token。
  2. 客戶端攜帶 token 再次請求,服務端校驗 token 后進行操作。

圖片圖片

整體流程如下:

  1. 服務端提供獲取 token 接口,供客戶端進行使用。服務端生成 token 后,如果當前為分布式架構,將 token 存放于 redis 中(一般會設置一個過期時間),如果是單體架構,可以保存在本地緩存。
  2. 當客戶端獲取到 token 后,會攜帶著 token 發起請求。
  3. 服務端接收到客戶端請求后,首先會判斷該 token 在 redis 中是否存在。如果存在,則完成進行業務處理,業務處理完成后,再刪除 token。如果不存在,代表當前請求是重復請求,直接向客戶端返回對應標識。

存在問題

但是現在有一個問題,當前是先執行業務再刪除 token。在高并發下,很有可能出現第一次訪問時 token 存在,完成具體業務操作。但在還沒有刪除 token 時,客戶端又攜帶 token發起請求,此時,因為 token 還存在,第二次請求也會驗證通過,執行具體業務操作。

針對該問題,我們提出兩種解決方案進行探討:

第一種方案:對于業務代碼執行和刪除 token 整體加線程鎖。 當后續線程再來訪問時,則阻塞排隊。

第二種方案:借助 redis 單線程和 incr 是原子性的特點。當第一次獲取 token 時,以 token 作為 key,對其進行自增。然后將 token 進行返回,當客戶端攜帶 token 訪問執行業務代碼時,對于判斷 token 是否存在不用刪除,而是對其繼續 incr。 如果 incr 后的返回值為 2。則是一個合法請求允許執行,如果是其他值,則代表是非法請求,直接返回。

圖片圖片

前面提到的都是先執行業務再刪除 token,那如果先刪除 token 再執行業務呢?其實也會存在問題,假設具體業務代碼執行超時或失敗,沒有向客戶端返回明確結果,那客戶端就很有可能會進行重試,但此時之前的 token 已經被刪除了,則會被認為是重復請求,不再進行業務處理。

圖片圖片

這種方案無需進行額外處理,一個 token 只能代表一次請求。 一旦業務執行出現異常,則讓客戶端重新獲取令牌,重新發起一次訪問即可。推薦使用先刪除 token 方案。

但是無論先刪 token 還是后刪 token,都會有一個相同的問題。每次業務請求都會產生一個額外的請求去獲 token。但是,業務失敗或超時,在生產環境下,一萬個里最多也就十個左右會失敗,那為了這十來個請求,讓其他九千九百多個請求都產生額外請求,就有一些得不償失了。雖然 redis 性能好,但是這也是一種資源的浪費。

方案六:分布式鎖 

分布式鎖實現冪等性的邏輯就是,請求過來時,先去嘗試獲得分布式鎖,如果獲得成功,就執行業務邏輯,反之獲取失敗的話,就舍棄請求直接返回成功。

分布式鎖可以使用 Redis,也可以使用 ZooKeeper,Redis 相對來說會更加輕量級。

Redis 分布式鎖,可以使用命令SETNX  + 唯一流水號 實現,分布式鎖的 key 必須為業務的唯一標識。

Redis 執行設置 key 的動作時,要設置過期時間,這個過期時間不能太短,太短攔截不了重復請求,也不能設置太長,會占存儲空間。

責任編輯:武曉燕 來源: Java隨想錄
相關推薦

2023-08-29 13:53:00

前端攔截HashMap

2024-11-01 09:28:02

2025-04-27 03:22:00

系統接口冪等性

2025-05-06 00:00:05

MySQLES協同

2025-05-19 00:02:00

數據脫敏加密算法數據庫

2019-01-17 10:58:52

JS異步編程前端

2024-06-24 01:00:00

2022-05-23 11:35:16

jiekou冪等性

2024-08-29 09:01:39

2025-08-07 02:11:00

2022-05-24 10:43:02

延時消息分布式MQ

2010-03-15 17:12:52

Python字典

2020-10-14 09:00:00

SAST漏洞攻擊

2021-07-06 14:07:59

數據存儲存儲合規性

2019-08-02 08:50:47

API架構微服務

2024-11-07 11:17:50

2017-06-26 10:35:58

前端JavaScript繼承方式

2022-05-05 07:49:54

業務冪MySQL索引

2018-04-27 15:02:10

2019-05-16 13:00:18

異步編程JavaScript回調函數
點贊
收藏

51CTO技術棧公眾號

欧美在线亚洲| 欧美aaaxxxx做受视频| 欧美亚洲专区| 国产一区二区三区免费视频| 成人不卡免费视频| wwwwxxxx在线观看| 国产欧美一区二区三区网站| 亚洲最大福利视频网| 五月婷婷视频在线| 亚洲成av人片乱码色午夜| 亚洲高清一区二| 亚洲免费999| 成人黄色动漫| 亚洲天堂2016| 日韩av一区二区三区在线观看 | 在线免费观看a级片| 裤袜国产欧美精品一区| 一区二区三区四区视频精品免费 | 国产美女性感在线观看懂色av | 亚洲自拍偷拍一区| 日韩三级一区二区| 一区二区亚洲| 久久精品中文字幕| 在线观看福利片| 国内露脸中年夫妇交换精品| 欧美高清性hdvideosex| 国产美女三级视频| 成人影院在线播放| 亚洲免费av在线| 在线观看欧美亚洲| 韩国三级av在线免费观看| 丰满白嫩尤物一区二区| 91久久国产婷婷一区二区| 日韩人妻精品中文字幕| 亚洲区第一页| 久久99国产精品自在自在app| 日韩精品电影一区二区三区| 欧美色图五月天| 欧美草草影院在线视频| 国产高清999| 亚洲国产伊人| 欧美日韩免费一区二区三区视频| 免费在线激情视频| 精品乱码一区| 潘金莲一级淫片aaaaaa播放| 亚洲国产免费看| 欧美成人午夜剧场免费观看| 亚洲一区电影在线观看| 日韩影院二区| www.欧美三级电影.com| 亚洲av熟女国产一区二区性色| 九一国产精品| 亚洲色图狂野欧美| 人妻少妇无码精品视频区| 久久99视频| 国产一区二区三区高清在线观看| 国产在线观看h| 加勒比久久综合| 亚洲视频欧美视频| avhd101老司机| 欧美日韩在线网站| 最近2019年日本中文免费字幕 | 懂色av一区二区三区四区| 国产精品一二三四| 动漫一区二区在线| 色婷婷av一区二区三| 99视频一区二区| 欧美亚洲一级二级| 爱爱爱免费视频在线观看| 中文字幕一区二区三区四区视频| 天天超碰亚洲| 久久国产精品久久久久久| 美国黄色小视频| 91久久视频| 庆余年2免费日韩剧观看大牛| 国产无套丰满白嫩对白| 日本午夜精品一区二区三区电影| 国产精品小说在线| 国产ts变态重口人妖hd| 97精品国产露脸对白| 日韩欧美一区二区三区四区| 麻豆传媒在线免费| 亚洲一区在线视频| 久章草在线视频| 国产精品成人**免费视频| 精品黑人一区二区三区久久| 欧美熟妇精品黑人巨大一二三区| 日韩精品dvd| 欧美激情一区二区三区久久久 | 7777精品伊人久久久大香线蕉完整版 | 青青草偷拍视频| 国产精品久久久久久模特 | 激情伊人五月天| 成人看片毛片免费播放器| 日韩欧美国产一区二区三区| 美国黄色一级毛片| 99久久九九| 97免费视频在线播放| 在线免费看91| 99精品1区2区| 久久视频免费在线| 韩日精品一区二区| 日韩欧美你懂的| 中文字幕在线观看免费高清| 欧美三区视频| 国产精品网站入口| 天堂成人在线| 超清av在线| 91官网在线免费观看| aaaaa黄色片| 激情综合网五月| 久久全球大尺度高清视频| 中文字幕久久久久| 99精品1区2区| 黄色三级中文字幕| 一区二区三区日本视频| 亚洲午夜精品久久久久久久久久久久 | 亚洲图区在线| 久久久天堂国产精品女人| 亚洲中文字幕在线观看| 91美女片黄在线观看91美女| 轻点好疼好大好爽视频| 日韩在线你懂得| 亚洲一二三在线| 黄色片中文字幕| av中文字幕亚洲| 国产传媒久久久| av在线成人| y97精品国产97久久久久久| 依依成人综合网| 成人性生交大片| 日本福利视频在线观看| 久久久加勒比| 一区二区三区视频免费| 亚洲精品中文字幕乱码三区91| 成人av电影免费观看| 欧美视频在线第一页| 四虎影视精品永久在线观看| 在线播放亚洲激情| 在线免费观看av网址| 91免费看视频| 久久综合九色综合88i| 国产一区二区在线视频你懂的| 欧美激情va永久在线播放| 国产高清在线观看视频| 亚洲欧美日韩一区二区 | 日韩激情电影免费看| 波多野结衣91| 日韩av高清在线看片| 国产区精品视频在线观看豆花| 欧美大胆在线视频| 国产a级免费视频| 亚洲黄色av一区| 性生交大片免费看l| 亚洲综合自拍| 成人免费在线看片| 888av在线视频| 亚洲精品乱码久久久久久金桔影视| 日韩成人一区二区三区| 91视频免费看| 亚洲精品高清无码视频| 第一会所亚洲原创| 成人啪啪免费看| 在线观看电影av| 亚洲精品一区二区精华| 毛片视频网站在线观看| 久久久久久久久99精品| 国产九九热视频| 伊人青青综合网| 国产不卡一区二区在线观看| 中文字幕在线高清| 永久免费毛片在线播放不卡| 91欧美日韩麻豆精品| 亚洲乱码精品一二三四区日韩在线| 亚洲天堂小视频| 亚洲深爱激情| 色就是色欧美| 欧美区一区二区| 2019中文字幕在线免费观看| 国产在线观看免费网站| 777a∨成人精品桃花网| 国产香蕉视频在线| 国产欧美精品一区二区三区四区 | 在线观看18视频网站| 国产福利资源一区| 国产精品久久久久av免费| 成人午夜在线影视| 日韩精品免费在线| 国产精品无码专区av免费播放| 亚洲午夜久久久| 亚洲自拍偷拍图| 国产99久久久国产精品潘金| 蜜臀久久99精品久久久酒店新书 | 欧美成人剧情片在线观看| 人人妻人人玩人人澡人人爽| 欧美色爱综合网| 久草国产精品视频| 国产一区二区| 欧美性高潮在线| 欧美88888| 99久久精品国产网站| 国产aⅴ爽av久久久久| 亚洲日韩视频| 裸体裸乳免费看| 精品国产乱码| 国内一区在线| 成人日韩视频| 国产精品免费一区| 韩国精品一区| 久久国产精彩视频| 国产精品无码2021在线观看| 精品国产凹凸成av人网站| 一二三区中文字幕| 日本精品一级二级| 日本一二三区视频| 日韩理论片中文av| xxxx日本黄色| 99精品国产99久久久久久白柏| 免费观看黄网站| 六月丁香婷婷久久| 亚洲成人福利在线观看| 亚洲一区黄色| 成人一区二区免费视频| 亚洲先锋影音| 精品一区二区成人免费视频| 成人高清av| 色999五月色| 国产欧美日韩精品一区二区免费| 国产欧美亚洲日本| 视频在线一区| 97视频中文字幕| 欧美高清一级片| 亚洲japanese制服美女| 香蕉久久一区| 国产日韩欧美中文在线播放| 成人网ww555视频免费看| 日本三级久久久| 韩国成人漫画| 日本高清视频一区| 国产精品伦理| 国产成人涩涩涩视频在线观看| 欧美粗大gay| 国产成+人+综合+亚洲欧美丁香花| 国产粉嫩在线观看| 91超碰caoporn97人人| 成人在线黄色电影| 91国内免费在线视频| 免费v片在线观看| 日本国产欧美一区二区三区| 国模冰冰炮一区二区| 国产精品1区2区在线观看| 国产精品久久亚洲不卡| 国产精品日韩欧美综合| 99综合久久| 国产精品国产一区二区| 久草精品视频| 国产青春久久久国产毛片| 亚洲AV午夜精品| 欧美午夜影院| 亚洲一区不卡在线| 亚洲老妇激情| 免费拍拍拍网站| 国产精品一国产精品k频道56| 欧美v在线观看| 免费精品视频在线| 四虎成人在线播放| 99久免费精品视频在线观看| 欧美做受高潮6| 中文字幕日韩一区二区| 色在线观看视频| 欧美日韩另类字幕中文| 69视频免费看| 欧美一三区三区四区免费在线看 | 本网站久久精品| 91视频免费网站| 激情小说亚洲图片| 日韩av电影免费观看| 久久久国产精品| 秋霞无码一区二区| 日本va欧美va精品| 性一交一黄一片| 久久综合成人精品亚洲另类欧美| 9.1片黄在线观看| 夜色激情一区二区| 久久久久久久久久成人| 在线不卡一区二区| 天天操天天插天天射| 一色桃子一区二区| 手机在线免费观看av| 国产97免费视| 欧一区二区三区| 欧美一区二区三区四区夜夜大片| 天天av综合| 999香蕉视频| 懂色av一区二区三区免费看| 国产全是老熟女太爽了| 亚洲精品国产精华液| 91精品国产高清一区二区三密臀| 欧美美女直播网站| 日本免费不卡| 欧美成人午夜激情视频| 亚洲成av在线| 国产日韩精品推荐| 久久久久久久久久久妇女| 18岁网站在线观看| 国产精品亚洲视频| 亚洲国产日韩一区无码精品久久久| 亚洲主播在线观看| 亚洲性生活大片| 亚洲免费高清视频| 国产精品186在线观看在线播放| 国产精品三级网站| 国产伦精品一区二区三区千人斩| 9色porny| 国产激情偷乱视频一区二区三区| 亚洲成人黄色av| 日韩欧美国产网站| 成人免费视频国产免费麻豆| 久久精品久久久久久国产 免费| 裤袜国产欧美精品一区| 精品一区二区日本| 极品少妇一区二区三区| 国产综合av一区二区三区| 一本色道久久综合无码人妻| 亚洲а∨天堂久久精品9966| av免费网站在线观看| 国产欧美在线播放| 国产精品一区二区99| 欧美成人高潮一二区在线看| 国产成人免费视频网站高清观看视频| 中文字幕精品亚洲| 欧美最猛性xxxxx直播| 久久久久国产精品嫩草影院| 69视频在线免费观看| 极品一区美女高清| 福利视频一区二区三区四区| 顶级嫩模精品视频在线看| 18岁成人毛片| 日韩一区二区精品| 在线观看午夜av| 99re在线播放| 国产精品porn| 少妇搡bbbb搡bbb搡打电话| 亚洲综合在线免费观看| 蜜桃视频久久一区免费观看入口 | 91嫩草|国产丨精品入口| 91精品国产综合久久久久久| av毛片在线免费看| 国产精品二区三区| 影音先锋亚洲一区| 亚洲国产精品无码久久久久高潮| 亚洲第一激情av| 人成在线免费视频| 日韩av观看网址| 欧美偷拍自拍| 天天做天天干天天操| 亚洲美女在线一区| 丰满少妇高潮在线观看| 国内精品久久久久伊人av| 开心激情综合| caopor在线视频| 国产精品激情偷乱一区二区∴| 91精品人妻一区二区三区果冻| 久久亚洲精品小早川怜子66| 日韩中文字幕在线一区| 国产素人在线观看| 国产亚洲成年网址在线观看| 中文字幕一区二区在线视频 | 精品一区二区三区蜜桃| 中文字幕av播放| 亚洲精品一区二区三区蜜桃下载| 中文字幕 在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 韩国v欧美v日本v亚洲v| 久久机热这里只有精品| 亚洲欧美日韩视频一区| 色成人综合网| 18禁网站免费无遮挡无码中文| 国产三级精品三级| 精品国产18久久久久久| 欧美伊久线香蕉线新在线| 日韩精品一卡| 国产污在线观看| 欧美在线高清视频| 暖暖在线中文免费日本| 奇米精品在线| 国产成人福利片| 久久久久久亚洲av无码专区| 久久av.com| 欧美美乳视频| 日韩高清一二三区| 欧美在线免费观看亚洲| 亚洲卡一卡二| 日韩一区二区三区高清| 国产成人精品毛片| 久久精品影视伊人网| 欧美aaaaa级| www.桃色.com| 欧美综合久久久| 草莓视频丝瓜在线观看丝瓜18|