欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?-創新互聯

本文主要會關注的問題是“分布式鎖”的問題。

專注于為中小企業提供網站建設、做網站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業東營免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了近1000家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

多線程情況下對共享資源的操作需要加鎖,避免數據被寫亂,在分布式系統中,這個問題也是存在的,此時就需要一個分布式鎖服務。

常見的分布式鎖實現一般是基于DB、Redis、Zookeeper。下面筆者會按照順序分析下這3種分布式鎖的設計與實現,想直接看分布式鎖總結的小伙伴可直接翻到文檔末尾處。

分布式鎖的實現由多種方式,但是不管怎樣,分布式鎖一般要有以下特點:

排他性: 任意時刻,只能有一個client能獲取到鎖;

容錯性: 分布式鎖服務一般要滿足AP,也就是說,只要分布式鎖服務集群節點大部分存活,client就可以進行加鎖解鎖操作;

避免死鎖: 分布式鎖一定能得到釋放,即使client在釋放之前崩潰或者網絡不可達。

除了以上特點之外,分布式鎖最好也能滿足可重入、高性能、阻塞鎖特性(AQS這種,能夠及時從阻塞狀態喚醒)等,下面就話不多說,趕緊上(開往分布式鎖的設計與實現的)車。

一、DB鎖

在數據庫新建一張表用于控制并發控制,表結構可以如下所示:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

key_id作為分布式key用來并發控制,memo可用來記錄一些操作內容(比如memo可用來支持重入特性,標記下當前加鎖的client和加鎖次數)。將key_id設置為唯一索引,保證了針對同一個key_id只有一個加鎖(數據插入)能成功。此時lock和unlock偽代碼如下:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

注意,偽代碼中的lock操作是非阻塞鎖,也就是tryLock,如果想實現阻塞(或者阻塞超時)加鎖,只修反復執行lock偽代碼直到加鎖成功為止即可。

基于DB的分布式鎖其實有一個問題,那就是如果加鎖成功后,client端宕機或者由于網絡原因導致沒有解鎖,那么其他client就無法對該key_id進行加鎖并且無法釋放了。為了能夠讓鎖失效,需要在應用層加上定時任務,去刪除過期還未解鎖的記錄,比如刪除2分鐘前未解鎖的偽代碼如下:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

因為單實例DB的TPS一般為幾百,所以基于DB的分布式性能上限一般也是1k以下,一般在并發量不大的場景下該分布式鎖是滿足需求的,不會出現性能問題。

不過DB作為分布式鎖服務需要考慮單點問題,對于分布式系統來說是不允許出現單點的,一般通過數據庫的同步復制,以及使用vip切換Master就能解決這個問題。

以上DB分布式鎖是通過insert來實現的,如果加鎖的數據已經在數據庫中存在,那么用select xxx where key_id = xxx for udpate方式來做也是可以的。

二、Redis鎖

Redis鎖是通過以下命令對資源進行加鎖:

set key_id key_value NX PX expireTime

其中,set nx命令只會在key不存在時給key進行賦值,px用來設置key過期時間,key_value一般是隨機值,用來保證釋放鎖的安全性(釋放時會判斷是否是之前設置過的隨機值,只有是才釋放鎖)。由于資源設置了過期時間,一定時間后鎖會自動釋放。

set nx保證并發加鎖時只有一個client能設置成功(Redis內部是單線程,并且數據存在內存中,也就是說Redis內部執行命令是不會有多線程同步問題的),此時的lock/unlock偽代碼如下:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

分布式鎖服務中的一個問題

如果一個獲取到鎖的client因為某種原因導致沒能及時釋放鎖,并且Redis因為超時釋放了鎖,另外一個client獲取到了鎖,此時情況如下圖所示:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

那么如何解決這個問題呢?

一種方案是引入鎖續約機制,也就是獲取鎖之后,釋放鎖之前,會定時進行鎖續約,比如以鎖超時時間的1/3為間隔周期進行鎖續約。

關于開源的Redis的分布式鎖實現有很多,比較出名的有redisson、百度的dlock,關于分布式鎖,筆者也寫了一個簡易版的分布式鎖Redis-lock,主要是增加了鎖續約和可同時針對多個key加鎖的機制。

對于高可用性,一般可以通過集群或者master-slave來解決,Redis鎖優勢是性能出色,劣勢就是由于數據在內存中,一旦緩存服務宕機,鎖數據就丟失了。

像Redis自帶復制功能,可以對數據可靠性有一定的保證,但是由于復制也是異步完成的,因此依然可能出現master節點寫入鎖數據而未同步到slave節點的時候宕機,鎖數據丟失問題。

三、Zookeeper分布式鎖

ZooKeeper是一個高可用的分布式協調服務,由雅虎創建,是Google Chubby的開源實現。

ZooKeeper提供了一項基本的服務:分布式鎖服務。想學習Java工程化、分布式架構、高并發、高性能、深入淺出、微服務架構、Spring,MyBatis,Netty源碼分析等技術可以加群:479499375,群里有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家,歡迎進群一起深入交流學習。

