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

聊聊并發-分布式鎖質量保障

開發 架構
事前保障的階段發生在技術評審階段,在此階段,我們需要評估出當前業務場景下是否存在并發風險;如果存在,確定我們的技術選型。

一、背景

并發問題是電商系統最常見的問題之一,例如庫存超賣、抽獎多發、券多發放、積分多發少發等場景;之所以會出現上述問題,是因為存在多機器多請求同時對同一個共享資源進行修改,如果不加以限制,將導致數據錯亂和數據不一致性;解決并發問題的方式有很多,例如:隊列、異步、響應式、鎖都可以;由于當前互聯網都是分布式系統,因此本文只針對使用較為廣泛的分布式鎖的方式來進行敘述如何進行質量保障。

二、分布式鎖介紹

1.什么是分布式鎖

先了解一下什么是鎖,在單機系統中,多個線程同時改變一個變量時,需要對變量或者代碼塊做同步從而保證串行修改變量,該同步實質上就是通過鎖來實現。為了實現多個線程在同一個時刻針對同一塊代碼串行執行,就需要在某個地方做個標記,該標記必須每個線程都能看到,當標記不存在時可以設置該標記,其余后續線程發現已經有標記了則等待擁有標記的線程結束同步代碼塊取消標記后再去嘗試設置標記,此標記可以理解為鎖。分布式鎖就是在多機系統下的該標記。

2.實現分布式鎖的主流方式

目前分布式鎖的實現方式有3種主流方法,即:

  • 基于數據庫實現分布式鎖,此處的數據庫指的是MySQL關系型數據庫

基于MySQL鎖表

數據庫版本號樂觀鎖

  • 基于緩存實現分布式鎖,此處的緩存指的是Redis
  • 基于zookeeper/etcd實現分布式鎖

具體的關于鎖的實現方式,已經有太多的文章進行介紹,本文就不再贅述。

三、質量保障

并發問題一旦涉及到錢,通常都會導致不同程度的資損,而且在我們的功能測試中是很難發現,因此對于并發的質量保障顯得尤為的重要,可以抽象為3層來保障:事前、事中、事后三大步驟;事前保障通過Review 方式提前規避技術上的風險,事中保障驗證在技術實現過程中是否存在漏洞,事后保障校驗數據是否符合預期,對于有并發風險的項目上述三個步驟的保障缺一不可。

1.事前質量保障

事前保障的階段發生在技術評審階段,在此階段,我們需要評估出當前業務場景下是否存在并發風險;如果存在,確定我們的技術選型。

評估并發風險

評估并發風險的關鍵點在于是否存在多個進程同時訪問共享資源,簡單來說是否存在多個進程在同一時間對同一個數據進行更新的操作;例如:電商中的庫存,多人同時購買同一個商品,也就是會存在同一時間對同一個商品的庫存進行更新,此處就存在并發風險。

技術選型

要做到正確的技術選型,我們就需要對上述3種方式實現的鎖的優缺點以及應用場景需要進行了解。

實現方式

優點

缺點

應用場景

MySQL數據庫表

易于理解/易于實現

容易出現單點故障、死鎖性能低/可靠性低

適用于并發量低、性能要求低的場景

Redis分布式鎖

性能高/易于實現可跨集群部署,無單點故障

鎖失效時間的控制不穩定穩定性低于ZooKeeper

適用于高并發、高性能場景

ZooKeeper分布式鎖

無單點故障/可靠性高不可重入/無死鎖問題

實現復雜性能低于緩存分布式鎖

適用于大部分分布式場景,除對性能要求極高的場景

MySQL數據庫表的樂觀鎖適用于讀多寫少的場景且共享資源為數據庫的單行數據;MySQL表鎖實現的鎖一般都不推薦使用;ZooKeeper分布式鎖雖然適用于大部分分布式場景,但是由于其實現復雜度相對較高以及需要額外引入中間件,在大部分業務場景中的應用比較少,而基于Redis的緩存分布式鎖應用較為廣泛;但是具體業務實現采用哪種類型的分布式鎖,還是需要基于當前的業務特性來進行決定;

