本發(fā)明涉及分布式存儲技術(shù)領(lǐng)域,尤其涉及一種分布式系統(tǒng)中卷的訪問方法和裝置。
背景技術(shù):
傳統(tǒng)的基于HDD(Hard Disk Drive,硬盤驅(qū)動器)的分布式存儲中,采用一致性hash哈希來存放數(shù)據(jù),數(shù)據(jù)卷的副本分散存放在各個分布式節(jié)點中。通過數(shù)據(jù)并發(fā)訪問來提升系統(tǒng)的IO性能。然而,在NVME(Non-Volatile Memory Express,非易失性存儲器)SSD磁盤高速發(fā)展的今天,單個節(jié)點的SSD硬盤即可提供非常高的IO性能,反而跨節(jié)點訪問增加了數(shù)據(jù)訪問的延遲,不能完全發(fā)揮SSD的性能。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施例提供了一種分布式系統(tǒng)中卷的訪問方法和裝置,能夠減少客戶端訪問同一數(shù)據(jù)卷的時間。
為了實現(xiàn)上述目的,本發(fā)明采取了如下技術(shù)方案。
一種分布式系統(tǒng)中卷的訪問方法,包括:
根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整的副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;
根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
所述從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本的步驟具體為:
通過所述待訪問卷的卷控制器,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本;所述待訪問卷的卷控制器用于記錄所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的存儲地址信息,并且用于控制讀取所述待訪問卷的副本的chunk數(shù)據(jù)的數(shù)據(jù)一致性和控制所述chunk數(shù)據(jù)的IO順序。
所述通過所述待訪問卷的控制器,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本的步驟之前,所述方法還包括:
判斷所述待訪問卷的卷控制器是否安裝在所述第一節(jié)點上,生成第二判斷結(jié)果;當(dāng)所述第二判斷結(jié)果為否時,將所述待訪問卷的卷控制器移動到所述第一節(jié)點上。
所述根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作的步驟具體為:
通過所述待訪問卷的卷控制器,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
所述當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整副本的步驟包括:
當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的任何副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的一完整副本的第二節(jié)點;將所述第二節(jié)點中保存的所述待訪問卷的完整副本復(fù)制到所述第一節(jié)點中;
當(dāng)所述判斷結(jié)果為所述第一節(jié)點上保存有所述待訪問卷的部分副本時,在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的完整副本中除所述部分副本外的其他副本的第三節(jié)點;將所述第三節(jié)點保存的所述待訪問卷的其他副本復(fù)制到所述第一節(jié)點上。
所述從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的一完整副本的第二節(jié)點的步驟之前,所述方法還包括:
將所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值與所述待訪問卷的一完整副本的總占用空間大小進行比較;當(dāng)所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值大于所述待訪問卷的一完整部分的總占用空間大小時,執(zhí)行從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的一完整副本的步驟;否則,結(jié)束處理;
所述在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的完整副本中除所述部分副本外的其他副本的第三節(jié)點的步驟之前,所述方法還包括:
將所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值與所述待訪問卷的完整副本中除所述部分副本外的其他副本的總占用空間大小進行比較;
當(dāng)所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值大于所述待訪問卷的完整副本中除所述部分副本外的其他副本的總占用空間大小時,執(zhí)行在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的完整副本中除所述部分副本外的其他副本的第三節(jié)點的步驟。
所述將所述第二節(jié)點中保存的所述待訪問卷的完整的副本復(fù)制到所述第一節(jié)點中的步驟包括:
步驟一,在所述第二節(jié)點中依次獲取當(dāng)前待復(fù)制的所述待訪問卷的完整副本的第一chunk數(shù)據(jù),作為當(dāng)前待復(fù)制chunk數(shù)據(jù);
步驟二,禁止對所述當(dāng)前待復(fù)制chunk數(shù)據(jù)的讀取和寫入;
步驟三,將所述當(dāng)前待復(fù)制chunk數(shù)據(jù)復(fù)制到所述第一節(jié)點中;
步驟四,解除對所述當(dāng)前待復(fù)制chunk數(shù)據(jù)的讀取和寫入的限制;
步驟五,獲取所述第一chunk數(shù)據(jù)的下一chunk數(shù)據(jù),作為當(dāng)前待復(fù)制chunk數(shù)據(jù),然后跳到所述步驟二,直到所述待訪問卷的完整的副本中所有chunk數(shù)據(jù)復(fù)制完畢。
所述步驟三和步驟四之間,所述方法還包括:
在所述第二節(jié)點中刪除所述當(dāng)前待復(fù)制chunk數(shù)據(jù)。
所述步驟四和步驟五之間,所述方法還包括:
根據(jù)所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的當(dāng)前分布情況,更新所述待訪問卷的卷控制器記錄的所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的存儲地址信息。
所述從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本的步驟之后,所述方法還包括:
將所述待訪問卷的除所述第一節(jié)點保存的完整副本外的其他完整副本,均衡分配在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上。
所述將所述第二節(jié)點中保存的所述待訪問卷的完整副本復(fù)制到所述第一節(jié)點中的步驟包括;
當(dāng)所述第二節(jié)點為至少兩個時,分別為第四節(jié)點和第五節(jié)點,所述第四節(jié)點保存有所述待訪問卷的第一部分副本,所述第五節(jié)點保存有所述待訪問卷的第二部分副本,所述第一部分副本和第二部分副本組合為所述待訪問卷的完整副本;
將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中;將所述第五節(jié)點中保存的第二部分副本復(fù)制到所述第一節(jié)點中。
所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
當(dāng)所述第四節(jié)點為至少兩個時,根據(jù)所述第四節(jié)點的CPU占有率和存儲空間占有率,選擇一第四節(jié)點;
將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
當(dāng)所述第四節(jié)點為至少兩個時,選擇一第四節(jié)點,使得選擇的所述第四節(jié)點在將所述第一部分副本移動到所述第一節(jié)點后并在所述第四節(jié)點中刪除所述第一部分副本后,選擇的所述第四節(jié)點當(dāng)前存儲的所述待訪問卷的副本的chuck數(shù)據(jù)的數(shù)據(jù)量等于閾值;
將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
當(dāng)所述第四節(jié)點為至少兩個時,從所述第四節(jié)點中,選擇存儲的所述第一部分副本的chunk數(shù)據(jù)的數(shù)據(jù)量大于閾值的節(jié)點,作為選擇的所述第四節(jié)點;
將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
所述閾值根據(jù)以下步驟計算:
將所述第一部分副本的chunk數(shù)據(jù)的數(shù)據(jù)量與所述待訪問卷的副本總數(shù)量相乘,生成第一值;
將所述分布式系統(tǒng)的節(jié)點總數(shù)量與1相減,生成第二值;
將所述第一值作為被除數(shù),所述第二值作為除數(shù),對所述被除數(shù)和除數(shù)進行除法運算,生成商和余數(shù);
將所述商與余數(shù)進行相加運算,生成第三值;
將大于或者等于所述除數(shù),并且小于或者等于所述第三值之間的整數(shù),作為所述閾值。
所述方法還包括:
當(dāng)所述判斷結(jié)果為所述第一節(jié)點上保存有所述待訪問卷的全部副本時,根據(jù)客戶端的操作請求,對所述第一節(jié)點上的所述待訪問卷進行操作。
一種分布式系統(tǒng)中卷的訪問裝置,其特征在于,包括:
第一獲取單元,根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
第二獲取單元,獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
判斷單元,判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
第三獲取單元,當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整的副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;
操作單元,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
由上述本發(fā)明的實施例提供的技術(shù)方案可以看出,本發(fā)明實施例中,當(dāng)客戶端連接分布式系統(tǒng)中的第一節(jié)點,則獲取客戶端的待訪問數(shù)據(jù)卷,將待訪問數(shù)據(jù)卷的一副本數(shù)據(jù)保存到第一節(jié)點中,這樣,下次客戶端再訪問同一數(shù)據(jù)卷時,能夠加快訪問時間。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一實施例提供的一種分布式系統(tǒng)中卷的訪問方法的處理流程圖;
圖2為本發(fā)明另一實施例提供的一種分布式系統(tǒng)中卷的訪問方法的處理流程圖;
圖3為本發(fā)明另一實施例提供的一種分布式系統(tǒng)中卷的訪問方法的處理流程圖;
圖4為本發(fā)明實施例提供的一種分布式系統(tǒng)中卷的訪問裝置的連接示意圖。
具體實施方式
下面詳細描述本發(fā)明的實施方式,所述實施方式的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
以下描述本發(fā)明的應(yīng)用場景。本發(fā)明應(yīng)用于分布式系統(tǒng)中,分布式系統(tǒng)包含有多個節(jié)點,客戶端可以通過連接其中的一個節(jié)點訪問分布式系統(tǒng)。分布式系統(tǒng)中虛擬分布有多個卷,每個卷的副本的chunk數(shù)據(jù)分布在分布式系統(tǒng)中的各個節(jié)點上,每個卷有卷控制器,來維護對數(shù)據(jù)卷的操作,不同卷的卷控制器也分散設(shè)置在分布式系統(tǒng)中。以下描述本發(fā)明的設(shè)計理念為:當(dāng)客戶端需要訪問或者讀取分布式系統(tǒng)中的數(shù)據(jù)時,連接分布式當(dāng)客戶端連接分布式系統(tǒng)中的第一節(jié)點,當(dāng)客戶端訪問或者讀取分布式系統(tǒng)中的待訪問數(shù)據(jù)卷時,首先將待訪問數(shù)據(jù)卷的一完整副本數(shù)據(jù)保存到第一節(jié)點中,這樣,下次客戶端再訪問同一數(shù)據(jù)卷時,直接連接第一節(jié)點,并且通過操作第一節(jié)點中的完整副本數(shù)據(jù),就可以直接對待訪問數(shù)據(jù)卷進行操作,不需要從分布式系統(tǒng)中的其他節(jié)點中查找待訪問數(shù)據(jù)卷的副本,加快了訪問時間。也就是說,本發(fā)明中,針對一個客戶端需要經(jīng)常訪問的數(shù)據(jù)卷,可以將數(shù)據(jù)卷復(fù)制到客戶端連接的第一節(jié)點上,通過對數(shù)據(jù)卷的本地化處理,能夠加快訪問數(shù)據(jù)卷的訪問時間。
如圖1所示,為本發(fā)明所示的一種分布式系統(tǒng)中卷的訪問方法,包括:
步驟11,根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
步驟12,獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
步驟13,判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
步驟14,當(dāng)所述判斷結(jié)果為所述第一節(jié)點上保存有所述待訪問卷的全部副本時,根據(jù)客戶端的操作請求,對所述第一節(jié)點上的所述待訪問卷進行操作。
步驟15,當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整的副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;
步驟16,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。其中,操作可以為訪問、讀取、復(fù)制、刪除等。
本發(fā)明實施例中,當(dāng)客戶端連接分布式系統(tǒng)中的第一節(jié)點,則獲取客戶端的待訪問數(shù)據(jù)卷,將待訪問數(shù)據(jù)卷的一副本數(shù)據(jù)保存到第一節(jié)點中,這樣,下次客戶端再訪問同一數(shù)據(jù)卷時,能夠加快訪問時間。
可選的,上述實施例中,步驟11和步驟12之間,所述方法還包括:
判斷所述待訪問卷是否為所述第一終端的經(jīng)常訪問卷;該步驟中,判斷標(biāo)準(zhǔn)可以為根據(jù)所述第一終端在預(yù)定時長內(nèi)對所述待訪問卷的訪問次數(shù),當(dāng)訪問次數(shù)大于預(yù)定次數(shù)閾值時,則判斷結(jié)果為:所述待訪問卷為經(jīng)常訪問卷;或者第一終端對所述待訪問卷的訪問頻率,當(dāng)所述訪問頻率大于預(yù)定頻率閾值時,則判斷結(jié)果為:所述待訪問卷為經(jīng)常訪問卷。
當(dāng)判斷結(jié)果為是時,則執(zhí)行步驟12;否則,執(zhí)行步驟17,根據(jù)所述操作請求,對所述分布式系統(tǒng)中的所述待訪問卷的副本進行操作。
也就是說,當(dāng)前的待訪問卷為第一終端經(jīng)常訪問的卷時,則對待訪問卷進行本地化處理;否則,不進行本地化處理,實現(xiàn)了本地化和容量均衡的相對平衡。
步驟17,將所述待訪問卷的除所述第一節(jié)點保存的完整副本外的其他完整副本,根據(jù)容量均衡原則,均衡分配在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上。
上述實施中,由于本地化的操作處理破壞了分布式系統(tǒng)中的容量均衡,步驟17的處理,使得分布式系統(tǒng)又恢復(fù)到容量相對均衡的狀態(tài)。上述步驟可以在系統(tǒng)比較空閑的狀態(tài)下執(zhí)行。步驟17可以應(yīng)用于下述的各個實施例,本文不再贅述。
如圖2所示,為本發(fā)明所示的一種分布式系統(tǒng)中卷的訪問方法,包括:
步驟21,根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
步驟22,獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
步驟23,判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
步驟24,當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整的副本時,判斷所述待訪問卷的卷控制器是否安裝在所述第一節(jié)點上,生成第二判斷結(jié)果;當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上保存有所述待訪問卷的一完整的副本時,則直接執(zhí)行步驟28。
步驟25,當(dāng)所述第二判斷結(jié)果為否時,將所述待訪問卷的卷控制器移動到所述第一節(jié)點上;當(dāng)所述第二判斷結(jié)果為是時,直接執(zhí)行下一步驟;
步驟26,通過所述待訪問卷的卷控制器,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;所述待訪問卷的卷控制器用于記錄所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的存儲地址信息,并且用于控制讀取所述待訪問卷的副本的chunk數(shù)據(jù)的數(shù)據(jù)一致性和控制所述chunk數(shù)據(jù)的IO順序;
步驟27,通過所述待訪問卷的卷控制器,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
上述實施例中,當(dāng)所述待訪問卷的卷控制器沒有設(shè)置在第一節(jié)點上,則將待訪問卷的卷控制器安裝在第一節(jié)點上,后續(xù)第一終端通過所述待訪問卷的卷控制器讀取待訪問卷時,由于待訪問卷的卷控制器的本地化,能夠加快卷控制器的訪問速度。
如圖3所示,為本發(fā)明所示的一種分布式系統(tǒng)中卷的訪問方法,包括:
步驟31,根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
步驟32,獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
步驟33,判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
步驟341,當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的任何副本時,將所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值與所述待訪問卷的一完整副本的總占用空間大小進行比較;當(dāng)所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值大于所述待訪問卷的一完整部分的總占用空間大小時,執(zhí)行步驟342;否則,執(zhí)行步驟36,根據(jù)客戶端的操作請求,在所述分布式系統(tǒng)中,對所述待操作數(shù)據(jù)塊的副本進行操作。該步驟中,預(yù)訂百分值可以為100%,也可以根據(jù)實際情況進行設(shè)置。
上述實施例中,當(dāng)?shù)谝还?jié)點的當(dāng)前剩余總存儲容量能夠放得下待訪問卷的一完整副本時,才進行本地化操作。
步驟342,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的一完整副本的第二節(jié)點;將所述第二節(jié)點中保存的所述待訪問卷的完整副本復(fù)制到所述第一節(jié)點中,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;然后執(zhí)行35。
步驟343,當(dāng)所述判斷結(jié)果為所述第一節(jié)點上保存有所述待訪問卷的部分副本時,將所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值與所述待訪問卷的完整副本中除所述部分副本外的其他副本的總占用空間大小進行比較;當(dāng)所述第一節(jié)點的當(dāng)前剩余總存儲容量的預(yù)訂百分值大于所述待訪問卷的完整副本中除所述部分副本外的其他副本的總占用空間大小時,執(zhí)行步驟344。否則,執(zhí)行步驟37,根據(jù)客戶端的操作請求,在所述分布式系統(tǒng)中,對所述待操作數(shù)據(jù)塊的副本進行操作。該步驟中,預(yù)訂百分值可以為100%,也可以根據(jù)實際情況進行設(shè)置。
上述實施例中,當(dāng)?shù)谝还?jié)點的當(dāng)前剩余總存儲容量能夠放得下待訪問卷的一完整副本時,才對待訪問卷進行本地化操作。
步驟344,在所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上,查找保存有所述待訪問卷的完整副本中除所述部分副本外的其他副本的第三節(jié)點;將所述第三節(jié)點保存的所述待訪問卷的其他副本復(fù)制到所述第一節(jié)點上,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;
步驟35,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
其中,所述步驟343中的將所述第二節(jié)點中保存的所述待訪問卷的完整的副本復(fù)制到所述第一節(jié)點中的步驟包括:
步驟41,在所述第二節(jié)點中依次獲取當(dāng)前待復(fù)制的所述待訪問卷的完整副本的第一chunk數(shù)據(jù),作為當(dāng)前待復(fù)制chunk數(shù)據(jù);
步驟42,禁止對所述當(dāng)前待復(fù)制chunk數(shù)據(jù)的讀取和寫入;
步驟43,將所述當(dāng)前待復(fù)制chunk數(shù)據(jù)復(fù)制到所述第一節(jié)點中;
步驟44,在所述第二節(jié)點中刪除所述當(dāng)前待復(fù)制chunk數(shù)據(jù)。
步驟45,解除對所述當(dāng)前待復(fù)制chunk數(shù)據(jù)的讀取和寫入的限制;該步驟中,當(dāng)對當(dāng)前待復(fù)制chunk數(shù)據(jù)進行復(fù)制時,對當(dāng)前待復(fù)制chunk數(shù)據(jù)禁止讀取和寫入,保證了副本數(shù)據(jù)的一致性。
步驟46,根據(jù)所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的當(dāng)前分布情況,更新所述待訪問卷的卷控制器記錄的所述待訪問卷的副本的chunk數(shù)據(jù)在所述分布式系統(tǒng)中的節(jié)點的存儲地址信息。
步驟47,獲取所述第一chunk數(shù)據(jù)的下一chunk數(shù)據(jù),作為當(dāng)前待復(fù)制chunk數(shù)據(jù),然后跳到所述步驟42,直到所述待訪問卷的完整的副本中所有chunk數(shù)據(jù)復(fù)制完畢。
步驟342中的所述將所述第二節(jié)點中保存的所述待訪問卷的完整副本復(fù)制到所述第一節(jié)點中的步驟包括;
步驟51,當(dāng)所述第二節(jié)點為至少兩個時,分別為第四節(jié)點和第五節(jié)點,所述第四節(jié)點保存有所述待訪問卷的第一部分副本,所述第五節(jié)點保存有所述待訪問卷的第二部分副本,所述第一部分副本和第二部分副本組合為所述待訪問卷的完整副本;
步驟52,將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中;將所述第五節(jié)點中保存的第二部分副本復(fù)制到所述第一節(jié)點中。
其中,步驟52中的所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
步驟521A,當(dāng)所述第四節(jié)點為至少兩個時,根據(jù)所述第四節(jié)點的CPU占有率和存儲空間占有率,選擇一第四節(jié)點;
步驟522A,將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
上述實施例中,根據(jù)所述第四節(jié)點的CPU占有率和存儲空間占有率,選擇一第四節(jié)點,也就是說,優(yōu)先選擇CPU占有率比較小和存儲空間占有率比較大的第四節(jié)點,避免移動數(shù)據(jù)對第四節(jié)點性能影響比較大,并且,當(dāng)當(dāng)前的存儲空間占有率已經(jīng)比較大時,則移動走一部分數(shù)據(jù)也可以減輕當(dāng)前節(jié)點的負荷。
在另一實施例中,步驟52中的所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
步驟521B,當(dāng)所述第四節(jié)點為至少兩個時,選擇一第四節(jié)點,使得選擇的所述第四節(jié)點在將所述第一部分副本移動到所述第一節(jié)點后并在所述第四節(jié)點中刪除所述第一部分副本后,選擇的所述第四節(jié)點當(dāng)前存儲的所述待訪問卷的副本的chuck數(shù)據(jù)的數(shù)據(jù)量等于閾值;
步驟522B,將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
上述實施例中,通過上述的選擇策略,使得當(dāng)選擇的第四節(jié)點在副本移動以后,可以使得分布式系統(tǒng)盡量維持負載平衡。
在另一實施例中,步驟52中的所述將所述第四節(jié)點的第一部分副本復(fù)制到所述第一節(jié)點中的步驟包括;
步驟521C,當(dāng)所述第四節(jié)點為至少兩個時,從所述第四節(jié)點中,選擇存儲的所述第一部分副本的chunk數(shù)據(jù)的數(shù)據(jù)量大于閾值的節(jié)點,作為選擇的所述第四節(jié)點;
步驟522C,將選擇的所述第四節(jié)點中保存的所述待訪問卷的第一部分副本復(fù)制到所述第一節(jié)點中。
上述實施例中,通過上述的選擇策略,使得當(dāng)選擇的第四節(jié)點在副本移動以后,可以使得分布式系統(tǒng)盡量維持負載平衡。
其中,所述閾值根據(jù)以下步驟計算:
將所述第一部分副本的chunk數(shù)據(jù)的數(shù)據(jù)量與所述待訪問卷的副本總數(shù)量相乘,生成第一值;
將所述分布式系統(tǒng)的節(jié)點總數(shù)量與1相減,生成第二值;
將所述第一值作為被除數(shù),所述第二值作為除數(shù),對所述被除數(shù)和除數(shù)進行除法運算,生成商和余數(shù);
將所述商與余數(shù)進行相加運算,生成第三值;
將大于或者等于所述除數(shù),并且小于或者等于所述第三值之間的整數(shù),作為所述閾值。
如圖4所示,為本發(fā)明的一種分布式系統(tǒng)中卷的訪問裝置,其特征在于,包括:
第一獲取單元61,根據(jù)客戶端的操作請求,獲取所述客戶端待訪問的分布式系統(tǒng)中的待訪問卷;
第二獲取單元62,獲取所述客戶端當(dāng)前連接的所述分布式系統(tǒng)中的第一節(jié)點;
判斷單元63,判斷所述第一節(jié)點上是否保存有所述待訪問卷的一完整的副本,生成第一判斷結(jié)果;
第三獲取單元64,當(dāng)所述第一判斷結(jié)果為所述第一節(jié)點上沒有保存有所述待訪問卷的一完整的副本時,從所述分布式系統(tǒng)中的除所述第一節(jié)點外的其他節(jié)點上獲取所述待訪問卷的副本,使得所述第一節(jié)點上保存有所述待訪問卷的一完整的副本;
操作單元65,根據(jù)所述操作請求,對所述第一節(jié)點上的所述待訪問卷的副本進行操作。
本領(lǐng)域普通技術(shù)人員可以理解:附圖只是一個實施例的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。
通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置或系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置及系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述,僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準(zhǔn)。