Zookeeper重要的3個特征是:zab協議、node存儲模型和watcher機制。通過zab協議保證數據一致性,Zookeeper集群部署保證可用性,node存儲在內存中,提高了數據操作性能,使用watcher機制,實現了通知機制(比如加鎖成功的client釋放鎖時可以通知到其他client)。

Zookeeper node模型支持臨時節點特性,即client寫入的數據時臨時數據,當客戶端宕機時臨時數據會被刪除,這樣就不需要給鎖增加超時釋放機制了。

當針對同一個path并發多個創建請求時,只有一個client能創建成功,這個特性用來實現分布式鎖。注意:如果client端沒有宕機,由于網絡原因導致Zookeeper服務與client心跳失敗,那么Zookeeper也會把臨時數據給刪除掉的,這時如果client還在操作共享數據,是有一定風險的。

基于Zookeeper實現分布式鎖,相對于基于Redis和DB的實現來說,使用上更容易,效率與穩定性較好。curator封裝了對Zookeeper的API操作,同時也封裝了一些高級特性,如:Cache事件監聽、選舉、分布式鎖、分布式計數器、分布式Barrier等,使用curator進行分布式加鎖示例如下:

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?

四、總結

從上面介紹的3種分布式鎖的設計與實現中,我們可以看出每種實現都有各自的特點,針對潛在的問題有不同的解決方案,歸納如下:

性能: Redis > Zookeeper > DB。

避免死鎖: DB通過應用層設置定時任務來刪除過期還未釋放的鎖,Redis通過設置超時時間來解決,而Zookeeper是通過臨時節點來解決。

可用性: DB可通過數據庫同步復制,vip切換master來解決;Redis可通過集群或者master-slave方式來解決;Zookeeper本身自己是通過zab協議集群部署來解決的。注意,DB和Redis的復制一般都是異步的,也就是說某些時刻分布式鎖發生故障可能存在數據不一致問題,而Zookeeper本身通過zab協議保證集群內(至少n/2+1個)節點數據一致性。

鎖喚醒: DB和Redis分布式鎖一般不支持喚醒機制(也可以通過應用層自己做輪詢檢測鎖是否空閑,空閑就喚醒內部加鎖線程),Zookeeper可通過本身的watcher/notify機制來做。

使用分布式鎖,安全性上和多線程(同一個進程內)加鎖是沒法比的,可能由于網絡原因,分布式鎖服務(因為超時或者認為client掛了)將加鎖資源給刪除了,如果client端繼續操作共享資源,此時是有隱患的。

因此,對于分布式鎖,一個是要盡量提高分布式鎖服務的可用性,另一個就是要部署同一內網,盡量降低網絡問題發生幾率。

