www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導讀]隨著互聯(lián)網(wǎng)信息技術(shù)的飛速發(fā)展,數(shù)據(jù)量不斷增大,業(yè)務邏輯也日趨復雜,對系統(tǒng)的高并發(fā)訪問、海量數(shù)據(jù)處理的場景也越來越多。如何用較低成本實現(xiàn)系統(tǒng)的高可用、易伸縮、可擴展等目標就顯得越發(fā)重要。為了解決這一系列問題,系統(tǒng)架構(gòu)也在不斷演進。傳統(tǒng)的集中式系統(tǒng)已經(jīng)逐漸無法滿足要求,分布式系統(tǒng)被使...

隨著互聯(lián)網(wǎng)信息技術(shù)的飛速發(fā)展,數(shù)據(jù)量不斷增大,業(yè)務邏輯也日趨復雜,對系統(tǒng)的高并發(fā)訪問、海量數(shù)據(jù)處理的場景也越來越多。如何用較低成本實現(xiàn)系統(tǒng)的高可用、易伸縮、可擴展等目標就顯得越發(fā)重要。

為了解決這一系列問題,系統(tǒng)架構(gòu)也在不斷演進。傳統(tǒng)的集中式系統(tǒng)已經(jīng)逐漸無法滿足要求,分布式系統(tǒng)被使用在更多的場景中。

分布式系統(tǒng)由獨立的服務器通過網(wǎng)絡松散耦合組成。在這個系統(tǒng)中每個服務器都是一臺獨立的主機,服務器之間通過內(nèi)部網(wǎng)絡連接。分布式系統(tǒng)有以下幾個特點:

  • 可擴展性:可通過橫向水平擴展提高系統(tǒng)的性能和吞吐量。

  • 高可靠性:高容錯,即使系統(tǒng)中一臺或幾臺故障,系統(tǒng)仍可提供服務。

  • 高并發(fā)性:各機器并行獨立處理和計算。

  • 廉價高效:多臺小型機而非單臺高性能機。


然而,在分布式系統(tǒng)中,其環(huán)境的復雜度、網(wǎng)絡的不確定性會造成諸如時鐘不一致、“拜占庭將軍問題”(Byzantine failure)等。存在于集中式系統(tǒng)中的機器宕機、消息丟失等問題也會在分布式環(huán)境中變得更加復雜。

基于分布式系統(tǒng)的這些特征,有兩種問題逐漸成為了分布式環(huán)境中需要重點關(guān)注和解決的典型問題:

  • 互斥性問題。

  • 冪等性問題。


今天我們就針對這兩個問題來進行分析。


-? ? ?互斥性問題? ? -


先看兩個常見的例子:

例1:某服務記錄關(guān)鍵數(shù)據(jù)X,當前值為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:某服務提供一組任務,A請求隨機從任務組中獲取一個任務;B請求隨機從任務組中獲取一個任務。

在理想的情況下,A從任務組中挑選一個任務,任務組刪除該任務,B從剩下的的任務中再挑一個,任務組刪除該任務。

同樣的,在真實情況下,如果不做任何處理,可能會出現(xiàn)A和B挑中了同一個任務的情況。

以上的兩個例子,都存在操作互斥性的問題?;コ庑詥栴}用通俗的話來講,就是對共享資源的搶占問題。如果不同的請求對同一個或者同一組資源讀取并修改時,無法保證按序執(zhí)行,無法保證一個操作的原子性,那么就很有可能會出現(xiàn)預期外的情況。因此操作的互斥性問題,也可以理解為一個需要保證時序性、原子性的問題。

在傳統(tǒng)的基于數(shù)據(jù)庫的架構(gòu)中,對于數(shù)據(jù)的搶占問題往往是通過數(shù)據(jù)庫事務(ACID)來保證的。在分布式環(huán)境中,出于對性能以及一致性敏感度的要求,使得分布式鎖成為了一種比較常見而高效的解決方案。

事實上,操作互斥性問題也并非分布式環(huán)境所獨有,在傳統(tǒng)的多線程、多進程情況下已經(jīng)有了很好的解決方案。因此在研究分布式鎖之前,我們先來分析下這兩種情況的解決方案,以期能夠?qū)?a href="/tags/分布式" target="_blank">分布式鎖的解決方案提供一些實現(xiàn)思路。


-? ? ?多線程解決方案及原理? ? -


《Thinking in Java》書中寫到:

基本上所有的并發(fā)模式在解決線程沖突問題的時候,都是采用序列化訪問共享資源的方案。

在多線程環(huán)境中,線程之間因為公用一些存儲空間,沖突問題時有發(fā)生。解決沖突問題最普遍的方式就是用互斥鎖把該資源或?qū)υ撡Y源的操作保護起來。

