分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法、終端及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法、終端及系統(tǒng)。
【背景技術(shù)】
[0002]在分布式計(jì)算中,多個(gè)客戶端可以通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)訪問(wèn)各分布式系統(tǒng)節(jié)點(diǎn)上的共享資源,為了使分布式計(jì)算能夠正常穩(wěn)定運(yùn)行,必須保證多個(gè)客戶端對(duì)同一共享資源的安全訪問(wèn),避免數(shù)據(jù)的一致性遭到破壞,由此而產(chǎn)生了控制分布式系統(tǒng)之間同步訪問(wèn)共享資源的分布式鎖。
[0003]與普通鎖相比,分布式鎖面臨的問(wèn)題更多,比如如何保證某個(gè)進(jìn)程持有鎖時(shí)而意外終止之后,其他進(jìn)程能夠正常獲得鎖,以保證其他進(jìn)程共享資源的正常進(jìn)行。
[0004]針對(duì)上述問(wèn)題,現(xiàn)有技術(shù)中,通常采用一個(gè)中間件回收所有客戶端的鎖請(qǐng)求,然后將回收的鎖請(qǐng)求放到鎖請(qǐng)求隊(duì)列里,再通過(guò)中間件依次處理所有客戶端的鎖請(qǐng)求,并通過(guò)定時(shí)器來(lái)確定鎖是否超時(shí),進(jìn)而判斷是否成功獲取到鎖。但是,現(xiàn)有的這種處理方案中,系統(tǒng)設(shè)計(jì)較為復(fù)雜,而且可擴(kuò)展性差。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供一種設(shè)計(jì)簡(jiǎn)單、可擴(kuò)展性好、可快速解決分布式計(jì)算中對(duì)共享資源的安全訪問(wèn)問(wèn)題的分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法、終端及系統(tǒng)。
[0006]本發(fā)明實(shí)施例提出一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法,包括:
[0007]終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;
[0008]所述服務(wù)器根據(jù)接收的所述第一原子操作的觸發(fā)指令,執(zhí)行所述第一原子操作,并向所述終端返回操作結(jié)果;
[0009]當(dāng)所述操作結(jié)果為未成功獲取到分布式鎖時(shí),所述終端向所述服務(wù)器觸發(fā)第二原子操作,以判斷所述分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到所述分布式鎖。
[0010]本發(fā)明還提出一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的系統(tǒng),包括:終端和與所述終端通信連接的服務(wù)器,其中:
[0011]所述終端,用于向所述服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;
[0012]所述服務(wù)器,用于根據(jù)接收的所述第一原子操作的觸發(fā)指令,執(zhí)行所述第一原子操作,并向所述終端返回操作結(jié)果;
[0013]所述終端,還用于當(dāng)所述操作結(jié)果為未成功獲取到分布式鎖時(shí),向所述服務(wù)器觸發(fā)第二原子操作,以判斷所述分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到所述分布式鎖。
[0014]本發(fā)明還提出一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法,包括:
[0015]終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;
[0016]接收所述服務(wù)器執(zhí)行所述第一原子操作后返回的操作結(jié)果;
[0017]當(dāng)所述操作結(jié)果為未成功獲取到分布式鎖時(shí),向所述服務(wù)器觸發(fā)第二原子操作,以判斷所述分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到所述分布式鎖。
[0018]本發(fā)明還提出一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端,包括:
[0019]第一原子操作觸發(fā)模塊,用于向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;
[0020]接收模塊,用于接收所述服務(wù)器執(zhí)行所述第一原子操作后返回的操作結(jié)果;
[0021]第二原子操作觸發(fā)模塊,用于當(dāng)所述操作結(jié)果為未成功獲取到分布式鎖時(shí),向所述服務(wù)器觸發(fā)第二原子操作,以判斷所述分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到所述分布式鎖。
[0022]本發(fā)明實(shí)施例提出的一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法、終端及系統(tǒng),終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;服務(wù)器根據(jù)接收的第一原子操作的觸發(fā)指令,執(zhí)行第一原子操作,并向終端返回操作結(jié)果;當(dāng)操作結(jié)果為未成功獲取到分布式鎖時(shí),終端向服務(wù)器觸發(fā)第二原子操作,以判斷分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到分布式鎖,由此,基于原子操作實(shí)現(xiàn)分布式鎖的獲取,可以快速解決分布式計(jì)算中對(duì)共享資源的安全訪問(wèn)問(wèn)題,比如可以保證某個(gè)進(jìn)程持有鎖時(shí)意外終止之后,其他進(jìn)程能夠正常獲得鎖,具有設(shè)計(jì)簡(jiǎn)單、可擴(kuò)展性好的技術(shù)效果。
【附圖說(shuō)明】
[0023]圖1是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法第一實(shí)施例的流程示意圖;
[0024]圖2是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法第二實(shí)施例的流程示意圖;
[0025]圖3是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法第三實(shí)施例的流程示意圖;
[0026]圖4是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法第四實(shí)施例的流程示意圖;
[0027]圖5是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的系統(tǒng)較佳實(shí)施例的架構(gòu)示意圖;
[0028]圖6是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端第一實(shí)施例的功能模塊示意圖;
[0029]圖7是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端實(shí)施例中第二原子操作觸發(fā)模塊的結(jié)構(gòu)不意圖;
[0030]圖8是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端第二實(shí)施例的功能模塊示意圖;
[0031]圖9是本發(fā)明分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端第三實(shí)施例的功能模塊示意圖;
[0032]圖10是本發(fā)明實(shí)施例分布式系統(tǒng)共享網(wǎng)絡(luò)資源的終端的另一種結(jié)構(gòu)示意圖。
[0033]為了使本發(fā)明的技術(shù)方案更加清楚、明了,下面將結(jié)合附圖作進(jìn)一步詳述。
【具體實(shí)施方式】
[0034]應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0035]本發(fā)明實(shí)施例的主要解決方案是:終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;服務(wù)器根據(jù)接收的第一原子操作的觸發(fā)指令,執(zhí)行第一原子操作,并向終端返回操作結(jié)果;當(dāng)操作結(jié)果為未成功獲取到分布式鎖時(shí),終端向服務(wù)器觸發(fā)第二原子操作,以判斷分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到分布式鎖,由此,基于原子操作實(shí)現(xiàn)分布式鎖的獲取,快速解決分布式計(jì)算中對(duì)共享資源的安全訪問(wèn)問(wèn)題,設(shè)計(jì)簡(jiǎn)單、可擴(kuò)展性好。
[0036]如圖1所示,本發(fā)明第一實(shí)施例提出一種分布式系統(tǒng)共享網(wǎng)絡(luò)資源的方法,包括:
[0037]步驟S101,終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;
[0038]本實(shí)施例方法運(yùn)行環(huán)境涉及分布式系統(tǒng)中的服務(wù)器和終端,在分布式計(jì)算中,多個(gè)終端可以通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)訪問(wèn)各節(jié)點(diǎn)上的共享資源。為了使分布式計(jì)算能夠正常穩(wěn)定運(yùn)行,通過(guò)分布式鎖保證多個(gè)終端對(duì)同一共享資源的安全訪問(wèn),避免數(shù)據(jù)的一致性遭到破壞。
[0039]在本實(shí)施例中,終端基于redis提供的原子操作,與服務(wù)器交互實(shí)現(xiàn)分布式鎖的獲取,以保證網(wǎng)絡(luò)資源共享的正常進(jìn)行,比如保證某個(gè)進(jìn)程(不同的終端代表不同的進(jìn)程)持有鎖時(shí)意外終止之后,其他進(jìn)程能夠正常獲得鎖等。
[0040]其中,redis(REmote Dict1nary Server)是一個(gè) key-value (鍵-值)的內(nèi)存存儲(chǔ)系統(tǒng)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string (字符串)、list (鏈表)、set (集合)和zset (有序集合)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的,即原子操作,在原子操作中,更高層不能發(fā)現(xiàn)其內(nèi)部實(shí)現(xiàn)與結(jié)構(gòu)。
[0041]具體來(lái)講,原子操作,就是不能被更高等級(jí)中斷搶奪優(yōu)先的操作,就是不能被中斷的操作。以操作系統(tǒng)為例,由于操作系統(tǒng)大部分時(shí)間處于開(kāi)中斷狀態(tài),所以,一個(gè)程序在執(zhí)行的時(shí)候可能被優(yōu)先級(jí)更高的線程中斷。而有些操作是不能被中斷的,不然會(huì)出現(xiàn)無(wú)法還原的后果,這時(shí)候,這些操作就需要原子操作。
[0042]現(xiàn)代操作系統(tǒng)中,一般都提供了原子操作來(lái)實(shí)現(xiàn)一些同步操作,因此,原子操作也就是一個(gè)獨(dú)立而不可分割的操作。在單核環(huán)境中,一般的意義下原子操作中線程不會(huì)被切換,線程切換要么在原子操作之前,要么在原子操作完成之后。更廣泛的意義下,原子操作是指一系列必須整體完成的操作步驟,如果任何一步操作沒(méi)有完成,那么所有完成的步驟都必須回滾,這樣就可以保證要么所有操作步驟都未完成,要么所有操作步驟都被完成。
[0043]例如在單核系統(tǒng)里,單個(gè)的機(jī)器指令可以看成是原子操作(如果有編譯器優(yōu)化、亂序執(zhí)行等情況除外);在多核系統(tǒng)中,單個(gè)的機(jī)器指令就不是原子操作,因?yàn)槎嗪讼到y(tǒng)里是多指令流并行運(yùn)行的,一個(gè)核在執(zhí)行一個(gè)指令時(shí),其他核同時(shí)執(zhí)行的指令有可能操作同一塊內(nèi)存區(qū)域,從而出現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)現(xiàn)象。多核系統(tǒng)中的原子操作通常使用內(nèi)存柵障(memorybarrier)來(lái)實(shí)現(xiàn),即一個(gè)CPU核在執(zhí)行原子操作時(shí),其他CPU核必須停止對(duì)內(nèi)存操作或者不對(duì)指定的內(nèi)存進(jìn)行操作,這樣才能避免數(shù)據(jù)競(jìng)爭(zhēng)問(wèn)題。
[0044]在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached—樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。與memcached的區(qū)別在于:redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了 master-slave (主從)同止/J/ O
[0045]本實(shí)施例利用redis的原子操作實(shí)現(xiàn)分布式鎖(以下簡(jiǎn)稱鎖)的獲取方案,其核心思想是利用redis的setnx操作進(jìn)行獲取鎖的動(dòng)作,利用redis的GetSet操作判斷鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)操作,直至獲取到鎖。
[0046]具體地,首先,終端在訪問(wèn)共享資源時(shí),終端向服務(wù)器觸發(fā)第一原子操作,用以獲取共享網(wǎng)絡(luò)資源的分布式鎖;其中,第一原子操作以redis的setnx操作進(jìn)行舉例,但不限于此種情形。
[0047]在第一原子操作的觸發(fā)指令中攜帶有以分布式鎖的鎖名為key,以該key對(duì)應(yīng)的第一時(shí)間戳為value的key-value參數(shù);其中:鎖名為與終端共享資源相關(guān)的字符串,第一時(shí)間戳為終端的當(dāng)前時(shí)間與終端設(shè)定的超時(shí)時(shí)間之和。
[0048]步驟S102,所述服務(wù)器根據(jù)接收的所述第一原子操作的觸發(fā)指令,執(zhí)行所述第一原子操作,并向所述終端返回操作結(jié)果;
[0049]在服務(wù)器側(cè),服務(wù)器在接收不同終端發(fā)來(lái)的各種操作觸發(fā)指令,并獲取不同終端上報(bào)的時(shí)間戳。
[0050]具體地,服務(wù)器在接收到終端發(fā)來(lái)的第一原子操作的觸發(fā)指令后,執(zhí)行第一原子操作,以獲取該終端共享網(wǎng)絡(luò)資源的鎖。
[0051]服務(wù)器在執(zhí)行第一原子操作時(shí),會(huì)根據(jù)是否獲取到鎖反饋不同的操作結(jié)果,比如,設(shè)定獲取到鎖的操作結(jié)果為1,設(shè)定未獲取到鎖的操作結(jié)果為I之外的其他值,比如O。最后,服務(wù)器會(huì)將操作結(jié)果反饋給終端。
[0052]步驟S103,當(dāng)所述操作結(jié)果為未成功獲取到分布式鎖時(shí),所述終端向所述服務(wù)器觸發(fā)第二原子操作,以判斷所述分布式鎖是否超時(shí),并根據(jù)判斷結(jié)果進(jìn)