[導(dǎo)讀]隨著互聯(lián)網(wǎng)信息技術(shù)的飛速發(fā)展,數(shù)據(jù)量不斷增大,業(yè)務(wù)邏輯也日趨復(fù)雜,對系統(tǒng)的高并發(fā)訪問、海量數(shù)據(jù)處理的場景也越來越多。如何用較低成本實現(xiàn)系統(tǒng)的高可用、易伸縮、可擴(kuò)展等目標(biāo)就顯得越發(fā)重要。為了解決這一系列問題,系統(tǒng)架構(gòu)也在不斷演進(jìn)。傳統(tǒng)的集中式系統(tǒng)已經(jīng)逐漸無法滿足要求,分布式系統(tǒng)被使...
隨著互聯(lián)網(wǎng)信息技術(shù)的飛速發(fā)展,數(shù)據(jù)量不斷增大,業(yè)務(wù)邏輯也日趨復(fù)雜,對系統(tǒng)的高并發(fā)訪問、海量數(shù)據(jù)處理的場景也越來越多。如何用較低成本實現(xiàn)系統(tǒng)的高可用、易伸縮、可擴(kuò)展等目標(biāo)就顯得越發(fā)重要。為了解決這一系列問題,系統(tǒng)架構(gòu)也在不斷演進(jìn)。傳統(tǒng)的集中式系統(tǒng)已經(jīng)逐漸無法滿足要求,分布式系統(tǒng)被使用在更多的場景中。分布式系統(tǒng)由獨(dú)立的服務(wù)器通過網(wǎng)絡(luò)松散耦合組成。在這個系統(tǒng)中每個服務(wù)器都是一臺獨(dú)立的主機(jī),服務(wù)器之間通過內(nèi)部網(wǎng)絡(luò)連接。分布式系統(tǒng)有以下幾個特點(diǎn):- 可擴(kuò)展性:可通過橫向水平擴(kuò)展提高系統(tǒng)的性能和吞吐量。
- 高可靠性:高容錯,即使系統(tǒng)中一臺或幾臺故障,系統(tǒng)仍可提供服務(wù)。
- 高并發(fā)性:各機(jī)器并行獨(dú)立處理和計算。
- 廉價高效:多臺小型機(jī)而非單臺高性能機(jī)。
然而,在分布式系統(tǒng)中,其環(huán)境的復(fù)雜度、網(wǎng)絡(luò)的不確定性會造成諸如時鐘不一致、“拜占庭將軍問題”(Byzantine failure)等。存在于集中式系統(tǒng)中的機(jī)器宕機(jī)、消息丟失等問題也會在分布式環(huán)境中變得更加復(fù)雜。基于分布式系統(tǒng)的這些特征,有兩種問題逐漸成為了分布式環(huán)境中需要重點(diǎn)關(guān)注和解決的典型問題:今天我們就針對這兩個問題來進(jìn)行分析。
-? ? ?互斥性問題? ? -先看兩個常見的例子:例1:某服務(wù)記錄關(guān)鍵數(shù)據(jù)X,當(dāng)前值為100。A請求需要將X增加200;同時,B請求需要將X減100。在理想的情況下,A先讀取到X=100,然后X增加200,最后寫入X=300。B請求接著從讀取X=300,減少100,最后寫入X=200。然而在真實情況下,如果不做任何處理,則可能會出現(xiàn):A和B同時讀取到X=100;A寫入之前B讀取到X;B比A先寫入等情況。例2:某服務(wù)提供一組任務(wù),A請求隨機(jī)從任務(wù)組中獲取一個任務(wù);B請求隨機(jī)從任務(wù)組中獲取一個任務(wù)。在理想的情況下,A從任務(wù)組中挑選一個任務(wù),任務(wù)組刪除該任務(wù),B從剩下的的任務(wù)中再挑一個,任務(wù)組刪除該任務(wù)。同樣的,在真實情況下,如果不做任何處理,可能會出現(xiàn)A和B挑中了同一個任務(wù)的情況。以上的兩個例子,都存在操作互斥性的問題?;コ庑詥栴}用通俗的話來講,就是對共享資源的搶占問題。如果不同的請求對同一個或者同一組資源讀取并修改時,無法保證按序執(zhí)行,無法保證一個操作的原子性,那么就很有可能會出現(xiàn)預(yù)期外的情況。因此操作的互斥性問題,也可以理解為一個需要保證時序性、原子性的問題。在傳統(tǒng)的基于數(shù)據(jù)庫的架構(gòu)中,對于數(shù)據(jù)的搶占問題往往是通過數(shù)據(jù)庫事務(wù)(ACID)來保證的。在分布式環(huán)境中,出于對性能以及一致性敏感度的要求,使得分布式鎖成為了一種比較常見而高效的解決方案。事實上,操作互斥性問題也并非分布式環(huán)境所獨(dú)有,在傳統(tǒng)的多線程、多進(jìn)程情況下已經(jīng)有了很好的解決方案。因此在研究分布式鎖之前,我們先來分析下這兩種情況的解決方案,以期能夠?qū)?a href="/tags/分布式" target="_blank">分布式鎖的解決方案提供一些實現(xiàn)思路。
-? ? ?多線程解決方案及原理? ? -《Thinking in Java》書中寫到:基本上所有的并發(fā)模式在解決線程沖突問題的時候,都是采用序列化訪問共享資源的方案。
在多線程環(huán)境中,線程之間因為公用一些存儲空間,沖突問題時有發(fā)生。解決沖突問題最普遍的方式就是用互斥鎖把該資源或?qū)υ撡Y源的操作保護(hù)起來。Java JDK中提供了兩種互斥鎖Lock和synchronized。不同的線程之間對同一資源進(jìn)行搶占,該資源通常表現(xiàn)為某個類的普通成員變量。因此,利用ReentrantLock或者synchronized將共享的變量及其操作鎖住,即可基本解決資源搶占的問題。下面來簡單聊一聊兩者的實現(xiàn)原理。
-? ? ?原理? ? -ReentrantLockReentrantLock主要利用CAS CLH隊列來實現(xiàn)。它支持公平鎖和非公平鎖,兩者的實現(xiàn)類似。- CAS:Compare and Swap,比較并交換。CAS有3個操作數(shù):內(nèi)存值V、預(yù)期值A(chǔ)、要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。該操作是一個原子操作,被廣泛的應(yīng)用在Java的底層實現(xiàn)中。在Java中,CAS主要是由sun.misc.Unsafe這個類通過JNI調(diào)用CPU底層指令實現(xiàn)。
- CLH隊列:帶頭結(jié)點(diǎn)的雙向非循環(huán)鏈表(如下圖所示):
ReentrantLock的基本實現(xiàn)可以概括為:先通過CAS嘗試獲取鎖。如果此時已經(jīng)有線程占據(jù)了鎖,那就加入CLH隊列并且被掛起。當(dāng)鎖被釋放之后,排在CLH隊列隊首的線程會被喚醒,然后CAS再次嘗試獲取鎖。在這個時候,如果:- 非公平鎖:如果同時還有另一個線程進(jìn)來嘗試獲取,那么有可能會讓這個線程搶先獲??;
- 公平鎖:如果同時還有另一個線程進(jìn)來嘗試獲取,當(dāng)它發(fā)現(xiàn)自己不是在隊首的話,就會排到隊尾,由隊首的線程獲取到鎖。
下面分析下兩個片段:final?boolean?nonfairTryAcquire(int?acquires)?{
? ?final?Thread current = Thread.currentThread();
? ?int?c = getState();
? ?if?(c ==?0) {
? ? ? ?if?(compareAndSetState(0, acquires)) {
? ? ? ? ? ?setExclusiveOwnerThread(current);
? ? ? ? ? ?return?true;
? ? ? ?}
? ?}
? ?else?if?(current == getExclusiveOwnerThread()) {
? ? ? ?int?nextc = c acquires;
? ? ? ?if?(nextc 0)?// overflow
? ? ? ? ? ?throw?new?Error("Maximum lock count exceeded");
? ? ? ?setState(nextc);
? ? ? ?return?true;
? ?}
? ?return?false;
}在嘗試獲取鎖的時候,會先調(diào)用上面的方法。如果狀態(tài)為0,則表明此時無人占有鎖。此時嘗試進(jìn)行set,一旦成功,則成功占有鎖。如果狀態(tài)不為0,再判斷是否是當(dāng)前線程獲取到鎖。如果是的話,將狀態(tài) 1,因為此時就是當(dāng)前線程,所以不用CAS。這也就是可重入鎖的實現(xiàn)原理。final?boolean?acquireQueued(final?Node node,?int?arg)?{
? ?boolean?failed =?true;
? ?try?{
? ? ? ?boolean?interrupted =?false;
? ? ? ?for?(;;) {
? ? ? ? ? ?final?Node p = node.predecessor();
? ? ? ? ? ?if?(p == head
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
今天,小編將在這篇文章中為大家?guī)泶髷?shù)據(jù)的有關(guān)報道,通過閱讀這篇文章,大家可以對大數(shù)據(jù)具備清晰的認(rèn)識,主要內(nèi)容如下。
關(guān)鍵字:
大數(shù)據(jù)
分布式
Kafka
北京2022年10月17日 /美通社/ -- 存儲設(shè)備對于客戶的核心價值就是要穩(wěn)定可靠,無需什么星辰大海也不用玄妙推演,踏實將穩(wěn)定可靠做到位、保護(hù)好客戶的數(shù)據(jù),即是最大的意義所在。 北有中關(guān)村 南有馬欄山 這里的馬欄...
關(guān)鍵字:
AI
云平臺
分布式
存儲設(shè)備
北京2022年10月11日 /美通社/ -- 在1992年出版的《雪崩》一書中,作者尼爾·史蒂芬森第一次提出Metaverse(元宇宙)這一概念;斗轉(zhuǎn)星移,三十年之后,隨著Roblox上市、Facebook...
關(guān)鍵字:
區(qū)塊鏈
存儲技術(shù)
帶寬
分布式
智慧光儲進(jìn)萬家 蘇州2022年9月27日 /美通社/ -- 北京時間2022年9月22日,晟高能源科技對外宣布與康佳集團(tuán)達(dá)成全面戰(zhàn)略合作,成為康佳集團(tuán)在國內(nèi)戶用及工商業(yè)光伏產(chǎn)品領(lǐng)域戰(zhàn)略合作單位。 ...
關(guān)鍵字:
分布式
康佳
光伏組件
新能源
北京2022年9月23日 /美通社/ -- 9月21日,國家原子能機(jī)構(gòu)在京舉辦2022年第三季論壇,發(fā)布核技術(shù)應(yīng)用領(lǐng)域十件大事,展示了核技術(shù)近年來在國民經(jīng)濟(jì)領(lǐng)域的重大應(yīng)用成果。同方威視自主研發(fā)的世界首套基于碳納米管冷陰極...
關(guān)鍵字:
X射線
分布式
碳納米管
BSP
(全球TMT2022年9月20日訊)9月16日至18日,借第19屆中國—東盟博覽會開展之機(jī),首屆中國—東盟和平利用核技術(shù)論壇在廣西南寧召開。中核集團(tuán)同方股份有限公司出席活動,并聯(lián)合核安保技術(shù)中心、中國原子能工業(yè)有限公司...
關(guān)鍵字:
分布式
器件
安防
并聯(lián)
北京, 2022年9月20日 /美通社/ -- 9月16日至18日,借第19屆中國—東盟博覽會開展之機(jī),首屆中國—東盟和平利用核技術(shù)論壇在廣西南寧召開。中核集團(tuán)同方股份有限公司出席活動,并聯(lián)合核安保技術(shù)中心、中...
關(guān)鍵字:
BSP
全自動
分布式
器件
西安2022年9月9日 /美通社/ -- 9月7日,由工業(yè)和信息化部節(jié)能與綜合利用司、國家能源局能源節(jié)約和科技裝備司與浙江省能源局聯(lián)合指導(dǎo),中國化學(xué)與物理電源行業(yè)協(xié)會聯(lián)合232余家機(jī)構(gòu)共同支持的第十二屆中國國際儲能大會在...
關(guān)鍵字:
電力系統(tǒng)
分布式
變流器
新能源汽車
在這篇文章中,小編將為大家?guī)泶髷?shù)據(jù)的相關(guān)報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。
關(guān)鍵字:
大數(shù)據(jù)
云計算
分布式
北京2022年8月12日 /美通社/ -- 近日,老工業(yè)城市邁出"綠色低碳"發(fā)展新步伐。同方智慧能源有限責(zé)任公司與淄博熱電集團(tuán)有限公司、邁領(lǐng)咨詢管理(青島)有限公司簽署戰(zhàn)略合作框架協(xié)議,共同...
關(guān)鍵字:
智慧能源
新能源
清潔能源
分布式
(全球TMT2022年8月13日訊)元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),人們身邊的一切信息和資源都可以用數(shù)據(jù)來描述,元數(shù)據(jù)則是從數(shù)據(jù)資源中抽取用來說明其特征和內(nèi)容的結(jié)構(gòu)化數(shù)據(jù),用于組織、管理、保存、檢索信息和資源。浪潮分布式存儲基...
關(guān)鍵字:
分布式
元數(shù)據(jù)
SEARCH
TI
(全球TMT2022年8月12日訊)西湖大學(xué)聯(lián)手浪潮信息等科技企業(yè)建設(shè)領(lǐng)先的創(chuàng)新平臺與實驗室,為前沿科技研究構(gòu)建數(shù)據(jù)基座,創(chuàng)造影響世界、造福人類的科學(xué)知識和技術(shù)。西湖大學(xué)工學(xué)院采用了浪潮分布式存儲AS13000、AI服...
關(guān)鍵字:
節(jié)點(diǎn)
分布式
讀寫
INFIN
北京2022年8月11日 /美通社/ -- 堅持面向世界科技前沿,不斷向科學(xué)技術(shù)廣度和深度進(jìn)發(fā)是科技工作者的初心和使命。工欲善其事,必先利其器,西湖大學(xué)聯(lián)手浪潮信息等科技企業(yè)建設(shè)領(lǐng)先的創(chuàng)新平臺與實驗室,為前沿科技研究構(gòu)建...
關(guān)鍵字:
節(jié)點(diǎn)
分布式
讀寫
數(shù)據(jù)安全
(全球TMT2022年8月10日訊)亞馬遜云科技宣布推出游戲行業(yè)解決方案,為游戲客戶提供從游戲開發(fā)、運(yùn)行到增長的全生命周期賦能,助力行業(yè)打造"下一代游戲體驗"。亞馬遜云科技通過全球覆蓋的基礎(chǔ)設(shè)施、專門構(gòu)建的行業(yè)解決方案...
關(guān)鍵字:
亞馬遜
FOR
STUDIO
分布式
北京2022年8月5日 /美通社/ -- 醫(yī)療質(zhì)量管理是保障患者安全、提升患者就診體驗的核心,信息技術(shù)為醫(yī)療質(zhì)量管理提供了更加科學(xué)的管理手段。 隨著醫(yī)療信息化的高速發(fā)展,醫(yī)院信息化管理已經(jīng)從單純網(wǎng)絡(luò)化的醫(yī)院信息系統(tǒng)應(yīng)用...
關(guān)鍵字:
AC
信息系統(tǒng)
分布式
數(shù)字化
(全球TMT2022年8月8日訊)浪潮推出"虛擬化云平臺+高性能服務(wù)器+統(tǒng)一全閃+分布式海量存儲"組成的解決方案。 醫(yī)院信息化平臺解決方案結(jié)構(gòu)圖 首先,浪潮采用云管理平臺對資源池進(jìn)行統(tǒng)一管理,基于基礎(chǔ)設(shè)施虛...
關(guān)鍵字:
AC
分布式
集成系統(tǒng)
虛擬化技術(shù)
(全球TMT2022年8月4日訊)近日,Gartner公布2022年存儲和數(shù)據(jù)保護(hù)技術(shù)成熟度曲線(Hype Cycle for Storage and Data Protection Technologies, 202...
關(guān)鍵字:
分布式
存儲技術(shù)
GARTNER
軟件定義
(全球TMT2022年8月2日訊)中國信息通信研究院(以下簡稱"中國信通院")公布了第十四批大數(shù)據(jù)產(chǎn)品能力評測結(jié)果。大華股份大數(shù)據(jù)平臺,經(jīng)過評審專家資料審核、測試報告審核、質(zhì)詢與答疑、集中評議的層層專業(yè)評測,最終獲得中...
關(guān)鍵字:
大數(shù)據(jù)
分布式
數(shù)據(jù)存儲
節(jié)點(diǎn)