精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美极品少妇xxxxⅹ喷水| 欧美色中文字幕| 牛人盗摄一区二区三区视频| 好吊色在线视频| 欧美日韩在线观看视频小说| 欧美丝袜第三区| 日本一级黄视频| 亚洲 国产 欧美 日韩| 男人操女人的视频在线观看欧美 | 欧美 日韩 国产 在线| 男女精品视频| 久久91亚洲人成电影网站| 中文字幕5566| 麻豆国产精品| 在线日韩一区二区| 国产欧美日韩网站| 婷婷在线视频| 91在线看国产| 99re国产在线播放| 中文字幕 亚洲视频| 99国产精品久久久久久久成人热| 最好看的2019年中文视频| 欧美熟妇精品一区二区| 粉嫩av一区二区三区四区五区| 亚洲一二三级电影| 久久99国产精品一区| 触手亚洲一区二区三区| 99视频一区二区三区| 91亚洲精品久久久| 国产情侣免费视频| 久久精品午夜| 欧美在线精品免播放器视频| 国内偷拍精品视频| 日韩免费视频| 亚洲欧美一区二区精品久久久| 国产吃瓜黑料一区二区| 婷婷激情成人| 欧美日韩黄色影视| 熟女少妇精品一区二区| 日本不良网站在线观看| 亚洲一二三区不卡| 日b视频免费观看| a黄色片在线观看| 中文字幕在线播放不卡一区| 日韩精品不卡| 成人资源www网在线最新版| 久久久五月婷婷| 欧洲亚洲一区| 国产片在线观看| 久久久www免费人成精品| 美女被啪啪一区二区| 少妇av一区二区| 成人黄页毛片网站| 成人在线免费观看一区| 性生活视频软件| 福利一区在线观看| 丁香五月网久久综合| www.色视频| 成人免费看黄yyy456| 国产精品免费一区二区三区| 老牛影视av牛牛影视av| 成人激情免费电影网址| 国产一区二区久久久| 四季av日韩精品一区| www.色就是色.com| 国产精品igao视频网网址不卡日韩 | 亚洲精品中文字幕av| 扒开jk护士狂揉免费| 国产精品密蕾丝视频下载| 一区二区三区动漫| 永久免费未视频| 2023国产精品久久久精品双| 欧美巨大黑人极品精男| 日韩美女黄色片| 久久精品午夜| 亚洲精品免费在线视频| 丰满肉肉bbwwbbww| 91免费版在线| 一级日韩一区在线观看| 亚洲电影视频在线| 欧美日韩国产精品一区| 激情 小说 亚洲 图片: 伦| 久久国产精品免费一区二区三区| 精品国产91亚洲一区二区三区婷婷| 久久性爱视频网站| 激情综合网站| 欧美www在线| 国产精品500部| 奇米精品一区二区三区在线观看| 91沈先生在线观看| 午夜在线视频观看| 国产精品亲子伦对白| 日本a在线天堂| 成人性生活av| 日韩欧美国产不卡| 国产熟妇久久777777| 91精品蜜臀一区二区三区在线| 久久免费视频网| 艳妇乳肉豪妇荡乳av无码福利| 国产高清不卡一区| 日本成人黄色| 国产精品一区hongkong| 欧美最猛黑人xxxxx猛交| 久久久精品人妻一区二区三区| 亚洲精华一区二区三区| 欧美成人中文字幕| 国产日韩在线免费观看| 粉嫩绯色av一区二区在线观看| 欧美一区二区三区在线免费观看| 亚洲男同gay网站| 欧美网站大全在线观看| 国产大学生视频| 久久精品亚洲人成影院| 日本高清不卡在线| 亚洲免费黄色片| 中文字幕日本不卡| 国产视频一区二区视频| 琪琪久久久久日韩精品 | 91极品在线| 91福利小视频| 国产美女视频免费观看下载软件| 99久久婷婷国产综合精品电影√| 青青草原成人在线视频| 蜜臀久久精品久久久久| 亚洲人成网站影音先锋播放| 久久久久久久久久久福利| 911精品国产| 日韩视频免费中文字幕| 波多野结衣小视频| 26uuu亚洲综合色| 亚洲国产成人精品无码区99| 国产精品1区在线| 久久韩国免费视频| 中文字幕在线观看国产| 久久久精品人体av艺术| 欧美成人一区二区在线观看| 成人h动漫精品一区二区器材| 久久综合久久88| 国产裸体无遮挡| 国产精品福利一区二区三区| 日本xxxx黄色| 日韩欧美午夜| 国产精品中文字幕在线观看| 国产h视频在线观看| 色欧美片视频在线观看在线视频| 免费看黄色aaaaaa 片| 国产欧美一区二区三区国产幕精品| 99视频网站| 日韩av官网| 亚洲成年网站在线观看| 久青草视频在线观看| 粉嫩aⅴ一区二区三区四区 | av观看在线| 日韩美女视频在线| 国产一级特黄a高潮片| 成人激情文学综合网| 免费观看国产精品视频| 日韩av不卡一区| 青草成人免费视频| seseavlu视频在线| 欧美日韩国产三级| 18岁成人毛片| 粉嫩13p一区二区三区| 欧洲黄色一级视频| 国产亚洲一卡2卡3卡4卡新区| 国产精品91久久| 免费黄网站在线播放| 日韩午夜中文字幕| 日韩成人高清视频| 国产午夜精品一区二区三区嫩草| 亚洲36d大奶网| 亚洲激情中文在线| 国产视频一区二区不卡| 久久sese| 久久精品国产96久久久香蕉| 亚洲国产精品suv| 欧美性xxxx| 欧美激情精品久久久久久免费| 国产麻豆精品95视频| 奇米影视亚洲色图| 欧美日韩在线网站| av一区二区三区在线观看| 中文在线最新版地址| 中文字幕亚洲欧美日韩在线不卡| 国产精品自偷自拍| 欧美日韩国产精品一区二区不卡中文| 久久午夜福利电影| 国产精品一区在线| 凹凸日日摸日日碰夜夜爽1| 围产精品久久久久久久| 国产综合第一页| 欧美91在线|欧美| 国外成人免费在线播放| 18免费在线视频| 精品伦理精品一区| 国产亚洲久一区二区| 亚洲国产精品欧美一二99| 色一情一交一乱一区二区三区| 国产剧情av麻豆香蕉精品| 欧美色图另类小说| 欧美一区二区三区久久精品| 欧美高清视频一区二区三区在线观看| 懂色av色香蕉一区二区蜜桃| 欧美一级在线亚洲天堂| 呦呦在线视频| 最近中文字幕日韩精品| 四虎在线视频免费观看| 欧美一级搡bbbb搡bbbb| 国产精华7777777| 亚洲国产欧美另类丝袜| frxxee中国xxx麻豆hd| 久久久久久久久岛国免费| 男生和女生一起差差差视频| 日韩电影在线观看网站| 国产免费黄色一级片| 亚洲有吗中文字幕| 色噜噜色狠狠狠狠狠综合色一| 加勒比久久高清| 亚洲mm色国产网站| 日本一区二区中文字幕| 欧美亚洲视频一区二区| 美女网站视频在线| 欧美大胆在线视频| 免费大片黄在线观看视频网站| 亚洲美女av黄| 天天操天天干天天爽| 日韩欧美www| 国产精品久久久久久久久久久久久久久久久久| 福利二区91精品bt7086| 国产无遮挡免费视频| 亚洲精品视频在线| 国产成人免费在线观看视频| 国产亚洲综合色| 国产激情在线免费观看| 99久久久无码国产精品| 中文字幕天堂av| 国产激情精品久久久第一区二区 | 亚洲三级电影| 国产精品视频xxx| 日本免费久久| 国产99在线|中文| 免费日韩电影| 国产不卡av在线免费观看| 国偷自产一区二区免费视频| 555www成人网| 视频二区不卡| 国产精品r级在线| av成人在线播放| 国产欧美日韩亚洲精品| 欧美特黄色片| 91欧美日韩一区| 日本精品国产| 国产伦精品一区二区三区视频免费 | 久久久精品成人| 国产精品久久久久影院老司| 中国1级黄色片| 亚洲图片你懂的| 欧美爱爱小视频| 午夜欧美大尺度福利影院在线看| 国产无遮挡免费视频| 欧美日韩亚洲精品内裤| 成人av网站在线播放| 欧美日韩久久一区| 邪恶网站在线观看| 国产乱码久久久久| 99热这里只有成人精品国产| r级无码视频在线观看| 一区二区三区成人精品| 免费av网址在线| 免费看精品久久片| 国产91在线免费观看| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩性生活| 精品乱子伦一区二区| 亚洲成人av资源网| 国产毛片av在线| 久久这里有精品视频| 大桥未久在线视频| 国产91久久婷婷一区二区| 久久久久黄色| 国产乱码一区| 成人6969www免费视频| 91精品国产吴梦梦| 亚洲一区二区三区四区五区午夜| 日本激情综合网| 成人久久视频在线观看| 波多野结衣a v在线| 亚洲另类在线视频| 日本中文在线播放| 欧美精品在线观看播放| 人妻中文字幕一区| 综合欧美国产视频二区| 伦理av在线| 国产精品日韩专区| 国产成人tv| 亚洲精品一卡二卡三卡四卡| 欧美日本一区| 男女污污的视频| 成人精品国产一区二区4080| 日韩欧美视频免费观看| 天天综合日日夜夜精品| 国产男男gay网站| 亚洲一区二区精品| caoporn视频在线| 国产在线精品一区免费香蕉 | 久久免费少妇高潮99精品| 在线欧美日韩国产| 日本免费网站在线观看| 日韩小视频在线| 成人av免费电影网站| 成人动漫视频在线观看完整版| 精品成人影院| 国产网站免费在线观看| 国产精品一卡二| 任你操精品视频| 色欧美日韩亚洲| 亚洲三区在线观看无套内射| 欧美成人激情在线| 欧美极品在线| 水蜜桃一区二区三区| 久久av一区二区三区| 在线免费看黄色片| 亚洲一区二区三区视频在线播放| 一级做a爱片性色毛片| 亚洲欧美国产一本综合首页| 免费电影网站在线视频观看福利| 国产综合久久久久| 精品国产一区二区三区久久久樱花| 成人毛片一区二区| 国产91丝袜在线播放| www青青草原| 91精品国产色综合久久| 日本最黄一级片免费在线| 国产精品久久视频| 欧美日韩精品一区二区视频| 北条麻妃视频在线| 国产无人区一区二区三区| 波多野结衣一区二区在线| 日韩精品小视频| 人人草在线视频| 久久国产精品高清| 国产美女一区| 性欧美13一14内谢| 色哟哟精品一区| 黄色小视频在线观看| 日本免费久久高清视频| 免费电影一区二区三区| 免费观看精品视频| 久久综合久久综合九色| 亚洲 日本 欧美 中文幕| 亚洲人成电影网站色…| 91大神在线观看线路一区| 日韩国产欧美一区| 久久99精品久久久久| 天天操夜夜操av| 日韩欧美黄色影院| xxx.xxx欧美| 明星裸体视频一区二区| 青青国产91久久久久久| 国产日产在线观看| 精品免费日韩av| 忘忧草在线影院两性视频| 秋霞毛片久久久久久久久| 日本成人在线视频网站| 国产精品视频一区二区在线观看 | 亚洲女同志亚洲女同女播放| 久久久久久久电影一区| 日韩av资源网| 在线免费视频a| 亚洲少妇30p| 欧美一级特黄aaaaaa大片在线观看| 91国产视频在线| 精品色999| 日本一区二区三区在线免费观看| 亚洲一二三四久久| 国产乱子伦三级在线播放| 91精品久久久久| 一区久久精品| 懂色av粉嫩av浪潮av| 日韩一区二区免费视频| 欧美13videosex性极品| 一区二区成人国产精品| 成人免费观看视频| 国产九色91回来了| 欧美激情亚洲自拍| 精品一级毛片| 久久久男人的天堂| 欧美中文字幕一区二区三区| 在线观看男女av免费网址| 九九九九久久久久| 狠狠色丁香婷综合久久| 天堂在线免费观看视频| 精品国产一区av| 小说区图片区色综合区| 在线观看免费视频污| 欧美天堂在线观看| 色呦呦视频在线观看| 日韩av大全| 不卡的电视剧免费网站有什么| 亚洲一区二区视频在线播放|