在技術評審階段,一方面我們要評估出是否存在并發風險,另外一方面,我們需要識別開發同學在技術的實現上可能存在的漏洞,針對分布式鎖的實現漏洞可參考下文的CodeReview的關注點。

2.事中保障

CodeReview

1)Redis緩存分布式鎖

Redis通??梢允褂胹etnx(key,value)函數來實現分布式鎖。key和value就是基于緩存的分布式鎖的兩個屬性,其中key表示鎖id。setnx函數返回1表示獲得鎖,返回0表示其他服務器已經獲得了鎖;

  • Redis緩存分布式鎖CodeReview注意點

1))Redis Key

  • 全面梳理業務場景,對于同一共同資源,key要保持一致;
  • key是識別共享資源的唯一鍵,key的設計既需要能夠鎖住當前共享資源又不能影響到其他資源;

例如:商品庫存,我們的key應該是具體到某個商品,而不是所有商品,鎖住A商品,不會影響B商品。

2))鎖釋放

  • 鎖一定需明確釋放,try/finally 結構加鎖解鎖,finally內釋放鎖;
  • 鎖只能被加鎖的對象釋放,此處是經常出問題的點,如下圖所示,A加鎖被B釋放鎖,導致鎖失效,鎖被C搶占到;

針對上述問題,釋放鎖時需要先讀取當前key的value,再和傳入的value進行比較;上述是兩個步驟一定要保證原子性,如果原生Redis可采用lua腳本保證原子性;如果tair,可采取TairString的cad方法;value必須是一個唯一值,唯一標記是當前對象加的鎖。

3))鎖超時

  • 一定要設置key的超時時間;例如:客戶端A 搶到鎖后,系統突然異常,A就無法釋放鎖,變成死鎖;設置超時時間就是為了防止此種情況發生,在時間到期后,自動刪除key,間接釋放鎖;
  • 超時時間的設置一般來講大于服務的最大執行時間即可,但是服務最大的執行時間會受很多因素影響,是不可控的;例如:A服務一般執行時間是30ms,設置的鎖超時時間為100ms,受網絡影響服務執行時間變成了200ms,在100ms的時候鎖就會被釋放了;在大部分場景下,開發不會處理此種情況,此種極端情況是否需要處理,需要進行協商;處理方式如下2種:

可以再開啟一個線程,為當前超時時間續時,但增加了系統的復雜度;

將過期時間設置非常長,一定能保證邏輯在鎖釋放之前能夠執行完成;此方案簡單但是有缺陷,當遇到系統突發異常時,鎖無法被釋放,只能等待redis key超時,而超時時間又設置的較長,因此在當前時間內誰都無法獲取到鎖,阻斷業務執行,很有可能造成故障;

4))鎖粒度

如果針對某個共享資源的寫是基于另外一個共享資源的值計算而來,那么鎖的范圍必須包含讀共享資源;范圍不包含讀共享資源會導致臟讀,最終導致數據的錯誤,如下圖所示,Client B最終計算的B的結果就是錯誤的。

5))獲取鎖失敗

由于其他線程已經獲取到了鎖,當前線程獲取鎖失敗后有3種處理方式:異常拋出讓用戶重試;通過自旋再次進行搶鎖;發布訂閱,訂閱鎖釋放消息;在并發度低的場景下異常拋出以及自旋搶鎖都可以,在高并發場景下異常拋出和自旋搶鎖都不可取。

2)MySQL數據庫鎖CR點

  • 數據庫版本號樂觀鎖

在數據庫的表中需要包含一個數字類型的字段version,讀取數據時把version字段讀出來,更新數據時判斷當前version是否等于讀取出來的version,并對當前version+1;如果等于就更新成功,不等于表示數據已過期更新失敗。例如以積分體系為例,存在多種場景增加積分,通過樂觀鎖來保證數據的正確性。

樂觀鎖CR注意點:

where 條件一定要命中索引(最好是主鍵或者唯一索引),否則會鎖表;where 條件一定要命中索引(最好是主鍵或者唯一索引),否則會鎖表;

update table set 中必須要包含version = version + 1;

update 返回結果為0時,一定要根據業務場景進行相應的處理,自主重試或者拋異常;

  • 基于MySQL鎖表

