偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

分布式鎖上-初探

開發(fā) 架構(gòu)
現(xiàn)在的系統(tǒng)大多已演進為分布式的架構(gòu),如實例內(nèi)多線程要互斥使用臨界資源,分布式情況下多實例之間也存在需要排它的使用共享資源,這個問題就是分布式互斥問題。

1.分布式鎖產(chǎn)生的背景

開發(fā)人員很多時候會遇到在一個JVM實例內(nèi),多個線程要競爭使用具有排它性的共享資源,恰好JDK中提供了如synchronized 、  JUC包中的xxxLock 這些鎖工具,使用它們可以方便我們實現(xiàn)對臨界資源的互斥使用;使用鎖是一種顯式同步的方式,來控制線程間操作發(fā)生相對順序的機制,除此之外其實還有另外一種隱式同步方式,即消息傳遞,但大家似乎對顯式使用鎖的方式更為熟悉一些。

現(xiàn)在的系統(tǒng)大多已演進為分布式的架構(gòu),如實例內(nèi)多線程要互斥使用臨界資源,分布式情況下多實例之間也存在需要排它的使用共享資源,這個問題就是分布式互斥問題。雖然大佬Lamport 在論文 《Time, clocks, and the ordering of events in a distributed system》中早就證明了使用狀態(tài)機(如共識算法)就能夠去中心化解決多進程互斥問題,但我們還是會更偏向使用分布式鎖,原因大概有以下3點:

  • 使用分布式鎖服務(wù)更易于保持現(xiàn)有程序的結(jié)構(gòu)
  • 程序員更熟悉用加鎖的方式來同步訪問資源
  • 共識算法可能會要求客戶端運行在更多的服務(wù)器上以滿足共識算法要求,而實際只滿足客戶端功能性的需求卻不需要使用這么多服務(wù)器

概括來說,分布式鎖更輕便、更易用、也更節(jié)省資源。

2.使用分布式鎖的目的

使用分布式鎖的目的主要有兩種:

  • 效率(Efficiency):通過鎖來避免多次做重復的工作,計算重復的內(nèi)容等等。這種場景下即便偶然出現(xiàn)多個用戶同時持有鎖,并同時與資源服務(wù)發(fā)生交互,也是可以忍受的。
  • 正確性(Correctness):也就是“安全”,我們希望資源服務(wù)在鎖的保護下能夠做“正確”的事。更嚴謹?shù)恼f,我們希望任一時刻,只有一個用戶能夠訪問資源服務(wù),而且即便鎖在該用戶與資源服務(wù)交互的中途過期,也不至于破壞資源服務(wù)的一致性。

3.分布式鎖的功能特點

一個分布式鎖應具備這樣一些功能特點:

  • 互斥性:在同一時刻,只有一個客戶端能持有鎖
  • 安全性:避免死鎖,如果某個客戶端獲得鎖之后處理時間超過最大約定時間,或者持鎖期間發(fā)生了故障導致無法主動釋放鎖,其持有的鎖也能夠被其他機制正確釋放,并保證后續(xù)其它客戶端也能加鎖,整個處理流程繼續(xù)正常執(zhí)行。
  • 可用性:也被稱作容錯性,分布式鎖需要有高可用能力,避免單點故障,當提供鎖的服務(wù)節(jié)點故障(宕機)時不影響服務(wù)運行,這里有兩種模式:一種是分布式鎖服務(wù)自身具備集群模式,遇到故障能自動切換恢復工作;另一種是客戶端向多個獨立的鎖服務(wù)發(fā)起請求,當某個鎖服務(wù)故障時仍然可以從其他鎖服務(wù)讀取到鎖信息(Redlock)
  • 可重入性:對同一個鎖,加鎖和解鎖必須是同一個進程,即不能把其他進程持有的鎖給釋放了。
  • 高效靈活:加鎖、解鎖的速度要快;支持阻塞和非阻塞;支持公平鎖和非公平鎖。

4.多視角下的分布式鎖

通過不同視角,可以從多維度充分了解各種分布式鎖的實現(xiàn)差異

視角1:

  • 輪詢類:基于數(shù)據(jù)庫和基于 Redis 實現(xiàn)的分布式鎖,這類實現(xiàn)需要客戶端不停反復請求鎖服務(wù)以查看是否能夠獲取到鎖;
  • 監(jiān)聽類:基于 ZooKeeper 或 etcd 實現(xiàn)的分布式鎖,這類實現(xiàn)客戶端只需監(jiān)聽(watch) 某個 key,當鎖可用時鎖服務(wù)會通知客戶端,無需客戶端不停請求鎖服務(wù)。

視角2:

基于數(shù)據(jù)庫實現(xiàn)的分布式鎖:使用樂觀鎖、悲觀鎖或基于主鍵唯一約束來實現(xiàn)

基于分布式緩存實現(xiàn)分布式鎖:Redis 和基于 Redis 的 RedLock(Redisson)

基于分布式一致性算法實現(xiàn)的分布式鎖:ZooKeeper、 Etcd

視角3:

Martin Kleppmann 在個人博客中發(fā)了一篇文章 How to do distributed locking,其中涉及了大量對 Redlock 算法安全性的質(zhì)疑,Salvatore Sanfilippo(Redis 的創(chuàng)始人,也是這里 Redlock 算法的作者)隨后發(fā)表 Is Redlock safe? 回應這些質(zhì)疑;這兩位大佬的對決一定要圍觀。

本文轉(zhuǎn)載自微信公眾號「架構(gòu)染色」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系【架構(gòu)染色】公眾號作者。


責任編輯:武曉燕 來源: 架構(gòu)染色
相關(guān)推薦

2023-12-05 07:30:40

KlustronBa數(shù)據(jù)庫

2022-02-28 10:12:10

Redis分布式開發(fā)

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2019-06-19 15:40:06

分布式鎖RedisJava

2017-09-01 05:35:58

分布式計算存儲

2017-11-03 15:05:56

Storm數(shù)據(jù)處理服務(wù)器

2017-10-27 08:40:44

分布式存儲剪枝系統(tǒng)

2023-10-26 18:10:43

分布式并行技術(shù)系統(tǒng)

2018-07-17 08:14:22

分布式分布式鎖方位

2024-03-01 09:53:34

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2023-05-12 08:23:03

分布式系統(tǒng)網(wǎng)絡(luò)

2011-03-28 13:39:45

nagios分布式

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2023-02-11 00:04:17

分布式系統(tǒng)安全

2022-06-21 08:27:22

Seata分布式事務(wù)

2021-11-08 10:52:02

數(shù)據(jù)庫分布式技術(shù)

2024-01-10 08:02:03

分布式技術(shù)令牌,

2022-03-29 23:17:52

PostgreSQL集群Citus
點贊
收藏

51CTO技術(shù)棧公眾號