Java JDK中提供了兩種互斥鎖Lock和synchronized。不同的線程之間對同一資源進行搶占,該資源通常表現(xiàn)為某個類的普通成員變量。因此,利用ReentrantLock或者synchronized將共享的變量及其操作鎖住,即可基本解決資源搶占的問題。

下面來簡單聊一聊兩者的實現(xiàn)原理。


-? ? ?原理? ? -


ReentrantLock

ReentrantLock主要利用CAS CLH隊列來實現(xiàn)。它支持公平鎖和非公平鎖,兩者的實現(xiàn)類似。

  • CAS:Compare and Swap,比較并交換。CAS有3個操作數(shù):內(nèi)存值V、預期值A、要修改的新值B。當且僅當預期值A和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。該操作是一個原子操作,被廣泛的應用在Java的底層實現(xiàn)中。在Java中,CAS主要是由sun.misc.Unsafe這個類通過JNI調(diào)用CPU底層指令實現(xiàn)。

  • CLH隊列:帶頭結(jié)點的雙向非循環(huán)鏈表(如下圖所示):

ReentrantLock的基本實現(xiàn)可以概括為:先通過CAS嘗試獲取鎖。如果此時已經(jīng)有線程占據(jù)了鎖,那就加入CLH隊列并且被掛起。當鎖被釋放之后,排在CLH隊列隊首的線程會被喚醒,然后CAS再次嘗試獲取鎖。在這個時候,如果:

  • 非公平鎖:如果同時還有另一個線程進來嘗試獲取,那么有可能會讓這個線程搶先獲取;

  • 公平鎖:如果同時還有另一個線程進來嘗試獲取,當它發(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,則表明此時無人占有鎖。此時嘗試進行set,一旦成功,則成功占有鎖。如果狀態(tài)不為0,再判斷是否是當前線程獲取到鎖。如果是的話,將狀態(tài) 1,因為此時就是當前線程,所以不用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)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

今天,小編將在這篇文章中為大家?guī)泶髷?shù)據(jù)的有關(guān)報道,通過閱讀這篇文章,大家可以對大數(shù)據(jù)具備清晰的認識,主要內(nèi)容如下。

關(guān)鍵字: 大數(shù)據(jù) 分布式 Kafka

北京2022年10月17日 /美通社/ -- 存儲設備對于客戶的核心價值就是要穩(wěn)定可靠,無需什么星辰大海也不用玄妙推演,踏實將穩(wěn)定可靠做到位、保護好客戶的數(shù)據(jù),即是最大的意義所在。 北有中關(guān)村 南有馬欄山 這里的馬欄...

關(guān)鍵字: AI 云平臺 分布式 存儲設備

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

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

北京2022年10月11日 /美通社/ -- 在1992年出版的《雪崩》一書中,作者尼爾·史蒂芬森第一次提出Metaverse(元宇宙)這一概念;斗轉(zhuǎn)星移,三十年之后,隨著Roblox上市、Facebook...

關(guān)鍵字: 區(qū)塊鏈 存儲技術(shù) 帶寬 分布式

智慧光儲進萬家 蘇州2022年9月27日 /美通社/ -- 北京時間2022年9月22日,晟高能源科技對外宣布與康佳集團達成全面戰(zhàn)略合作,成為康佳集團在國內(nèi)戶用及工商業(yè)光伏產(chǎn)品領(lǐng)域戰(zhàn)略合作單位。  ...

關(guān)鍵字: 分布式 康佳 光伏組件 新能源

北京2022年9月23日 /美通社/ -- 9月21日,國家原子能機構(gòu)在京舉辦2022年第三季論壇,發(fā)布核技術(shù)應用領(lǐng)域十件大事,展示了核技術(shù)近年來在國民經(jīng)濟領(lǐng)域的重大應用成果。同方威視自主研發(fā)的世界首套基于碳納米管冷陰極...

關(guān)鍵字: X射線 分布式 碳納米管 BSP

(全球TMT2022年9月20日訊)9月16日至18日,借第19屆中國—東盟博覽會開展之機,首屆中國—東盟和平利用核技術(shù)論壇在廣西南寧召開。中核集團同方股份有限公司出席活動,并聯(lián)合核安保技術(shù)中心、中國原子能工業(yè)有限公司...

關(guān)鍵字: 分布式 器件 安防 并聯(lián)

北京, 2022年9月20日 /美通社/ -- 9月16日至18日,借第19屆中國—東盟博覽會開展之機,首屆中國—東盟和平利用核技術(shù)論壇在廣西南寧召開。中核集團同方股份有限公司出席活動,并聯(lián)合核安保技術(shù)中心、中...

關(guān)鍵字: BSP 全自動 分布式 器件

西安2022年9月9日 /美通社/ -- 9月7日,由工業(yè)和信息化部節(jié)能與綜合利用司、國家能源局能源節(jié)約和科技裝備司與浙江省能源局聯(lián)合指導,中國化學與物理電源行業(yè)協(xié)會聯(lián)合232余家機構(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)閉