其實現原理是:創建一張鎖表,對臨界資源做唯一性約束,通過增加一條記錄對某一資源上鎖,釋放鎖時刪除記錄;一般不推薦此種用法。

并發測試

并發測試總體上可以分為3大類:

  • 復雜的并發場景,一次請求共享資源存在多個,且前后存在各種依賴關系,此種場景適合于鏈路級別壓測,壓測模型需要精心設計。
  • 單一并發場景,一個共享資源,可以處理多次,例如:扣除某個商品的庫存,可以反復調用。

可以通過接口壓測的方式進行測試,通過查看最終數據是否會存在與預期不一致情況即可;

壓測工具:jmeter 即可進行壓測(集團可直接采用pas-server進行壓測,方便快捷);

  • 單一并發場景,一個共享資源,且只能處理1次,例如:用戶只有一次抽獎機會,連續點2次會不會抽2次;

可以利用JVM的并發函數CountDownLatch,CyclicBarrier等,CountDownLatch片段代碼:

public void invokeAllTask(ConcurrencyRequest request, Runnable task) {
final CountDownLatch startCountDownLatch = new CountDownLatch(1);
final CountDownLatch endCountDownLatch = new CountDownLatch(request.getConcurrency());
for (int i = 0; i < request.getConcurrency(); i++) {
Thread t = new Thread(() -> {
try {
startCountDownLatch.await();
try {
task.run();
} finally {
endCountDownLatch.countDown();
}
} catch (Exception ex) {
log.error("異常", ex);
}
});
t.start();
}
startCountDownLatch.countDown();
try {
endCountDownLatch.await();
} catch (InterruptedException ex) {
log.error("線程異常中斷", ex);
}
}

利用jmeter的定時器 Synchronizing Timer也可以實現此功能。

3.事后保障

數據對賬

數據對賬(數據一致性校驗)是我們在系統上線后對并發問題的最后一道防線,通過對賬來識別我們的數據的不一致性問題;壓測有成本,且受技巧熟練度和壓測設計的影響,不一定能暴露問題;如果被測場景評估并發問題的發生概率極低,即使發生了影響也比較小,此時review+對賬方式也不失為一種好的選擇;

如何進行對賬,不同的業務場景有不同的對賬方法,例如:

  • 互動積分體系每個用戶的扣除以及增加積分都會落流水表;每個用戶目前有多少積分都會放在積分表;只需要把流水表的積分加總和積分表的積分進行對賬;
  • 互動任務體系,一筆訂單只能推進一個任務,對賬只需要檢查任務記錄中一筆訂單是否存在多條記錄;
select count(*)  as task_count,
scene_code,
order_id
from task_record
where unique_id is not null
group by scene_code,
order_id
having count(*)> 1

四、總結

作為質量保障同學一定要時刻繃著一根弦,當前場景下是否會存在并發問題;并發問題的識別簡單而言就是是否存在同時更新同一個數據,如果是就一定要注意開發同學是否處理了并發,并發的實現主要是上面闡述的幾種,然后按照場景進行分析即可;關于并發場景的質量保障,大體原則可以概括為如下:

  • 梳理并發場景
  • 帶著注意點CR 代碼
  • 并發測試(非銀彈,不是所有場景都具備可測性)
  • 監控對賬進行兜底識別并發問題
責任編輯:武曉燕 來源: 阿里技術
相關推薦

2022-03-11 10:03:40

分布式鎖并發

2022-04-08 08:27:08

分布式鎖系統

2021-09-17 07:51:24

RedissonRedis分布式

2019-06-19 15:40:06

分布式鎖RedisJava

2024-07-15 08:25:07

2021-09-26 09:16:45

RedisGeo 類型數據類型

2024-05-06 00:00:00

.NET分布式鎖技術

2023-02-10 00:04:53

2022-06-13 10:01:36

Apollo攜程框架

2025-03-06 11:30:15

2025-05-07 02:15:00

分布式鎖高并發UUID鎖

2018-07-17 08:14:22

分布式分布式鎖方位

2021-07-16 07:57:34

ZooKeeperCurator源碼

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2022-08-04 08:45:50

Redisson分布式鎖工具

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2021-07-10 10:02:30

ZooKeeperCurator并發

