欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種分布式存儲的方法和系統(tǒng)與流程

文檔序號:11843387閱讀:216來源:國知局
本發(fā)明涉及通信
技術(shù)領(lǐng)域
:,特別涉及一種分布式存儲的方法和系統(tǒng)。
背景技術(shù)
::分布式存儲系統(tǒng)是由多臺具有有存儲能力的服務(wù)器組成。其中,各服務(wù)器通過網(wǎng)絡(luò)互聯(lián),對外作為一個整體提供存儲服務(wù)。通常情況下,分布式存儲系統(tǒng)有兩種設(shè)計(jì),一種是中心化設(shè)計(jì),此設(shè)計(jì)采用集中部署的中心服務(wù)器進(jìn)行數(shù)據(jù)分布的分配和管理,客戶端訪問數(shù)據(jù)之前向中心服務(wù)器詢問數(shù)據(jù)位置,確定數(shù)據(jù)位置后再向數(shù)據(jù)歸屬的服務(wù)器發(fā)起讀取數(shù)據(jù)的請求。另一種是去中心化設(shè)計(jì),此設(shè)計(jì)是采用分布式算法,如,分布式哈希(DistributedHashTable,DHT)算法,計(jì)算數(shù)據(jù)位置的方式進(jìn)行數(shù)據(jù)分布的管理,客戶端請求數(shù)據(jù)時,根據(jù)請求的數(shù)據(jù)的信息計(jì)算出數(shù)據(jù)歸屬的服務(wù)器,直接向數(shù)據(jù)歸屬的服務(wù)器發(fā)起請求。然而,中心化設(shè)計(jì)所有數(shù)據(jù)管理都在中心節(jié)點(diǎn)進(jìn)行,性能受中心節(jié)點(diǎn)的能力限制,存在性能瓶頸。而采用分布式設(shè)計(jì),雖然解決了中心化設(shè)計(jì)中的性能瓶頸問題,但是去中心化設(shè)計(jì)的數(shù)據(jù)路由采用計(jì)算方式,對于異構(gòu)的分布式存儲系統(tǒng),由于各服務(wù)器的存儲介質(zhì)多樣化,例如,SATA盤、SAS盤、SSD盤、內(nèi)存等,不同存儲介質(zhì)間的存儲能力和岀流能力差異非常大。而且岀流能力越強(qiáng)價格越高,所能配置的容量越小。也就是說存儲能力和岀流能力存在非常大的矛盾,采用單一的算法無法兼顧這種差異性和矛盾性,往往出現(xiàn)容量越大的服務(wù)器存儲的數(shù)據(jù)很少的情況,導(dǎo)致資源的浪費(fèi)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)分布式存儲的方法和系統(tǒng),以解決現(xiàn)有技術(shù)中存儲資源浪費(fèi)的問題。為達(dá)到上述目的,本發(fā)明采用如下技術(shù)方案:一方面,本發(fā)明實(shí)施例提供了一種分布式存儲方法,該方法中,分布式存儲系統(tǒng)的第一存儲節(jié)點(diǎn)在接收到來自應(yīng)用服務(wù)器的寫入內(nèi)容數(shù)據(jù)的請求時,第一存儲節(jié)點(diǎn)可以根據(jù)分布式存儲系統(tǒng)中各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載來確定用于寫入該內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn),然后通知應(yīng)用服務(wù)器將內(nèi)容數(shù)據(jù)寫入確定出的第二存儲節(jié)點(diǎn),并在本地創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。管理數(shù)據(jù)中記錄該內(nèi)容數(shù)據(jù)的存儲位置,即該內(nèi)容數(shù)據(jù)所位于的存儲節(jié)點(diǎn)。在充分考慮各存儲節(jié)點(diǎn)各自的容量情況和岀流情況的基礎(chǔ)上來分布內(nèi)容數(shù)據(jù),避免了采用統(tǒng)一算法進(jìn)行內(nèi)容數(shù)據(jù)分布所導(dǎo)致的資源浪費(fèi)問題。而且,本發(fā)明實(shí)施例中,將應(yīng)用服務(wù)器101通過分布式算法計(jì)算得到的存儲節(jié)點(diǎn),作為該應(yīng)用服務(wù)器101的接入節(jié)點(diǎn)。然后,再由作為接入節(jié)點(diǎn)的存儲節(jié)點(diǎn)根據(jù)各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載來確定存儲內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)。這樣,就可以避免中心化設(shè)計(jì)的瓶頸問題。在一種可能的設(shè)計(jì)中,各存儲節(jié)點(diǎn)的容量負(fù)載是根據(jù)各存儲節(jié)點(diǎn)各自支持的存儲容量以及各自的已用存儲容量計(jì)算得到。各存儲節(jié)點(diǎn)的流量負(fù)載是根據(jù)所述各存儲節(jié)點(diǎn)各自支持的岀流能力以及各自的平均岀流量計(jì)算得到的。在一種可能的設(shè)計(jì)中,可以采用求交集的方式來綜合考慮容量負(fù)載以及流量負(fù)載。具體的,第一存儲節(jié)點(diǎn)找出容量負(fù)載在預(yù)設(shè)容量范圍內(nèi)的存儲節(jié)點(diǎn),形成第一節(jié)點(diǎn)集合。第一存儲節(jié)點(diǎn)還找出流量負(fù)載在預(yù)設(shè)流量范圍內(nèi)的存儲節(jié)點(diǎn),形成第二節(jié)點(diǎn)集合。然后,再從第一節(jié)點(diǎn)集合和第二節(jié)點(diǎn)集合的交集中選擇用于寫入所述數(shù)據(jù)的第二存儲節(jié)點(diǎn)。其中,在選擇的時候,可以隨機(jī)選擇,也可以考慮其它因素進(jìn)行優(yōu)選。下面分別以考慮減少跨節(jié)點(diǎn)訪問以及考慮訪問性能為例進(jìn)行說明。在一種可能的設(shè)計(jì)中,提高訪問性能,從第一節(jié)點(diǎn)集合和第二節(jié)點(diǎn)集合的交集中選擇用于寫入所述數(shù)據(jù)的第二存儲節(jié)點(diǎn)具體包括:第一存儲節(jié)點(diǎn)判斷要寫入的所述數(shù)據(jù)是熱數(shù)據(jù)還是冷數(shù)據(jù);若為熱數(shù)據(jù),所述第一存儲節(jié)點(diǎn)從所述第一節(jié)點(diǎn)集合和第二節(jié)點(diǎn)集合的交集中選擇流量負(fù)載最小的存儲節(jié)點(diǎn)作為寫入所述數(shù)據(jù)的第二存儲節(jié)點(diǎn);若為冷數(shù)據(jù),所述第一存儲節(jié)點(diǎn)從所述第一節(jié)點(diǎn)集合和第二節(jié)點(diǎn)集合的交集中選擇容量負(fù)載最小的存儲節(jié)點(diǎn)作為寫入所述數(shù)據(jù)的第二存儲節(jié)點(diǎn)。在一種可能的設(shè)計(jì)中,為了減少跨節(jié)點(diǎn)訪問,在從交集中選擇用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)時,可進(jìn)一步判斷交集中是否存在第一存儲節(jié)點(diǎn),如果存在第一存儲節(jié)點(diǎn),則優(yōu)選第一存儲節(jié)點(diǎn)作為用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。在一種可能的設(shè)計(jì)中,該方法還包括對內(nèi)容數(shù)據(jù)的訪問過程。其中,第一存儲節(jié)點(diǎn)接收訪問內(nèi)容數(shù)據(jù)的請求,從所述管理數(shù)據(jù)中確定出所述內(nèi)容數(shù)據(jù)存儲于所述第二存儲節(jié)點(diǎn),并將所述訪問所述內(nèi)容數(shù)據(jù)的請求轉(zhuǎn)發(fā)給所述第二存儲節(jié)點(diǎn)。為了提高系統(tǒng)的性能,本發(fā)明實(shí)施例可以將熱內(nèi)容數(shù)據(jù)存儲到岀流能力強(qiáng)的存儲節(jié)點(diǎn),將冷內(nèi)容數(shù)據(jù)存儲到存儲容量大的存儲節(jié)點(diǎn),下面對該過程進(jìn)行具體說明。在一種可能的設(shè)計(jì)中,各存儲節(jié)點(diǎn)可以根據(jù)內(nèi)容數(shù)據(jù)被訪問的次數(shù)確定該內(nèi)容數(shù)據(jù)的訪問熱度,并在該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)中記錄所述內(nèi)容數(shù)據(jù)的訪問熱度,以便后續(xù)根據(jù)該訪問熱度進(jìn)行內(nèi)容數(shù)據(jù)的遷移。在一種可能的設(shè)計(jì)中,第一存儲節(jié)點(diǎn)根據(jù)自身存儲的內(nèi)容數(shù)據(jù)的訪問熱度,識別出熱內(nèi)容數(shù)據(jù),第一存儲節(jié)點(diǎn)將所述熱內(nèi)容數(shù)據(jù)遷移到流量負(fù)載比所述第一存儲節(jié)點(diǎn)的流量負(fù)載小的一個存儲節(jié)點(diǎn),并通知存儲所述熱內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)的存儲節(jié)點(diǎn)更新所述熱內(nèi)容數(shù)據(jù)的存儲位置。在一種可能的設(shè)計(jì)中,所述第一存儲節(jié)點(diǎn)將所述熱內(nèi)容數(shù)據(jù)遷移到流量負(fù)載比所述第一存儲節(jié)點(diǎn)的流量負(fù)載小的一個存儲節(jié)點(diǎn),具體包括:將所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按流量負(fù)載排序,并按照流量負(fù)載大的存儲節(jié)點(diǎn)向流量負(fù)載小的存儲節(jié)點(diǎn)遷移熱內(nèi)容數(shù)據(jù)的原則,確定各存儲節(jié)點(diǎn)間的第一遷移關(guān)系,所述第一遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。所述第一存儲節(jié)點(diǎn)將所述熱數(shù)據(jù)遷移到在所述第一遷移關(guān)系中與所述第一存儲節(jié)點(diǎn)結(jié)成遷移對的遷入存儲節(jié)點(diǎn)中。在一種可能的設(shè)計(jì)中,第一存儲節(jié)點(diǎn)還根據(jù)自身存儲的內(nèi)容數(shù)據(jù)的訪問熱度,識別出的冷內(nèi)容數(shù)據(jù)。第一存儲節(jié)點(diǎn)將冷內(nèi)容數(shù)據(jù)遷移到容量負(fù)載比所述第一存儲節(jié)點(diǎn)的容量負(fù)載小的一個存儲節(jié)點(diǎn),并通知存儲所述冷內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)的存儲節(jié)點(diǎn)更新所述冷內(nèi)容數(shù)據(jù)的存儲位置。在一種可能的設(shè)計(jì)中,所述第一存儲節(jié)點(diǎn)將冷內(nèi)容數(shù)據(jù)遷移到容量負(fù)載比所述第一存儲節(jié)點(diǎn)的容量負(fù)載小的一個存儲節(jié)點(diǎn),具體包括:將所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按容量負(fù)載排序,并按照容量負(fù)載大的存儲節(jié)點(diǎn)向容量負(fù)載小的存儲節(jié)點(diǎn)遷移冷內(nèi)容數(shù)據(jù)的原則,確定各存儲節(jié)點(diǎn)間的第二遷移關(guān)系,所述第二遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。所述第一存儲節(jié)點(diǎn)將所述冷內(nèi)容數(shù)據(jù)遷移在所述第二遷移關(guān)系中與所述第一存儲節(jié)點(diǎn)結(jié)成遷移對的遷入存儲節(jié)點(diǎn)。通過上述遷移過程,能夠釋放高岀流能力的存儲節(jié)點(diǎn)的存儲資源,并且可以將熱內(nèi)容數(shù)據(jù)存儲到岀流能力強(qiáng)的存儲節(jié)點(diǎn),從而提升整個分布式存儲系統(tǒng)的性能。又一方面,本發(fā)明實(shí)施例提供了一種分布式存儲方法,該方法可以應(yīng)用于分布式存儲系統(tǒng)擴(kuò)容的場景下。其中,分布式系統(tǒng)中存儲有內(nèi)容數(shù)據(jù)以及各內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),每個管理數(shù)據(jù)中包括與所述管理數(shù)據(jù)對應(yīng)的內(nèi)容數(shù)據(jù)的存儲位置;所述管理數(shù)據(jù)通過分布式算法分布在所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)中,所述內(nèi)容數(shù)據(jù)按照各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載進(jìn)行分布。在分布式存儲系統(tǒng)擴(kuò)容時,分布式存儲系統(tǒng)通過分布式算法對各內(nèi)容數(shù)據(jù)的分布進(jìn)行重新計(jì)算。將計(jì)算出的應(yīng)歸屬于擴(kuò)容存儲節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)保留在存儲所述內(nèi)容數(shù)據(jù)的原存儲節(jié)點(diǎn),將計(jì)算出的所述內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)遷移到所述擴(kuò)容存儲節(jié)點(diǎn)。在本發(fā)明實(shí)施例中,通過為每個內(nèi)容數(shù)據(jù)創(chuàng)建管理數(shù)據(jù),在擴(kuò)容時,僅對管理數(shù)據(jù)進(jìn)行遷移,而不真正遷移內(nèi)容數(shù)據(jù)本身。由于管理數(shù)據(jù)遠(yuǎn)小于內(nèi)容數(shù)據(jù)本身,因此遷移量非常小,大大縮短了遷移時長,使得分布式存儲系統(tǒng)在擴(kuò)容后可以快速的提供服務(wù)。此外,由于不同存儲介質(zhì)的存儲能力和岀流能力不同,勢必存在存儲能力相對更強(qiáng)或者岀流能力相對更強(qiáng)的節(jié)點(diǎn)。因此,為了提高對內(nèi)容數(shù)據(jù)的操作效率,本發(fā)明實(shí)施例還對內(nèi)容數(shù)據(jù)的分布進(jìn)行了進(jìn)一步的優(yōu)化:將熱內(nèi)容數(shù)據(jù)遷移到岀流能力強(qiáng)的存儲節(jié)點(diǎn),將冷內(nèi)容數(shù)據(jù)遷移到存儲能力強(qiáng)的存儲節(jié)點(diǎn)。下面對該遷移過程在進(jìn)行說明。在一種可能的設(shè)計(jì)中,分布式存儲系統(tǒng)將各存儲節(jié)點(diǎn)按流量負(fù)載排序,并按照流量負(fù)載大的存儲節(jié)點(diǎn)向流量負(fù)載小的存儲節(jié)點(diǎn)遷移熱內(nèi)容數(shù)據(jù)的原則,確定各存儲節(jié)點(diǎn)間的第一遷移關(guān)系,所述第一遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按照所述第一遷移關(guān)系進(jìn)行熱內(nèi)容數(shù)據(jù)的遷移,并在所述熱內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)中將所述熱內(nèi)容數(shù)據(jù)的存儲位置更新為遷移后的存儲位置。在一種可能的設(shè)計(jì)中,分布式存儲系統(tǒng)還將所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按容量負(fù)載排序,并按照容量負(fù)載大的存儲節(jié)點(diǎn)向容量負(fù)載小的存儲節(jié)點(diǎn)遷移冷內(nèi)容數(shù)據(jù)的原則,確定各存儲節(jié)點(diǎn)間的第二遷移關(guān)系,所述第二遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按照所述第二遷移關(guān)系進(jìn)行冷內(nèi)容數(shù)據(jù)的遷移,并在所述冷內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)中將所述冷內(nèi)容數(shù)據(jù)的存儲位置更新為遷移后的存儲位置。在一種可能的設(shè)計(jì)中,所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按照所述第一遷移關(guān)系進(jìn)行熱內(nèi)容數(shù)據(jù)的遷移具體包括:第一遷移關(guān)系中的遷出存儲節(jié)點(diǎn)識別出本節(jié)點(diǎn)存儲的內(nèi)容數(shù)據(jù)中的熱內(nèi)容數(shù)據(jù)。將識別出的熱內(nèi)容數(shù)據(jù)遷移到在所述第一遷移關(guān)系中與所述遷出存儲節(jié)點(diǎn)結(jié)成遷移對的遷入存儲節(jié)點(diǎn)中。在一種可能的設(shè)計(jì)中,所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)按照所述第二遷移關(guān)系進(jìn)行冷內(nèi)容數(shù)據(jù)的遷移具體包括:第二遷移關(guān)系中的遷出存儲節(jié)點(diǎn)識別出自身存儲的內(nèi)容數(shù)據(jù)中的冷內(nèi)容數(shù)據(jù)。將識別出的冷數(shù)據(jù)遷移到在所述第二遷移關(guān)系中與所述遷出存儲節(jié)點(diǎn)結(jié)成遷移對的遷入存儲節(jié)點(diǎn)中。又一方面,本發(fā)明實(shí)施例提供了一種存儲節(jié)點(diǎn),該存儲節(jié)點(diǎn)具有實(shí)現(xiàn)上述方法實(shí)施例中第一存儲節(jié)點(diǎn)行為的功能。所述功能可以通過硬件實(shí)現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。所述硬件或軟件包括一個或多個與上述功能相對應(yīng)的部件(比如,基于分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載確定內(nèi)容數(shù)據(jù)的分布)。又一方面,本發(fā)明實(shí)施例提供了一種分布式存儲系統(tǒng),該分布式存儲系統(tǒng)具有實(shí)現(xiàn)上述方法實(shí)施例中分布式存儲系統(tǒng)行為的功能(包括分布式存儲系統(tǒng)中各存儲節(jié)點(diǎn)的行為的功能)。所述功能可以通過硬件實(shí)現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。所述硬件或軟件包括一個或多個與上述功能相對應(yīng)的部件(比如,擴(kuò)容遷移,冷熱數(shù)據(jù)遷移等)。再一方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)存儲介質(zhì),用于儲存為上述第一存儲節(jié)點(diǎn)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方面為第一存儲節(jié)點(diǎn)所設(shè)計(jì)的程序。再一方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)存儲介質(zhì),用于儲存為上述分布式存儲系統(tǒng)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述方面為分布式存儲系統(tǒng)所設(shè)計(jì)的程序。本發(fā)明實(shí)施例通過將頁面組件設(shè)計(jì)成包括數(shù)據(jù)服務(wù)和配置的方式,從而可以通過配置的方式來進(jìn)行頁面的修改,將現(xiàn)有技術(shù)中的需要硬代碼寫JS代碼部分的工作完全變成了配置,大大縮短交付時間。在上述實(shí)施例中,通過采用分布式算法計(jì)算得到的存儲節(jié)點(diǎn)來創(chuàng)建內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),這樣就可以將對內(nèi)容數(shù)據(jù)的管理分布到分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)上,避免了采用中心節(jié)點(diǎn)進(jìn)行管理的造成的性能瓶頸問題。而對內(nèi)容數(shù)據(jù)的分布則根據(jù)各存儲節(jié)點(diǎn)各自的硬件能力(如,存儲能力、岀流能力)進(jìn)行分布,則避免了在異構(gòu)環(huán)境下,采用單一的分布式算法所造成的資源浪費(fèi)問題。附圖說明圖1為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)分布式存儲的網(wǎng)絡(luò)架構(gòu)圖;圖2為本發(fā)明實(shí)施例提供的一種的計(jì)算機(jī)設(shè)備示意圖;圖3為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)分布式存儲的方法流程圖。圖3-1為本發(fā)明實(shí)施例提供的一種數(shù)字空間的示意圖;圖3-2為本發(fā)明實(shí)施例提供的一種內(nèi)容數(shù)據(jù)映射的示意圖;圖3-3為本發(fā)明實(shí)施例提供的一種存儲節(jié)點(diǎn)映射的示意圖;圖4為本發(fā)明實(shí)施例提供的一種對內(nèi)容數(shù)據(jù)的訪問流程圖;圖5為本發(fā)明實(shí)施例提供的一種分布式存儲系統(tǒng)進(jìn)行擴(kuò)容的示意圖;圖6為本發(fā)明實(shí)施例提供的一種擴(kuò)容后的遷移示意圖;圖7為本發(fā)明實(shí)施例提供的一種存儲節(jié)點(diǎn)的結(jié)構(gòu)圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例描述的網(wǎng)絡(luò)架構(gòu)以及業(yè)務(wù)場景是為了更加清楚的說明本發(fā)明實(shí)施例的技術(shù)方案,并不構(gòu)成對于本發(fā)明實(shí)施例提供的技術(shù)方案的限定,本領(lǐng)域普通技術(shù)人員可知,隨著網(wǎng)絡(luò)架構(gòu)的演變和新業(yè)務(wù)場景的出現(xiàn),本發(fā)明實(shí)施例提供的技術(shù)方案對于類似的技術(shù)問題,同樣適用。參見圖1為本發(fā)明實(shí)施例提供的實(shí)現(xiàn)分布式存儲的網(wǎng)絡(luò)架構(gòu)圖,該網(wǎng)絡(luò)架構(gòu)中包括分布式存儲系統(tǒng)102和至少一個應(yīng)用服務(wù)器101。分布式存儲系統(tǒng)102中包括兩個或兩個以上存儲節(jié)點(diǎn)(圖1中僅示出三個作為舉例)。其中,存儲節(jié)點(diǎn)可以是具有存儲能力的服務(wù)器。各存儲節(jié)點(diǎn)通過網(wǎng)絡(luò)互聯(lián),對外作為一個整體提供存儲服務(wù)。在圖1所示的實(shí)施例中,應(yīng)用服務(wù)器101和分布式存儲系統(tǒng)102的存儲節(jié)點(diǎn)均可以連接到網(wǎng)絡(luò)中,通過網(wǎng)絡(luò)進(jìn)行通信。該網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)(Internet)或局域網(wǎng)或無線網(wǎng)絡(luò)等其他類型的網(wǎng)絡(luò)。應(yīng)用服務(wù)器101可以訪問分布式存儲系統(tǒng)102中的存儲節(jié)點(diǎn),進(jìn)行數(shù)據(jù)的寫入或讀取等操作。在具體實(shí)現(xiàn)時,應(yīng)用服務(wù)器101可以采用分布式算法,例如,分布式哈希表(distributedhashtable,DHT)算法,計(jì)算需要寫入或讀取的內(nèi)容數(shù)據(jù)應(yīng)歸屬的存儲節(jié)點(diǎn),并通過訪問該存儲節(jié)點(diǎn)進(jìn)行內(nèi)容數(shù)據(jù)的寫入或讀取操作。其中,可在應(yīng)用服務(wù)器101上部署與存儲節(jié)點(diǎn)進(jìn)行交互的客戶端。由該客戶端進(jìn)行計(jì)算處理,從而向應(yīng)用服務(wù)器101中的應(yīng)用屏蔽分布式存儲系統(tǒng)102內(nèi)部的組網(wǎng)結(jié)構(gòu)。分布式存儲系統(tǒng)102的存儲節(jié)點(diǎn)在接收到來自應(yīng)用服務(wù)器101的寫入內(nèi)容數(shù)據(jù)的請求時,存儲節(jié)點(diǎn)可以根據(jù)分布式存儲系統(tǒng)102中各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載來確定用于寫入該內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn),然后通知應(yīng)用服務(wù)器101將內(nèi)容數(shù)據(jù)寫入確定出的存儲節(jié)點(diǎn),并在本地創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。管理數(shù)據(jù)中記錄該內(nèi)容數(shù)據(jù)的存儲位置,即該內(nèi)容數(shù)據(jù)所位于的存儲節(jié)點(diǎn)。應(yīng)用服務(wù)器101在訪問該內(nèi)容數(shù)據(jù)時,采用寫入該內(nèi)容數(shù)據(jù)時所使用的分布式算法計(jì)算該內(nèi)容數(shù)據(jù)應(yīng)歸屬的存儲節(jié)點(diǎn),并向計(jì)算出的存儲節(jié)點(diǎn)發(fā)送訪問該內(nèi)容數(shù)據(jù)的請求。接收到該請求的存儲節(jié)點(diǎn)通過查找該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),獲知該內(nèi)容數(shù)據(jù)的所位于的存儲節(jié)點(diǎn),然后將該請求轉(zhuǎn)發(fā)到存儲該內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn),由存儲該內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)向應(yīng)用服務(wù)器101提供該內(nèi)容數(shù)據(jù)。本發(fā)明實(shí)施例可以應(yīng)用于異構(gòu)的分布式存儲系統(tǒng)。在異構(gòu)的分布式系統(tǒng)中,不同存儲節(jié)點(diǎn)可以采用不同的存儲介質(zhì),例如,SATA盤、SAS盤、SSD盤、內(nèi)存等。不同存儲介質(zhì)的存儲能力(如,容量大小)和岀流能力不同。其中,岀流能力依賴于存儲介質(zhì)的硬件能力,如,存儲介質(zhì)的硬件所能支持的單位時間的岀流量。本發(fā)明實(shí)施例在分布內(nèi)容數(shù)據(jù)的過程中,可以基于各存儲節(jié)點(diǎn)各自支持的存儲容量以及各自的已用存儲容量來計(jì)算得到各存儲節(jié)點(diǎn)的容量負(fù)載,以及可以基于各存儲節(jié)點(diǎn)各自支持的岀流能力以及各自的平均岀流量來計(jì)算得到各存儲節(jié)點(diǎn)的流量負(fù)載,從而在充分考慮各存儲節(jié)點(diǎn)各自的容量情況和岀流情況的基礎(chǔ)上來分布內(nèi)容數(shù)據(jù),避免了采用統(tǒng)一算法進(jìn)行內(nèi)容數(shù)據(jù)分布所導(dǎo)致的資源浪費(fèi)問題。而且,本發(fā)明實(shí)施例中,將應(yīng)用服務(wù)器101通過分布式算法計(jì)算得到的存儲節(jié)點(diǎn),作為該應(yīng)用服務(wù)器101的接入節(jié)點(diǎn)。然后,再由作為接入節(jié)點(diǎn)的存儲節(jié)點(diǎn)根據(jù)各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載來確定存儲內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)。這樣,就可以避免中心化設(shè)計(jì)的瓶頸問題。需要說明的是,圖1中所示的各存儲節(jié)點(diǎn)可以采用圖2中的計(jì)算機(jī)設(shè)備來實(shí)現(xiàn)。圖2為所示為本發(fā)明實(shí)施例提供的計(jì)算機(jī)設(shè)備示意圖。計(jì)算機(jī)設(shè)備200包括至少一個處理器201,通信總線202,存儲器203以及至少一個通信接口204。處理器201可以是一個通用中央處理器(CPU),微處理器,特定應(yīng)用集成電路(application-specificintegratedcircuit,ASIC),或一個或多個用于控制本發(fā)明方案程序執(zhí)行的集成電路。通信總線202可包括一通路,在上述組件之間傳送信息。所述通信接口204,適用任何收發(fā)器一類的裝置,用于與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WirelessLocalAreaNetworks,WLAN)等,在本發(fā)明實(shí)施例中,通信接口204可用于與應(yīng)用服務(wù)器以及與分布式存儲系統(tǒng)中的其它存儲節(jié)點(diǎn)進(jìn)行通信。存儲器203可以是只讀存儲器(read-onlymemory,ROM)或可存儲靜態(tài)信息和指令的其他類型的靜態(tài)存儲設(shè)備,隨機(jī)存取存儲器(randomaccessmemory,RAM)或者可存儲信息和指令的其他類型的動態(tài)存儲設(shè)備,也可以是電可擦可編程只讀存儲器(ElectricallyErasableProgrammableRead-OnlyMemory,EEPROM)、只讀光盤(CompactDiscRead-OnlyMemory,CD-ROM)或其他光盤存儲、光碟存儲(包括壓縮光碟、激光碟、光碟、數(shù)字通用光碟、藍(lán)光光碟等)、磁盤存儲介質(zhì)或者其他磁存儲設(shè)備、或者能夠用于攜帶或存儲具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計(jì)算機(jī)存取的任何其他介質(zhì),但不限于此。存儲器可以是獨(dú)立存在,通過總線與處理器相連接。存儲器也可以和處理器集成在一起。其中,所述存儲器203用于存儲執(zhí)行本發(fā)明方案的應(yīng)用程序代碼,并由處理器201來控制執(zhí)行。所述處理器201用于執(zhí)行所述存儲器203中存儲的應(yīng)用程序代碼(比如實(shí)現(xiàn)數(shù)據(jù)管理器的程序代碼,實(shí)現(xiàn)遷移管理器的程序代碼等)。本發(fā)明實(shí)施例中,存儲器還用于存儲內(nèi)容數(shù)據(jù)以及內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。在具體實(shí)現(xiàn)中,作為一種實(shí)施例,處理器201可以包括一個或多個CPU,例如圖2中的CPU0和CPU1。在具體實(shí)現(xiàn)中,作為一種實(shí)施例,計(jì)算機(jī)設(shè)備200可以包括多個處理器,例如圖2中示出兩個處理器201。這些處理器中的每一個可以是一個單核(single-CPU)處理器,也可以是一個多核(multi-CPU)處理器。這里的處理器可以指一個或多個設(shè)備、電路、和/或用于處理數(shù)據(jù)(例如計(jì)算機(jī)程序指令)的處理核。上述的計(jì)算機(jī)設(shè)備200可以是一個通用計(jì)算機(jī)設(shè)備或者是一個專用計(jì)算機(jī)設(shè)備。在具體實(shí)現(xiàn)中,計(jì)算機(jī)設(shè)備200可以是網(wǎng)絡(luò)服務(wù)器、通信設(shè)備、嵌入式設(shè)備或有圖2中類似結(jié)構(gòu)的設(shè)備。本發(fā)明實(shí)施例不限定計(jì)算機(jī)設(shè)備200的類型。圖3為本發(fā)明實(shí)施例提供的實(shí)現(xiàn)分布式存儲的方法流程圖。如圖2所示,本實(shí)施例為內(nèi)容數(shù)據(jù)的寫入過程,該過程包括:S301,應(yīng)用服務(wù)器向分布式系統(tǒng)中的第一存儲節(jié)點(diǎn)發(fā)送寫入內(nèi)容數(shù)據(jù)的請求。該請求消息中可攜帶該內(nèi)容數(shù)據(jù)的描述信息,例如,內(nèi)容數(shù)據(jù)的標(biāo)識、大小或者類型等。分布式系統(tǒng)中包括有至少兩個存儲節(jié)點(diǎn)。應(yīng)用服務(wù)器要寫入內(nèi)容數(shù)據(jù)時,可在分布式系統(tǒng)中確定一個用于寫入該內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)。其中,應(yīng)用服務(wù)器可以采用分布式算法(如,DHT算法)來計(jì)算用于寫入該內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)。本實(shí)施例將應(yīng)用服務(wù)器確定出的存儲節(jié)點(diǎn)稱為第一存儲節(jié)點(diǎn)。下面以DHT算法為例,對利用分布式算法計(jì)算內(nèi)容數(shù)據(jù)的分布的原理進(jìn)行詳細(xì)介紹。分布式存儲系統(tǒng)按照常用的哈希(hash)算法來將對應(yīng)的關(guān)鍵字(key)哈希到一個具有2^32次方個桶的空間中,即0~(2^32)-1的數(shù)字空間中。這些數(shù)字可以頭尾相連形成成一個閉合的環(huán)形。如下圖3-1所示。分布式存儲系統(tǒng)可以將內(nèi)容數(shù)據(jù)通過一定的hash算法處理后映射到圖5所示的環(huán)上。現(xiàn)在以object1、object2、object3、object4四個內(nèi)容數(shù)據(jù)為例對該映射過程進(jìn)行說明。首先,通過特定的Hash函數(shù)計(jì)算出object1、object2、object3、object4四個內(nèi)容數(shù)據(jù)對應(yīng)的key值,其key值如下:Hash(object1)=key1;Hash(object2)=key2;Hash(object3)=key3;Hash(object4)=key4;然后將計(jì)算出的key值散列到Hash環(huán)上。如下圖3-2所示。分布式存儲系統(tǒng)再將存儲節(jié)點(diǎn)通過hash算法映射到環(huán)上。具體的,分布式存儲系統(tǒng)通過使用與映射內(nèi)容數(shù)據(jù)一樣的Hash算法將存儲節(jié)點(diǎn)也映射到環(huán)中(一般情況下。對存儲節(jié)點(diǎn)的hash計(jì)算可采用存儲節(jié)點(diǎn)的IP或者存儲節(jié)點(diǎn)的唯一的別名作為輸入值),然后以順時針的方向轉(zhuǎn)動,將所有內(nèi)容數(shù)據(jù)存儲到離自己最近的存儲節(jié)點(diǎn)中。假設(shè)現(xiàn)在有NODE1,NODE2,NODE3三個存儲節(jié)點(diǎn),通過Hash算法得到對應(yīng)的KEY值,如下:Hash(NODE1)=KEY1;Hash(NODE2)=KEY2;Hash(NODE3)=KEY3;將得到的KEY值映射到環(huán)中,其示意圖如圖3-3所示。通過圖3-3可以看出內(nèi)容數(shù)據(jù)與存儲節(jié)點(diǎn)處于同一哈??臻g中,這樣按順時針轉(zhuǎn)動object1存儲到了NODE1中,object3存儲到了NODE2中,object2、object4存儲到了NODE3中。因此,通過算出內(nèi)容數(shù)據(jù)的hash值就能快速的定位到該內(nèi)容數(shù)據(jù)應(yīng)該歸屬的存儲節(jié)點(diǎn)了。S302,第一存儲節(jié)點(diǎn)獲取分布式系統(tǒng)中的各存儲節(jié)點(diǎn)的容量負(fù)載以及流量負(fù)載。分布式系統(tǒng)中的各存儲節(jié)點(diǎn)可定期或?qū)崟r的計(jì)算自身的容量負(fù)載和流量負(fù)載。分布式系統(tǒng)中的各存儲節(jié)點(diǎn)可以定期將各自的容量負(fù)載以及流量負(fù)載同步到其它存儲節(jié)點(diǎn)?;蛘?,也可以采用實(shí)時請求的方式,即,在每次接收到寫入內(nèi)容數(shù)據(jù)的請求時,由接收到該請求的存儲節(jié)點(diǎn)向其它各存儲節(jié)點(diǎn)查詢。如果采用定期同步的方式,第一存儲節(jié)點(diǎn)則從已同步數(shù)據(jù)中獲取各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載。如果采用實(shí)時請求的方式,第一存儲節(jié)點(diǎn)則通過向各存儲節(jié)點(diǎn)發(fā)送查詢請求來獲取各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載。其中,各存儲節(jié)點(diǎn)的容量負(fù)載可以根據(jù)各存儲節(jié)點(diǎn)各自支持的存儲容量以及各自的已用存儲容量計(jì)算得到。例如,可以采用已用存儲容量除以支持的存儲容量得到已用容量占比,以該已用容量占比來表示容量負(fù)載。也可以先計(jì)算得到剩余存儲容量,由剩余存儲容量除以支持的存儲容量得到剩余容量占比,以該剩余容量占比來表示容量負(fù)載。不同的是,采用已用容量占比來表示時,已用容量占比越大,表示容量負(fù)載越大。采用剩余容量占比來表示時,剩余容量占比越大,表示容量負(fù)載越小。各存儲節(jié)點(diǎn)的流量負(fù)載可以根據(jù)所述各存儲節(jié)點(diǎn)各自支持的岀流能力以及各自的平均岀流量計(jì)算得到的。其中,岀流能力可以是存儲節(jié)點(diǎn)的硬件能力所能支持的單位時間內(nèi)的出流量。平均岀流量可以是最近統(tǒng)計(jì)周期內(nèi)的單位時間的平均岀流量。統(tǒng)計(jì)周期的時長可以預(yù)先配置。在計(jì)算流量負(fù)載時,可用平均岀流量除以存儲節(jié)點(diǎn)的岀流能力得到岀流占比,以該岀流占比來表示流量負(fù)載。岀流占比越大,表示流量負(fù)載越大。當(dāng)然,也可以以岀流能力減去平均岀流量得到剩余岀流量,再以剩余出流量除以存儲節(jié)點(diǎn)的岀流能力得到剩余流量占比,以該剩余流量占比來表示流量負(fù)載。剩余流量占比越大,表示流量負(fù)載越小。需要說明的是,上述容量負(fù)載以及流量負(fù)載的計(jì)算算法只是舉例,也可以采用其它算法進(jìn)行計(jì)算,這里不做限制。后續(xù)在本發(fā)明實(shí)施例中,以已用容量占比來表示容量負(fù)載,以及以岀流占比來表示流量負(fù)載為例進(jìn)行說明。S303,第一存儲節(jié)點(diǎn)基于獲取到的容量負(fù)載以及流量負(fù)載確定用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。本發(fā)明實(shí)施例中,將基于容量負(fù)載以及流量負(fù)載確定出的用于寫入內(nèi)容數(shù)據(jù)的存儲節(jié)點(diǎn)稱為第二存儲節(jié)點(diǎn)。下面對如何確定出第二存儲節(jié)點(diǎn)進(jìn)行說明。假設(shè)分布式存儲系統(tǒng)中的存儲節(jié)點(diǎn)的集合為Set1。第一存儲節(jié)點(diǎn)從Set1中找出容量負(fù)載在預(yù)設(shè)容量范圍內(nèi)的存儲節(jié)點(diǎn)(例如,選擇出容量占比低于70%的存儲節(jié)點(diǎn),其中,容量占比表示容量負(fù)載,低于70%為預(yù)設(shè)容量范圍,該范圍可配置),形成第一節(jié)點(diǎn)集合Set2。需要說明的是,預(yù)設(shè)容量范圍也可以不是固定值,而是一個表達(dá)式。例如,預(yù)設(shè)容量范圍可表示為:容量占比<(1-內(nèi)容數(shù)據(jù)大小/容量大小),其中,容量占比表示當(dāng)前的容量負(fù)載,內(nèi)容數(shù)據(jù)大小為本次要寫入的內(nèi)容數(shù)據(jù)的大小。這樣,對于每次寫入的內(nèi)容數(shù)據(jù)的大小的不同,符合條件的存儲節(jié)點(diǎn)也不同。第一存儲節(jié)點(diǎn)從Set1中找出流量負(fù)載在預(yù)設(shè)流量范圍內(nèi)的存儲節(jié)點(diǎn)(例如,選擇出岀流占比低于80%的存儲節(jié)點(diǎn),其中,岀流占比表示流量負(fù)載,低于80%為預(yù)設(shè)流量范圍,該范圍可配置),形成第二節(jié)點(diǎn)集合Set3。對Set2和Set3的求交集,得到集合set4。第一存儲節(jié)點(diǎn)從交集set4中選擇用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。其中,在選擇的時候,可以隨機(jī)選擇,也可以考慮其它因素進(jìn)行優(yōu)選。下面分別以考慮減少跨節(jié)點(diǎn)訪問以及考慮訪問性能為例進(jìn)行說明。為了減少跨節(jié)點(diǎn)訪問,在從交集中選擇用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)時,可進(jìn)一步判斷交集中是否存在第一存儲節(jié)點(diǎn),如果存在第一存儲節(jié)點(diǎn),則優(yōu)選第一存儲節(jié)點(diǎn)作為用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。為了提高訪問性能,可以預(yù)先判斷要寫入的內(nèi)容數(shù)據(jù)是熱內(nèi)容數(shù)據(jù)還是冷內(nèi)容數(shù)據(jù)。若為要寫入的內(nèi)容數(shù)據(jù)熱內(nèi)容數(shù)據(jù),則從交集中選擇流量負(fù)載最小的存儲節(jié)點(diǎn)作為寫入所述內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。若要寫入的內(nèi)容數(shù)據(jù)為冷內(nèi)容數(shù)據(jù),則從交集中選擇容量負(fù)載最小的存儲節(jié)點(diǎn)作為寫入所述內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。在判斷內(nèi)容數(shù)據(jù)是熱內(nèi)容數(shù)據(jù)還是冷內(nèi)容數(shù)據(jù)時,可以根據(jù)要寫入的內(nèi)容數(shù)據(jù)的類型來判斷。各存儲節(jié)點(diǎn)中可預(yù)先配置哪些類型的內(nèi)容數(shù)據(jù)為熱內(nèi)容數(shù)據(jù),哪些類型的內(nèi)容數(shù)據(jù)為冷內(nèi)容數(shù)據(jù)。需要說明的是,基于各節(jié)點(diǎn)的容量負(fù)載以及流量負(fù)載動態(tài)計(jì)算內(nèi)容數(shù)據(jù)應(yīng)該寫入的存儲節(jié)點(diǎn)的算法可以有多種,上述求交集的選擇方式只是一種舉例。S304,第一存儲節(jié)點(diǎn)通知應(yīng)用服務(wù)器將內(nèi)容數(shù)據(jù)寫入到第二存儲節(jié)點(diǎn)。S305,應(yīng)用服務(wù)器將內(nèi)容數(shù)據(jù)寫入到第二存儲節(jié)點(diǎn)。內(nèi)容數(shù)據(jù)的寫入過程可采用現(xiàn)有技術(shù),這里不再贅述。S306,第二存儲節(jié)點(diǎn)在內(nèi)容數(shù)據(jù)寫入完成后,通知第一存儲節(jié)點(diǎn)創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。在一個實(shí)施例中,第二存儲節(jié)點(diǎn)可以采用與應(yīng)用服務(wù)器一致的分布式算法來計(jì)算得到用于存儲該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)的第一存儲節(jié)點(diǎn)。在另一個實(shí)施例中,也可以在步驟305中,由應(yīng)用服務(wù)器將第一存儲節(jié)點(diǎn)的標(biāo)識發(fā)送給第二存儲節(jié)點(diǎn),從而使第二存儲節(jié)點(diǎn)獲知用于存儲該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)的第一存儲節(jié)點(diǎn)。S307,第一存儲節(jié)點(diǎn)創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),在管理數(shù)據(jù)中記錄該內(nèi)容數(shù)據(jù)的存儲位置(即記錄該內(nèi)容數(shù)據(jù)的存儲于第二存儲節(jié)點(diǎn))。需要說明的是,步驟S306可以是可選的,第一存儲節(jié)點(diǎn)可以在步驟304的通知應(yīng)用服務(wù)器將內(nèi)容數(shù)據(jù)寫入到第二存儲節(jié)點(diǎn)后,直接創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。在上述實(shí)施例中,通過采用分布式算法計(jì)算得到的存儲節(jié)點(diǎn)來創(chuàng)建內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),這樣就可以將對內(nèi)容數(shù)據(jù)的管理分布到分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)上,避免了采用中心節(jié)點(diǎn)進(jìn)行管理的造成的性能瓶頸問題。而對內(nèi)容數(shù)據(jù)的分布則根據(jù)各存儲節(jié)點(diǎn)各自的硬件能力(如,存儲能力、岀流能力)進(jìn)行分布,則避免了在異構(gòu)環(huán)境下,采用單一的分布式算法所造成的資源浪費(fèi)問題。下面對圖3中寫入的內(nèi)容數(shù)據(jù)的訪問過程進(jìn)行詳細(xì)介紹。圖4為本發(fā)明實(shí)施例提供的對內(nèi)容數(shù)據(jù)的訪問流程圖。如圖4所示,該訪問過程包括:S401,應(yīng)用服務(wù)器向第一存儲節(jié)點(diǎn)發(fā)起訪問內(nèi)容數(shù)據(jù)的請求。應(yīng)用服務(wù)器可采用與寫入該內(nèi)容數(shù)據(jù)時一致的分布式算法計(jì)算出存儲有該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)的第一存儲節(jié)點(diǎn),并向計(jì)算出的第一存儲節(jié)點(diǎn)發(fā)起訪問請求,該訪問請求中攜帶該內(nèi)容數(shù)據(jù)的標(biāo)識、訪問操作類型以及應(yīng)用服務(wù)器標(biāo)識。其中,訪問操作類型包括讀取內(nèi)容數(shù)據(jù)等。S402,第一存儲節(jié)點(diǎn)確定被訪問的內(nèi)容數(shù)據(jù)的存儲位置。第一存儲節(jié)點(diǎn)根據(jù)內(nèi)容數(shù)據(jù)的標(biāo)識查找該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),從管理數(shù)據(jù)中獲得該內(nèi)容數(shù)據(jù)的存儲位置。S403,第一存儲節(jié)點(diǎn)將訪問該內(nèi)容數(shù)據(jù)的請求轉(zhuǎn)發(fā)給存儲有該內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)。S404,第二存儲節(jié)點(diǎn)將請求訪問的內(nèi)容數(shù)據(jù)發(fā)送給應(yīng)用服務(wù)器。其中,第二存儲節(jié)點(diǎn)可以訪問請求中攜帶的內(nèi)容數(shù)據(jù)的標(biāo)識在本地提取出該內(nèi)容數(shù)據(jù),并根據(jù)訪問請求中攜帶的應(yīng)用服務(wù)器的標(biāo)識將提取出的內(nèi)容數(shù)據(jù)發(fā)送給應(yīng)用服務(wù)器。需要說明的是,上述步驟S404中,第二存儲節(jié)點(diǎn)也可以將內(nèi)容數(shù)據(jù)返回給第一存儲節(jié)點(diǎn),由第一存儲節(jié)點(diǎn)將內(nèi)容數(shù)據(jù)轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器。在圖4所示的訪問過程中,應(yīng)用服務(wù)器可以通過分布式算法找到內(nèi)容數(shù)據(jù)的管理數(shù)據(jù),從而通過管理數(shù)據(jù)找到內(nèi)容數(shù)據(jù)。也就是說,在本發(fā)明實(shí)施例中,內(nèi)容數(shù)據(jù)的存取可以脫離分布式算法的限制,而依據(jù)各存儲節(jié)點(diǎn)各自的能力進(jìn)行分布,提高了資源的可用性。此外,采用本發(fā)明實(shí)施例的方案,還可以進(jìn)一步對分布式存儲系統(tǒng)的擴(kuò)容進(jìn)行優(yōu)化。根據(jù)上述實(shí)施例可知,分布式系統(tǒng)中存儲有內(nèi)容數(shù)據(jù)以及各內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)。每個管理數(shù)據(jù)中包括與該管理數(shù)據(jù)對應(yīng)的內(nèi)容數(shù)據(jù)的存儲位置。管理數(shù)據(jù)通過分布式算法分布在所述分布式存儲系統(tǒng)的各存儲節(jié)點(diǎn)中。內(nèi)容數(shù)據(jù)按照各存儲節(jié)點(diǎn)的容量負(fù)載和流量負(fù)載進(jìn)行分布。在所述分布式存儲系統(tǒng)擴(kuò)容時,本發(fā)明實(shí)施例可以只對管理數(shù)據(jù)進(jìn)行遷移,而不遷移內(nèi)容數(shù)據(jù)。具體的,分布式存儲系統(tǒng)可以通過分布式算法對各內(nèi)容數(shù)據(jù)的分布進(jìn)行重新計(jì)算。擴(kuò)容時采用的分布式算法可與寫入內(nèi)容數(shù)據(jù)時采用的分布式算法一致。在計(jì)算出的應(yīng)歸屬于擴(kuò)容存儲節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)后,分布式系統(tǒng)將計(jì)算出的應(yīng)歸屬于擴(kuò)容存儲節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)保留在存儲該內(nèi)容數(shù)據(jù)的原存儲節(jié)點(diǎn),而將計(jì)算出的該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)遷移到擴(kuò)容存儲節(jié)點(diǎn)。圖5為本發(fā)明實(shí)施例提供的分布式存儲系統(tǒng)進(jìn)行擴(kuò)容的示意圖。如圖5所示,擴(kuò)容前,分布式存儲系統(tǒng)中包括標(biāo)識為node1的存儲節(jié)點(diǎn)和標(biāo)識為node2的存儲節(jié)點(diǎn)。其中,node1中存儲了內(nèi)容數(shù)據(jù)C1、C3、Cn、Cn+3、Cm,node2存儲了C2、Cn+1、Cm+1。擴(kuò)容時,增加了標(biāo)識為node3的存儲節(jié)點(diǎn)。擴(kuò)容后,根據(jù)分布式算法,內(nèi)容數(shù)據(jù)C2、Cn+2、Cn+3、Cm應(yīng)歸屬node3。因此,分布式存儲系統(tǒng)將內(nèi)容數(shù)據(jù)C2、Cn+2、Cn+3、Cm的管理數(shù)據(jù)遷移至node3中。下面以DHT算法為例,對擴(kuò)容后,內(nèi)容數(shù)據(jù)的分布如何變化進(jìn)行詳細(xì)說明。例如,在圖2-3所示的實(shí)施例中,添加一個新的存儲節(jié)點(diǎn)NODE4,通過對應(yīng)的哈希算法得到KEY4,并映射到環(huán)中,如圖6所示。通過按順時針轉(zhuǎn)動的規(guī)則,那么object2應(yīng)該歸屬到NODE4中,其它內(nèi)容數(shù)據(jù)則還保持原有的存儲位置。由上述實(shí)施例可知,分布式算法的核心價值是可以根據(jù)內(nèi)容數(shù)據(jù)的信息和分布式存儲系統(tǒng)中的存儲節(jié)點(diǎn)的信息計(jì)算出內(nèi)容數(shù)據(jù)歸屬的存儲節(jié)點(diǎn)。當(dāng)新增一個存儲節(jié)點(diǎn)時,分布式算法所計(jì)算的結(jié)果將會發(fā)生變化。所以新增一個存儲節(jié)點(diǎn)后,需要將原存儲節(jié)點(diǎn)中的部分內(nèi)容數(shù)據(jù)遷移到新存儲節(jié)點(diǎn)后,才能讓新增的存儲節(jié)點(diǎn)上線提供服務(wù)。但是,由于存儲節(jié)點(diǎn)的存儲空間非常大,通常計(jì)算出的要遷移的內(nèi)容數(shù)據(jù)的量也非常大,這就導(dǎo)致遷移耗時長,嚴(yán)重超出擴(kuò)容操作的時間窗。而在本發(fā)明實(shí)施例中,通過為每個內(nèi)容數(shù)據(jù)創(chuàng)建管理數(shù)據(jù),在擴(kuò)容時,僅對管理數(shù)據(jù)進(jìn)行遷移,而不真正遷移內(nèi)容數(shù)據(jù)本身。由于管理數(shù)據(jù)遠(yuǎn)小于內(nèi)容數(shù)據(jù)本身,因此遷移量非常小,大大縮短了遷移時長,使得分布式存儲系統(tǒng)在擴(kuò)容后可以快速的提供服務(wù)。此外,由于不同存儲介質(zhì)的存儲能力和岀流能力不同,勢必存在存儲能力相對更強(qiáng)或者岀流能力相對更強(qiáng)的節(jié)點(diǎn)。因此,為了提高對內(nèi)容數(shù)據(jù)的操作效率,本發(fā)明另一個實(shí)施例中,對內(nèi)容數(shù)據(jù)的分布進(jìn)行了進(jìn)一步的優(yōu)化。具體的,可以將熱內(nèi)容數(shù)據(jù)遷移到岀流能力強(qiáng)的存儲節(jié)點(diǎn),將冷內(nèi)容數(shù)據(jù)遷移到存儲能力強(qiáng)的存儲節(jié)點(diǎn)。下面該遷移過程在進(jìn)行詳細(xì)介紹。A,分布式存儲系統(tǒng)分析各存儲節(jié)點(diǎn)的遷移關(guān)系。分布式存儲系統(tǒng)中的各存儲節(jié)點(diǎn)可采用選舉算法從各存儲節(jié)點(diǎn)中選擇出一個決策節(jié)點(diǎn),由該決策節(jié)點(diǎn)來分析各存儲節(jié)點(diǎn)的遷移關(guān)系。選舉的過程可采用現(xiàn)有的選舉算法來實(shí)現(xiàn),這里不再贅述。決策節(jié)點(diǎn)可以將各存儲節(jié)點(diǎn)按流量負(fù)載排序,并按照流量負(fù)載大的存儲節(jié)點(diǎn)向流量負(fù)載小的存儲節(jié)點(diǎn)遷移熱內(nèi)容數(shù)據(jù)的原則,確定出各存儲節(jié)點(diǎn)間的第一遷移關(guān)系。該第一遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。該第一遷移關(guān)系可以以遷移對集合來表示。假設(shè)分布式存儲系統(tǒng)中有Node1-Node5五個存儲節(jié)點(diǎn),按照容量負(fù)載從小到大的排序序列為{Node1>Node2>Node3>Node4>Node5},本實(shí)施例中將該序列記為O-Hot。根據(jù)序列O-Hot,可將Node1與Node5結(jié)成遷移對,Node2與Node4結(jié)成遷移對。Node1與Node5結(jié)成的遷移對可表示為Pair1{Node1-->Node5},Node2與Node4結(jié)成的遷移對可表示為Pair2{Node2-->Node4}。其中,箭頭符號代表的是遷移方向。第一遷移關(guān)系可表示為Set{Pair1,Pair2}。決策節(jié)點(diǎn)也可以進(jìn)一步將各存儲節(jié)點(diǎn)按容量負(fù)載排序,并按照容量負(fù)載大的存儲節(jié)點(diǎn)向容量負(fù)載小的存儲節(jié)點(diǎn)遷移冷內(nèi)容數(shù)據(jù)的原則,確定各存儲節(jié)點(diǎn)間的第二遷移關(guān)系。該第二遷移關(guān)系中包括結(jié)成遷移對的遷入存儲節(jié)點(diǎn)和遷出存儲節(jié)點(diǎn)。同樣的,第二遷移關(guān)系也可以以遷移對集合來表示。假設(shè)上述Node1-Node5五個存儲節(jié)點(diǎn),按照容量負(fù)載從小到大的排序序列為{Node5>Node4>Node3>Node2>Node1},本實(shí)施例中將該序列記為O-Space。根據(jù)序列O-Space,可將Node1與Node5結(jié)成遷移對,Node2與Node4結(jié)成遷移對。Node1與Node5結(jié)成的遷移對可表示為Pair1’{Node1-->Node5},Node2與Node4結(jié)成的遷移對可表示為Pair2’{Node2-->Node4}。其中,箭頭符號代表的是遷移方向。第二遷移關(guān)系可表示為Set{Pair1’,Pair2’}。B、分布式存儲系統(tǒng)將遷移關(guān)系發(fā)送給遷移關(guān)系中的遷出節(jié)點(diǎn)。分布式存儲系統(tǒng)中的決策節(jié)點(diǎn)可以將遷移關(guān)系中的遷移對分別發(fā)送給各遷移對中的遷出節(jié)點(diǎn)。C、遷出節(jié)點(diǎn)根據(jù)遷移關(guān)系識別出要遷移的內(nèi)容數(shù)據(jù)。遷出節(jié)點(diǎn)在接收到?jīng)Q策節(jié)點(diǎn)發(fā)送的遷移對后,對本節(jié)點(diǎn)存儲的內(nèi)容數(shù)據(jù)按照訪問熱度進(jìn)行排序。第一遷移關(guān)系中的遷出節(jié)點(diǎn)在對本節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)排序后,選擇出訪問熱度最高的n(n值可配置)個內(nèi)容數(shù)據(jù)作為要遷移的熱內(nèi)容數(shù)據(jù),要遷移的熱內(nèi)容數(shù)據(jù)的集合,記為Setn-H。第二遷移關(guān)系中的遷出節(jié)點(diǎn)在對本節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)排序后,選擇出訪問熱度最低的m(m值可配置)個內(nèi)容數(shù)據(jù)要遷移的冷內(nèi)容數(shù)據(jù),要遷移的冷內(nèi)容數(shù)據(jù)的集合,記為Setn-C。D、遷出節(jié)點(diǎn)將要遷移的內(nèi)容數(shù)據(jù)通知與該遷出節(jié)點(diǎn)結(jié)對的遷入節(jié)點(diǎn)。E、遷入節(jié)點(diǎn)根據(jù)遷出節(jié)點(diǎn)通知的內(nèi)容數(shù)據(jù)生成遷入列表。遷入列表可以由多條記錄組成,記錄格式為{NodeN,Cn}。其中,NodeN表示遷出節(jié)點(diǎn),Cn表示遷移的內(nèi)容數(shù)據(jù)。在另一實(shí)施例中,遷入節(jié)點(diǎn)還可以根據(jù)自身剩余的容量大小來確定遷出節(jié)點(diǎn)要遷移的內(nèi)容數(shù)據(jù)中哪些可以接受,根據(jù)可接受的內(nèi)容數(shù)據(jù)生成遷入列表。F、遷入節(jié)點(diǎn)根據(jù)遷入列表進(jìn)行內(nèi)容數(shù)據(jù)的搬遷。假設(shè)遷移對Pair2{Node2-->Node4}中,Node4生成的遷入列表為{Node2,C1}。Node4根據(jù)DHT計(jì)算C1的管理數(shù)據(jù)歸屬的存儲節(jié)點(diǎn)為Node3,則C1的搬遷流程如下:1、Node4向Node2請求C1的數(shù)據(jù)內(nèi)容。2、Node4請求到C1的內(nèi)容數(shù)據(jù)后,向本節(jié)點(diǎn)寫入C1的內(nèi)容數(shù)據(jù)。3、Node4完成C1的內(nèi)容數(shù)據(jù)的寫入后,通知Node3修改C1的管理數(shù)據(jù),將C1的存儲位置修改為Node4。例如:{C1,熱度,Node2}---->{C1,熱度,Node4}4、Node4通知Node2的刪除C1的內(nèi)容數(shù)據(jù)。需要說明的是,熱內(nèi)容數(shù)據(jù)的遷移和冷內(nèi)容數(shù)據(jù)的遷移可以根據(jù)需要擇一進(jìn)行,也可以兩者都進(jìn)行,這里不做限制。通過上述遷移過程,可以將熱內(nèi)容數(shù)據(jù)遷移到出流能力強(qiáng)的存儲節(jié)點(diǎn)上,提高訪問性能。另外,對于冷內(nèi)容數(shù)據(jù),則可以遷移到容量大的存儲節(jié)點(diǎn)上,從而將出流能力強(qiáng)的存儲節(jié)點(diǎn)的容量空間釋放給熱內(nèi)容數(shù)據(jù),提高整個分布式存儲系統(tǒng)的性能和利用率。圖7示出了上述實(shí)施例中涉及的存儲節(jié)點(diǎn)的一種可能的結(jié)構(gòu)示意圖。如圖7所示,本實(shí)施例以接收應(yīng)用服務(wù)器的寫入內(nèi)容數(shù)據(jù)的請求的存儲節(jié)點(diǎn)為例進(jìn)行說明,本實(shí)施例中將該存儲節(jié)點(diǎn)稱為第一存儲節(jié)點(diǎn)。具體的,該第一存儲節(jié)點(diǎn)包括:通信接口701,數(shù)據(jù)管理器702、遷移管理器703以及存儲器704。其中,通信接口701用于和應(yīng)用服務(wù)器和/或其它存儲節(jié)點(diǎn)交互。例如,通信接口701可以接收應(yīng)用服務(wù)器發(fā)送的寫入內(nèi)容數(shù)據(jù)的請求,通知應(yīng)用服務(wù)器將該內(nèi)容數(shù)據(jù)寫入到數(shù)據(jù)管理器702確定出的第二存儲節(jié)點(diǎn)以及接收應(yīng)用服務(wù)器對內(nèi)容數(shù)據(jù)的訪問請求。數(shù)據(jù)管理器702用于對要寫入的內(nèi)容數(shù)據(jù)進(jìn)行分布管理,并對要訪問的內(nèi)容數(shù)據(jù)進(jìn)行調(diào)度管理。對內(nèi)容數(shù)據(jù)進(jìn)行分布管理過程可參見方法實(shí)施例中基于存儲節(jié)點(diǎn)的容量負(fù)載以及流量負(fù)載確定用于寫入內(nèi)容數(shù)據(jù)的第二存儲節(jié)點(diǎn)以及創(chuàng)建該內(nèi)容數(shù)據(jù)的管理數(shù)據(jù)部分,這里不再贅述。存儲器704用于存儲內(nèi)容數(shù)據(jù)以及管理數(shù)據(jù)。遷移管理器703用于管理熱內(nèi)容數(shù)據(jù)和冷內(nèi)容數(shù)據(jù)的遷移,也用于管理在分布式系統(tǒng)擴(kuò)容時,對管理數(shù)據(jù)的遷移。具體的實(shí)現(xiàn)可參考方式實(shí)施例中遷移過程部分以及圖5所示的擴(kuò)容實(shí)施例部分,這里不再贅述。在本申請所提供的幾個實(shí)施例中,應(yīng)該理解到,所公開的系統(tǒng)和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,例如多個模塊或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個實(shí)施例中的各功能模塊可以集成在一個處理單元中,也可以是各個模塊單獨(dú)物理存在,也可以兩個或兩個以上模塊集成在一個單元中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能單元的形式實(shí)現(xiàn)。上述以軟件功能單元的形式實(shí)現(xiàn)的集成的單元,可以存儲在一個計(jì)算機(jī)可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、隨機(jī)存取存儲器(英文全稱:RandomAccessMemory,簡稱:RAM)、磁碟或者光盤等各種可以存儲數(shù)據(jù)的介質(zhì)。本發(fā)明實(shí)施例還提供了另一種計(jì)算機(jī)存儲介質(zhì),用于儲存為上述存儲節(jié)點(diǎn)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述圖3所示方法實(shí)施例所設(shè)計(jì)的程序。本發(fā)明實(shí)施例還提供了另一種計(jì)算機(jī)存儲介質(zhì),用于儲存為上述分布式存儲系統(tǒng)所用的計(jì)算機(jī)軟件指令,其包含用于執(zhí)行上述圖5以及遷移方法實(shí)施例所設(shè)計(jì)的程序。通過執(zhí)行存儲的程序,可以實(shí)現(xiàn)擴(kuò)容遷移和冷熱內(nèi)容數(shù)據(jù)的遷移。本領(lǐng)域技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、裝置(設(shè)備)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。計(jì)算機(jī)程序存儲/分布在合適的介質(zhì)中,與其它硬件一起提供或作為硬件的一部分,也可以采用其他分布形式,如通過Internet或其它有線或無線電信系統(tǒng)。本發(fā)明是參照本發(fā)明實(shí)施例的方法、裝置(設(shè)備)和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。盡管結(jié)合具體特征及其實(shí)施例對本發(fā)明進(jìn)行了描述,顯而易見的,在不脫離本發(fā)明的精神和范圍的情況下,可對其進(jìn)行各種修改和組合。相應(yīng)地,本說明書和附圖僅僅是所附權(quán)利要求所界定的本發(fā)明的示例性說明,且視為已覆蓋本發(fā)明范圍內(nèi)的任意和所有修改、變化、組合或等同物。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
罗甸县| 班戈县| 天全县| 乐陵市| 宁陕县| 自治县| 萍乡市| 博白县| 东平县| 岐山县| 武川县| 阳城县| 永福县| 志丹县| 班玛县| 黔西县| 仲巴县| 民县| 庆元县| 阿拉尔市| 临泽县| 岳池县| 远安县| 永宁县| 抚顺市| 都江堰市| 海南省| 化州市| 霍邱县| 那坡县| 晋宁县| 延川县| 阿图什市| 方山县| 营山县| 清远市| 达日县| 深泽县| 昌图县| 灌云县| 洛南县|