日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(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)原理。


-? ? ?原理? ? -


ReentrantLock

ReentrantLock主要利用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è)備

大數(shù)據(jù)將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關(guān)情況以及信息有所認(rèn)識和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 大數(shù)據(jù) 物聯(lián)網(wǎng) 分布式

北京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ù) 云計算 分布式

架構(gòu)師社區(qū)

1736 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