2017-12-20 16:15:30

分布式系統架構

2022-01-17 09:18:28

JMeter分布式壓測
點贊
收藏

51CTO技術棧公眾號

亚洲国产激情一区二区三区| 欧美日本久久| 蜜桃av一区二区在线观看| 欧美一区二区三区视频在线观看| 久久久亚洲国产天美传媒修理工| 精品久久久久av| 亚洲国产精品二区| 日韩国产综合| 色综合天天狠狠| 国产精品v欧美精品∨日韩| 2014亚洲天堂| 午夜精品久久久久久久久久蜜桃| 成人网男人的天堂| 大胆人体色综合| 国产精品自拍视频在线| 国产人成在线视频| 久久动漫网址| 一区二区三区精密机械公司| 成人午夜在线视频一区| 国产精品久久国产精麻豆96堂| 亚洲最大网站| 91在线观看地址| 久久久久久久电影一区| 黄色片子免费看| 黄视频网站在线| 久久99久久精品| 中文字幕日韩有码| 欧美大尺度做爰床戏| 成在在线免费视频| 人妖欧美一区二区| 亚洲一二三在线| 性欧美极品xxxx欧美一区二区| 欧美美乳在线| 视频一区二区三区在线| 国产一区二区三区精品久久久| www.桃色.com| 污污网站在线看| 国产91精品一区二区麻豆网站 | 91免费版看片| 一级黄色片网站| 日韩精品免费| 日韩国产高清污视频在线观看| 老太脱裤子让老头玩xxxxx| 黑人精品一区二区| 国产精品日韩精品欧美精品| 亚洲免费一在线| 日本在线观看免费视频| 黄色污网站在线观看| 久久亚洲精精品中文字幕早川悠里| 69久久夜色精品国产69| 国产伦理片在线观看| 麻豆精品蜜桃| 成人免费小视频| 99电影网电视剧在线观看| 日本少妇性高潮| 精品在线91| 欧美日韩成人综合天天影院| 国产91视频一区| 三级在线电影| 精品一区二区三区免费毛片爱| 欧美综合一区第一页| 欧美a级片免费看| 成人中文在线| 日韩欧美电影在线| 国产女女做受ⅹxx高潮| 免费超碰在线| 97久久精品人人爽人人爽蜜臀| 97在线中文字幕| 国产精品免费精品一区| 久久精品亚洲人成影院| 日韩国产激情在线| 国产精品探花一区二区在线观看| 成人亚洲综合| 亚洲成av人综合在线观看| 日韩电影天堂视频一区二区| 亚洲精品97久久中文字幕| 国产精品自在在线| 国产精品免费久久久久久| 久久久久久久久久一区二区三区| 国产探花一区| 亚洲白拍色综合图区| 黑森林精品导航| 国产精品无码久久久久| 天天射综合影视| 18视频在线观看娇喘| 日韩欧美在线观看一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 91免费福利视频| 日日夜夜狠狠操| 激情综合中文娱乐网| 中文字幕亚洲欧美| 成人涩涩小片视频日本| 欧美男同视频网| 在线看欧美日韩| 无码人妻精品一区二区三区温州| 亚洲品质自拍| 亚洲高清免费观看高清完整版| 日本高清一区二区视频| 日韩一区二区三区免费| 福利视频一区二区| 久久亚洲国产成人精品无码区| 91精彩视频在线观看| 91蜜桃网址入口| 亚洲成人蜜桃| 欧美人动性xxxxz0oz| 日韩毛片一二三区| 国产一二三在线视频| 性xxxfreexxxx性欧美| 婷婷综合另类小说色区| 欧美日韩亚洲自拍| 超碰精品在线| 欧美成人三级电影在线| www.偷拍.com| 国产精品一在线观看| 欧美乱大交xxxxx| 久久国产波多野结衣| 99精品热6080yy久久| 久久久亚洲国产| 在线免费看av的网站| 蜜桃视频在线一区| 国产欧美日韩伦理| 日日夜夜精品免费| 91免费版在线| 污污污污污污www网站免费| 9999在线视频| 亚洲一区自拍偷拍| 亚洲 自拍 另类小说综合图区| 国模雨婷捆绑高清在线| 婷婷成人综合网| 精品国产乱码久久久久久1区二区| 啪啪国产精品| 亚洲人成亚洲人成在线观看| 先锋影音av在线| 伊人影院久久| 91天堂在线视频| 黄色电影免费在线看| 国产农村妇女精品| 午夜啪啪免费视频| 欧美一卡二卡| 欧美精三区欧美精三区 | 美美哒免费高清在线观看视频一区二区| 欧洲一区二区视频| 乱色精品无码一区二区国产盗| 中文字幕一区二区三区四区 | 国产a级全部精品| 免费污污视频在线观看| 成人99免费视频| 久久综合给合久久狠狠色| 韩国三级在线观看久| 五月婷婷另类国产| 美女黄色一级视频| 精品国产乱码久久久久久1区2匹| 中文字幕日韩综合av| 亚洲GV成人无码久久精品| av中文一区二区三区| 日本一区二区三区四区在线观看| 免费**毛片在线| 欧美日韩在线不卡| 99免费观看视频| 免费成人网www| 57pao国产精品一区| 91精品在线视频观看| 中文无字幕一区二区三区 | 国产综合婷婷| 日本午夜人人精品| 色视频精品视频在线观看| 高跟丝袜一区二区三区| 野外性满足hd| 91超碰成人| 97超级碰碰| 丰满大乳少妇在线观看网站 | www.色就是色.com| 午夜精品一区二区三区国产| 91九色视频在线| 欧美人与禽猛交乱配| 日韩成人网免费视频| 天堂网中文字幕| 中文字幕精品综合| 精品国产鲁一鲁一区二区三区| 欧美三级黄美女| 国产一区二区三区无遮挡| 91av亚洲| 日韩亚洲欧美成人| 69视频免费在线观看| 国产真实精品久久二三区| 欧美一区1区三区3区公司| 日本肉肉一区| 久久综合免费视频| 无码国产伦一区二区三区视频 | 国产精品免费一区二区三区| av一本在线| 91精品国产综合久久久蜜臀粉嫩 | 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 澳门久久精品| 日韩免费av一区二区| 中文字幕在线视频区| 精品欧美黑人一区二区三区| 午夜精品久久久久久久久久久久久蜜桃| 美女视频一区二区| 青青草综合视频| 亚洲三级网页| 成人自拍性视频| 亚洲啊v在线| 亚洲第一中文字幕在线观看| 亚洲午夜18毛片在线看| 亚洲欧洲av在线| 99re久久精品国产| 亚洲欧洲午夜| 国产精品我不卡| 成人免费一区| 久久久久一本一区二区青青蜜月| 国产高清在线观看| 精品免费日韩av| 中文字幕日韩经典| 欧美国产1区2区| 性活交片大全免费看| 青青草国产成人99久久| 99热亚洲精品| 国产精品久久久久久麻豆一区软件 | 亚洲911精品成人18网站| 香蕉综合视频| 日本一区二区三区精品视频| 97se亚洲| 91日本视频在线| 精品3atv在线视频| 91成人国产在线观看| 亚洲91av| 久久精品亚洲一区| 超碰在线人人干| 亚洲伊人色欲综合网| 五月激情四射婷婷| 国产乱码一区二区三区| 亚洲男人天堂色| 欧美激情国产在线| 亚洲伊人久久大香线蕉av| 污网站在线免费看| 日韩中文在线视频| www.热久久| 欧美福利电影网| 波多野结衣黄色| 综合中文字幕亚洲| 欧洲美一区二区三区亚洲| 毛片av一区二区| 丁香啪啪综合成人亚洲| 99热在线精品观看| 精品国产一区二区三区无码| 亚洲高清资源在线观看| 中文字幕99| 51vv免费精品视频一区二区| 98精品在线视频| 三级福利片在线观看| 欧美另类高清videos| 26uuu亚洲电影在线观看| 亚洲第一在线视频| 黄色片一区二区三区| 日韩精品一区二区三区老鸭窝| 国产麻豆一精品一男同| 五月天丁香久久| 日韩精品国产一区二区| 亚洲3atv精品一区二区三区| 国产精品23p| 国产精品美女久久久久久久久久久 | 狠狠综合久久av一区二区老牛| 中文字幕在线中文| 亚洲视频高清| 日韩国产一级片| 国产亚洲高清视频| caopor在线视频| 免费av成人在线| 911av视频| 懂色av一区二区夜夜嗨| 伦理片一区二区| 91网站黄www| 亚洲第一综合网| 国产精品久久久99| 麻豆一区产品精品蜜桃的特点 | 欧美全黄视频| 日本中文字幕一级片| 一本色道88久久加勒比精品| 能在线观看的av网站| 国产小视频免费在线观看| 日日狠狠久久偷偷综合色| 欧美精品免费播放| 视频在线不卡| 日韩欧美中文字幕一区| 国产免费www| 欧美精选一区二区| 亚洲精品一区二区三区蜜桃 | 高清一区二区三区日本久| 9765激情中文在线| 日韩免费在线免费观看| 91精品一区| 日韩免费不卡av| 免费一区二区三区四区| 动漫一区二区在线| 久久99青青| 一区二区三区四区免费观看| 亚洲美女啪啪| 亚欧美在线观看| 国产成人h网站| 国产视频三区四区| 一区二区三区免费在线观看| 欧美一区二区三区不卡视频| 日韩欧美亚洲国产另类 | 亚洲电影二区| 国产精品成人av性教育| 英国三级经典在线观看| 国产在线观看不卡| 国产精品原创视频| 动漫美女被爆操久久久| 水蜜桃久久夜色精品一区| 五十路熟女丰满大屁股| 久久99深爱久久99精品| 大黑人交xxx极品hd| 亚洲另类中文字| 九九视频在线观看| 欧美午夜一区二区三区免费大片| 国产99免费视频| 欧美成人综合网站| 大胆av不用播放器在线播放| 97久久久久久| 色综合桃花网| 琪琪第一精品导航| 日韩免费精品| 成人欧美视频在线| 久久国产小视频| 国产美女三级视频| 成人国产精品免费观看| 婷婷激情四射网| 欧美亚洲国产一区在线观看网站 | 日本成人三级电影| 国产精品一区二区欧美| 中文精品电影| 日本一本中文字幕| 紧缚奴在线一区二区三区| 香蕉视频xxxx| 国产精品美女久久久久aⅴ| 成人免费毛片男人用品| 亚洲精品v天堂中文字幕| 女人天堂在线| 97在线视频一区| 牛牛精品成人免费视频| www.亚洲成人网| 国产精品1区二区.| 无码成人精品区在线观看| 亚洲乱码国产乱码精品精的特点| 国产精品系列视频| 亚洲成人免费网站| 蜜桃成人365av| av电影成人| 欧美日韩三区| 欧美久久久久久久久久久| 一区二区在线电影| 久久国产视频一区| 精品偷拍各种wc美女嘘嘘| 黄色免费在线网站| 成人免费在线视频网址| 亚洲电影在线一区二区三区| 亚洲一区二区偷拍| 亚洲资源在线观看| 人妻va精品va欧美va| 色综久久综合桃花网| 成人国产一区| 夜夜爽www精品| 亚洲区国产区| 亚洲欧美在线不卡| 欧美性色视频在线| www夜片内射视频日韩精品成人| 欧美大奶子在线| 精品国产乱子伦一区二区| 免费黄色日本网站| 国产高清不卡一区| 国产系列精品av| 亚洲欧洲一区二区三区在线观看| 亚洲人免费短视频| 国产福利片一区二区| 粉嫩一区二区三区在线看| 国产99久久久| 色噜噜久久综合伊人一本| 日本成人手机在线| 日韩免费一级视频| 国产91在线观看| 99热只有这里有精品| 深夜福利一区二区| 99国产精品免费网站| 欧美女人性生活视频| 中文字幕一区二区三区四区| 成人午夜精品福利免费| 日本高清久久天堂| 亚洲字幕久久| 手机在线成人av| 一区二区三区中文在线观看| 天堂中文在线8| 国产欧洲精品视频| 国产精品日韩| 日本爱爱小视频| 亚洲精品美女在线观看播放| 福利一区视频| 日韩xxxx视频| 国产精品久久久久四虎|