這樣來看,貌似分布式鎖服務不是“完美”的(PS:技術貌似也不好做到十全十美 :( ),那么開發人員該如何選擇分布式鎖呢?最好是結合自己的業務實際場景,來選擇不同的分布式鎖實現,一般來說,基于Redis的分布式鎖服務應用較多。

網頁名稱:一文弄懂“分布式鎖”,一直以來你的選擇依據正確嗎?-創新互聯
標題鏈接:http://www.kartarina.com/article12/eoigc.html

成都網站建設公司_創新互聯,為您提供標簽優化商城網站網站內鏈電子商務建站公司響應式網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
国产精品伦理在线| 日韩一区二区中文字幕| 欧美无人高清视频在线观看| 丁香婷婷综合五月| 日韩欧美高清在线| 国产精品一区二区在线观看网站 | 国产成人av一区二区三区在线| 国产一区二区三区黄视频| 国产黑丝在线一区二区三区| 成人黄色在线网站| 亚洲欧美激情插| 欧美一级高清大全免费观看| 国产精品久久福利| 欧美三级日韩三级国产三级| 久久久久久亚洲综合影院红桃 | 日本一区二区三区四区| 一区二区三区四区五区视频在线观看| 色婷婷激情久久| 精品无码三级在线观看视频| 在线观看一区不卡| 久久99精品国产91久久来源| 成人h动漫精品一区二| 日韩三级精品电影久久久| 亚洲天堂久久久久久久| 蜜臀av国产精品久久久久| 亚洲一区二区三区爽爽爽爽爽| 国产河南妇女毛片精品久久久| 精品视频在线视频| 风间由美一区二区av101| 日韩欧美精品三级| 色婷婷综合久色| 国产真实乱对白精彩久久| 欧美一级理论片| 欧美影视一区在线| proumb性欧美在线观看| 中文字幕中文乱码欧美一区二区 | 91麻豆精品国产91久久久久久久久 | 丝袜脚交一区二区| 国产精品天干天干在观线| 国产精品中文字幕日韩精品| 91精品国产综合久久蜜臀| 天天免费综合色| 亚洲视频一二区| 国产免费成人在线视频| 福利一区二区在线观看| 久久精品一区八戒影视| 国产黑丝在线一区二区三区| 久久久精品tv| 亚洲精品一区二区三区蜜桃下载| 青青国产91久久久久久| 欧美一区在线视频| 制服丝袜亚洲精品中文字幕| 日本不卡视频在线| 亚洲一级电影视频| 91精品国产综合久久久久久| 久久国产剧场电影| 另类的小说在线视频另类成人小视频在线 | 成人免费毛片app| 激情国产一区二区| 激情亚洲综合在线| 成人免费视频一区| 91免费观看视频| 色老汉av一区二区三区| 日韩高清电影一区| 奇米一区二区三区| 精品一区二区三区欧美| 国产精品久久免费看| 欧美在线播放高清精品| 美腿丝袜在线亚洲一区| 国产日韩亚洲欧美综合| 一本久久a久久免费精品不卡| 亚洲在线视频网站| 久久色在线视频| 中文字幕精品一区二区精品绿巨人| 一本大道av伊人久久综合| 五月婷婷另类国产| 日本强好片久久久久久aaa| 国产亚洲制服色| 国产精品久久久久久久久久免费看| 欧美日韩成人一区二区| 国产suv一区二区三区88区| 亚洲精品福利视频网站| 欧美哺乳videos| 久久久久久久久一| 亚洲女人****多毛耸耸8| 欧美xxxx在线观看| 国产精品成人免费| 亚洲一卡二卡三卡四卡五卡| 中文字幕精品三区| 亚洲一区二区三区视频在线播放| 国产午夜精品一区二区| 欧美亚洲图片小说| 欧美成人欧美edvon| 欧美日韩中文一区| 久久久久久久久久久电影| 欧美精品123区| 国产精品福利影院| 麻豆成人av在线| 91片在线免费观看| 日韩女优毛片在线| 亚洲美女免费在线| 激情文学综合插| 91麻豆精品久久久久蜜臀 | 亚洲精品成人在线| 麻豆成人综合网| 欧美日韩综合一区| 亚洲乱码国产乱码精品精98午夜 | 色狠狠一区二区| 久久亚洲欧美国产精品乐播| 日韩欧美亚洲国产另类| 欧美老女人第四色| 中文字幕视频一区| 国产成人亚洲精品狼色在线| 国产乱子伦视频一区二区三区 | 成人国产精品免费网站| 蜜桃一区二区三区四区| 日韩不卡手机在线v区| 日日夜夜免费精品| 成人高清av在线| 国产欧美综合在线观看第十页| 久久影院午夜片一区| 久久午夜羞羞影院免费观看| 日韩精品专区在线影院观看| 欧美电影免费提供在线观看| 日韩精品最新网址| 日韩国产一区二| 欧美精品在线观看播放| 欧美一级一区二区| 午夜免费欧美电影| 欧美精选在线播放| 欧美激情综合在线| 国产成a人无v码亚洲福利| 国产乱码精品一区二区三区av| 亚洲国产乱码最新视频| 视频在线观看一区| 欧美日韩黄色影视| 日韩专区一卡二卡| 这里只有精品视频在线观看| 久久久久国产免费免费| 亚洲天天做日日做天天谢日日欢| 亚洲欧美一区二区三区孕妇| 亚洲国产一区二区视频| 久久精品国产色蜜蜜麻豆| 国产99久久久精品| 中文字幕一区二区在线观看| 午夜a成v人精品| 91麻豆精品国产91久久久资源速度| 久久综合久久99| 国产乱淫av一区二区三区| 欧美亚一区二区| 天天爽夜夜爽夜夜爽精品视频| 国产成人超碰人人澡人人澡| 欧美日韩国产电影| 久久97超碰色| 天堂在线一区二区| 欧美精品第1页| 乱一区二区av| 国产女主播视频一区二区| 欧美激情综合在线| 成人av免费在线| 一区二区三区日本| 日韩欧美久久一区| 91视频在线观看| 欧美aaaaa成人免费观看视频| 色综合网站在线| 日韩成人免费电影| 国产精品乱码久久久久久| 久久99热狠狠色一区二区| 色狠狠综合天天综合综合| 久久久综合精品| 一本大道av伊人久久综合| 久久久久久久综合日本| 午夜在线电影亚洲一区| 成人免费av网站| 亚洲国产成人精品视频| 成人性色生活片| 亚洲成人动漫精品| 国产精品网曝门| 欧美日韩精品二区第二页| 一区二区三区在线观看欧美| 国产91丝袜在线18| 视频一区欧美日韩| 中文字幕一区二区三区蜜月| 丁香天五香天堂综合| www成人在线观看| 在线观看欧美精品| 成人的网站免费观看| 国产精品无圣光一区二区| 韩日欧美一区二区三区| 欧美日韩国产中文| 亚洲一级片在线观看| 91免费视频大全| 国产美女在线观看一区| 欧美mv日韩mv国产网站app| 亚洲人成网站影音先锋播放| 国产91精品一区二区麻豆亚洲| 精品久久人人做人人爽| 看电视剧不卡顿的网站| 日韩欧美国产系列| 欧美性受xxxx黑人xyx性爽|