引用計(jì)數(shù)傳播的制作方法
【專利摘要】本發(fā)明提供了用于跟蹤存儲(chǔ)于多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上的對(duì)象實(shí)例的方法和系統(tǒng),該跟蹤允許對(duì)何時(shí)對(duì)象在網(wǎng)絡(luò)化的節(jié)點(diǎn)上沒(méi)有了引用并且能夠被安全地取消分配進(jìn)行全局確定。根據(jù)本發(fā)明的一個(gè)方面,每個(gè)節(jié)點(diǎn)具有用于跟蹤對(duì)象并可任選地將其存儲(chǔ)于節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且本地對(duì)象存儲(chǔ)在網(wǎng)絡(luò)上共同地共用對(duì)象的本地存儲(chǔ)實(shí)例。一個(gè)或多個(gè)應(yīng)用,例如,文件系統(tǒng)和/或存儲(chǔ)系統(tǒng),使用本地對(duì)象存儲(chǔ)將應(yīng)用的所有持久數(shù)據(jù)存儲(chǔ)為對(duì)象。
【專利說(shuō)明】引用計(jì)數(shù)傳播
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)對(duì)象的存儲(chǔ),并且更特別地涉及用于在保持對(duì)象的引用的全局視角的同時(shí)跟蹤存儲(chǔ)于點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)中的多個(gè)節(jié)點(diǎn)上的對(duì)象方法和裝置。
【背景技術(shù)】
[0002]為了性能或冗余的目的,現(xiàn)代存儲(chǔ)系統(tǒng)能夠構(gòu)建于以網(wǎng)絡(luò)(例如,TCP/IP網(wǎng)絡(luò))互連的分立構(gòu)件(稱為節(jié)點(diǎn))之外。每個(gè)節(jié)點(diǎn)典型為具有CPU、存儲(chǔ)、內(nèi)存等的功能全面的計(jì)算機(jī)。在此類系統(tǒng)中的節(jié)點(diǎn)的組織可以是點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),意指所有節(jié)點(diǎn)都是對(duì)等的(即,沒(méi)有中央管理機(jī)構(gòu),并且沒(méi)有節(jié)點(diǎn)具有特權(quán))。作為對(duì)等點(diǎn),節(jié)點(diǎn)在它們當(dāng)中通信以解決狀態(tài)問(wèn)題。將存儲(chǔ)系統(tǒng)組織為點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)能夠提供更有彈性的且可擴(kuò)展的存儲(chǔ)解決方案,因?yàn)楣?jié)點(diǎn)能夠?yàn)榱诵阅芎?或容量而逐步遞增,并且如果一個(gè)節(jié)點(diǎn)失效,則存儲(chǔ)系統(tǒng)仍然會(huì)運(yùn)行。
[0003]將點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)與計(jì)算機(jī)的簡(jiǎn)單合集區(qū)分開的是:在系統(tǒng)中的節(jié)點(diǎn)在基礎(chǔ)的數(shù)據(jù)存儲(chǔ)、每個(gè)節(jié)點(diǎn)的健康狀況等方面彼此通信。特別地,在系統(tǒng)中的節(jié)點(diǎn)可以為了性能和數(shù)據(jù)完整性而復(fù)制并交換信息。該信息可以為數(shù)據(jù)對(duì)象或文件的形式,其中對(duì)象可以是文件的一部分。
[0004]在對(duì)象通過(guò)系統(tǒng)來(lái)傳播時(shí),要求數(shù)據(jù)結(jié)構(gòu):a)知道對(duì)象在哪里;并且b)知道何時(shí)將不再需要這些對(duì)象。在其中對(duì)象具有引用計(jì)數(shù)(即,對(duì)象由另一對(duì)象或其它數(shù)據(jù)結(jié)構(gòu)引用的次數(shù))的現(xiàn)有技術(shù)的系統(tǒng)中,對(duì)象可以在其引用計(jì)數(shù)下降到O時(shí)被安全地取消分配或被刪除(例如,垃圾收集)。
[0005]但是,當(dāng)每秒有數(shù)百萬(wàn)個(gè)對(duì)象正被傳送時(shí),如果使用過(guò)分簡(jiǎn)單化的算法,則保持對(duì)數(shù)十億個(gè)對(duì)象的引用計(jì)數(shù)的跟蹤會(huì)導(dǎo)致不可接受的網(wǎng)絡(luò)流量和CPU成本。
[0006]另一個(gè)挑戰(zhàn)在于確定引用計(jì)數(shù)實(shí)際為0,并然后找出所有對(duì)象實(shí)例從而能夠刪除它們。為了克服這些問(wèn)題,對(duì)用于跟蹤對(duì)象的更有效率的且更可靠的協(xié)議有著持續(xù)的需求。
【發(fā)明內(nèi)容】
[0007]在本發(fā)明的一個(gè)方面,本發(fā)明提供了用于在多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上跟蹤對(duì)象引用的系統(tǒng)和方法,在該網(wǎng)絡(luò)中對(duì)象通過(guò)將對(duì)象的一個(gè)或多個(gè)實(shí)例存儲(chǔ)(含有相同數(shù)據(jù)的對(duì)象的實(shí)例)于網(wǎng)絡(luò)的一個(gè)或多個(gè)節(jié)點(diǎn)上而分布于節(jié)點(diǎn)當(dāng)中。在該網(wǎng)絡(luò)中,對(duì)象的實(shí)例可以全都是對(duì)等的(點(diǎn)對(duì)點(diǎn)),這與其中存在某種層次或主/從關(guān)系的實(shí)例(即,一個(gè)實(shí)例是主要的或者比另一實(shí)例更有特權(quán))相反。這些點(diǎn)對(duì)點(diǎn)實(shí)例能夠由網(wǎng)絡(luò)節(jié)點(diǎn)共同管理,沒(méi)有中心化的管理機(jī)構(gòu)。如同以下根據(jù)本發(fā)明的各種實(shí)施例所描述的,方法和系統(tǒng)被提供用于跟蹤這些存儲(chǔ)于多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上的對(duì)象實(shí)例,該跟蹤允許對(duì)何時(shí)對(duì)象在網(wǎng)絡(luò)化的節(jié)點(diǎn)上沒(méi)有了引用并能夠被安全地取消分配進(jìn)行全局確定。
[0008]根據(jù)本發(fā)明的一個(gè)方面,每個(gè)節(jié)點(diǎn)都具有用于跟蹤對(duì)象并可任選地將其存儲(chǔ)于節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且本地對(duì)象存儲(chǔ)在網(wǎng)絡(luò)上共同地共用對(duì)象的本地存儲(chǔ)實(shí)例。一個(gè)或多個(gè)應(yīng)用,例如,文件系統(tǒng)和/或存儲(chǔ)系統(tǒng),使用本地對(duì)象存儲(chǔ)將應(yīng)用的所有持久數(shù)據(jù)存儲(chǔ)為對(duì)象。應(yīng)用可能需要所存儲(chǔ)的每個(gè)對(duì)象的引用計(jì)數(shù),引用計(jì)數(shù)包括各自對(duì)象的引用數(shù)。根據(jù)本發(fā)明的一個(gè)方面,對(duì)象的全局引用計(jì)數(shù)能夠通過(guò)在每個(gè)節(jié)點(diǎn)處保留對(duì)在各自節(jié)點(diǎn)處的對(duì)象名稱(與對(duì)象實(shí)例相反)的引用的本地引用計(jì)數(shù)LRC來(lái)跟蹤,LRC的值包括在本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整的總數(shù),其中LRC獨(dú)立于存儲(chǔ)于本地對(duì)象存儲(chǔ)內(nèi)的對(duì)象的任何實(shí)例。通過(guò)使引用計(jì)數(shù)與實(shí)例計(jì)數(shù)解耦,該方法允許LRC的負(fù)值(帶符號(hào)整數(shù)),與現(xiàn)有技術(shù)的方法相反。而且,通過(guò)計(jì)算多個(gè)節(jié)點(diǎn)的LRC總數(shù),在此稱為全局引用計(jì)數(shù)GRC,所產(chǎn)生的GRC能夠被用來(lái)確定:對(duì)于使用網(wǎng)絡(luò)化節(jié)點(diǎn)來(lái)將持久數(shù)據(jù)存儲(chǔ)為對(duì)象的特定應(yīng)用,對(duì)對(duì)象(它的所有實(shí)例)取消分配是否是安全的,因?yàn)閷?duì)象不再由應(yīng)用所引用。當(dāng)且僅當(dāng)GRC被確定為0時(shí),對(duì)特定對(duì)象的對(duì)象實(shí)例取消分配才是安全的。
[0009]根據(jù)本發(fā)明的另一方面,對(duì)象實(shí)例在一個(gè)或多個(gè)節(jié)點(diǎn)上的安置獨(dú)立于對(duì)象的名稱來(lái)執(zhí)行。與基于對(duì)象名稱來(lái)強(qiáng)制對(duì)象存儲(chǔ)定位的現(xiàn)有技術(shù)的方法相反,在本發(fā)明的各種實(shí)施例中,對(duì)象實(shí)例在節(jié)點(diǎn)上的安置能夠由對(duì)象的實(shí)際或預(yù)期使用,例如基于網(wǎng)絡(luò)或系統(tǒng)性能或者數(shù)據(jù)可靠性來(lái)確定。例如,知道哪個(gè)(哪些)文件系統(tǒng)引用特定的對(duì)象的本地對(duì)象存儲(chǔ)能夠依據(jù)使用該對(duì)象的文件系統(tǒng)來(lái)確定對(duì)象在一個(gè)或多個(gè)節(jié)點(diǎn)上的優(yōu)選安置。該系統(tǒng)基本上比依據(jù)對(duì)象為何物(例如,對(duì)象的名稱)而限制數(shù)據(jù)對(duì)象在節(jié)點(diǎn)上的安置的現(xiàn)有技術(shù)的系統(tǒng)更穩(wěn)健和更有效率。
[0010]根據(jù)本發(fā)明的另一方面,每個(gè)本地節(jié)點(diǎn)都保留它自己的本地索引用于將對(duì)象名稱映射到在本地節(jié)點(diǎn)上的對(duì)象所存儲(chǔ)的物理位置。該映射索引可以包括,例如,指向在本地節(jié)點(diǎn)上的對(duì)象實(shí)例所存儲(chǔ)的一個(gè)或多個(gè)位置的指針。對(duì)于給定的對(duì)象名稱,本地映射索引的條目可以包括LRC以及指向本地節(jié)點(diǎn)上的一個(gè)或多個(gè)存儲(chǔ)位置。
[0011]根據(jù)本發(fā)明的一種實(shí)施例,本發(fā)明提供含有用于執(zhí)行方法的可執(zhí)行程序指令的計(jì)算機(jī)可讀介質(zhì),所述方法包括:
[0012]在用于所存儲(chǔ)的對(duì)象的共用的多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)中,所述對(duì)象在網(wǎng)絡(luò)化節(jié)點(diǎn)上具有全局唯一的名稱,并且其中對(duì)象名稱不隨著對(duì)象在節(jié)點(diǎn)上的存儲(chǔ)位置而改變;
[0013]在每個(gè)節(jié)點(diǎn)處保留對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC,與存儲(chǔ)于本地節(jié)點(diǎn)上的任何對(duì)象實(shí)例無(wú)關(guān),LRC被保留為帶符號(hào)的整數(shù),
[0014]其中取消對(duì)對(duì)象名稱的引用能夠生成負(fù)的LRC值。
[0015]在一種實(shí)施例中,該方法包括:
[0016]確定包含LRC之和的全局引用計(jì)數(shù)GRC。
[0017]在一種實(shí)施例中,確定步驟包括:
[0018]在GRC被確定為0時(shí)識(shí)別待取消分配的對(duì)象實(shí)例。
[0019]在一種實(shí)施例中,確定步驟包括:
[0020]在節(jié)點(diǎn)當(dāng)中實(shí)現(xiàn)最終一致性網(wǎng)絡(luò)協(xié)議,用于確定對(duì)象是否可以被取消分配。
[0021]在一種實(shí)施例中,確定步驟包括:
[0022]將某一范圍的對(duì)象標(biāo)識(shí)符的所有權(quán)指派給一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn),其中這一個(gè)節(jié)點(diǎn)開始對(duì)于該范圍的全部對(duì)象標(biāo)識(shí)符或其子集的確定步驟。
[0023]在一種實(shí)施例中,該方法步驟包括:
[0024]在每個(gè)節(jié)點(diǎn)上保留本地對(duì)象存儲(chǔ),其中所述本地對(duì)象存儲(chǔ)共同地包括全局唯一的對(duì)象名稱的名稱空間。[0025]在一種實(shí)施例中,該方法包括:
[0026]本地對(duì)象存儲(chǔ)保留對(duì)象名稱的本地映射索引、LRC以及指向?qū)ο笤诒镜毓?jié)點(diǎn)上所存儲(chǔ)的任何物理對(duì)象位置的指針。
[0027]在一種實(shí)施例中,該方法包括:
[0028]每個(gè)對(duì)象都具有從對(duì)象的內(nèi)容中得出的作為其對(duì)象名稱的對(duì)象指紋。
[0029]在一種實(shí)施例中,該方法包括:
[0030]指紋包括對(duì)象內(nèi)容的散列(hash)。
[0031 ] 在一種實(shí)施例中,該方法包括:
[0032]文件系統(tǒng),共同使用在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中的一個(gè)或多個(gè)節(jié)點(diǎn)上的對(duì)象存儲(chǔ)作為用于存儲(chǔ)文件系統(tǒng)的全部持久數(shù)據(jù)的方法。
[0033]在一種實(shí)施例中,該方法包括:
[0034].所有文件系統(tǒng)數(shù)據(jù),元數(shù)據(jù)和文件包括對(duì)象存儲(chǔ)的對(duì)象,每個(gè)對(duì)象都具有作為其對(duì)象名稱的對(duì)象指紋;
[0035].文件系統(tǒng)對(duì)象的合集還包括對(duì)象存儲(chǔ)的對(duì)象,每個(gè)合集都包括多個(gè)文件系統(tǒng)對(duì)象的映射并且具有它自己的從合集的內(nèi)容中得出的對(duì)象指紋,其中合集中的一個(gè)或多個(gè)對(duì)象的改變會(huì)改變合集對(duì)象指紋;以及
[0036].文件系統(tǒng)根對(duì)象具有 根對(duì)象指紋,使得在名稱空間的文件系統(tǒng)中的每個(gè)對(duì)象都可通過(guò)跟對(duì)象來(lái)訪問(wèn)。
[0037]在一種實(shí)施例中,該方法包括:
[0038]基于網(wǎng)絡(luò)或系統(tǒng)的性能或可靠性來(lái)選擇一個(gè)或多個(gè)節(jié)點(diǎn)作為用于存儲(chǔ)獨(dú)立于對(duì)象名稱的對(duì)象的一個(gè)或多個(gè)實(shí)例的位置。
[0039]在一種實(shí)施例中,該方法包括:
[0040]所存儲(chǔ)對(duì)象的共用包括在所存儲(chǔ)對(duì)象的對(duì)象名稱、LRC和位置方面于節(jié)點(diǎn)之間通?目。
[0041 ] 在一種實(shí)施例中,該方法包括:
[0042]當(dāng)應(yīng)用取消對(duì)對(duì)象名稱的引用并且對(duì)象的實(shí)例不存儲(chǔ)于本地對(duì)象存儲(chǔ)上時(shí),本地對(duì)象存儲(chǔ)生成為-1的LRC。
[0043]在一種實(shí)施例中,該方法包括:
[0044]存儲(chǔ)系統(tǒng),共同使用在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中的一個(gè)或多個(gè)節(jié)點(diǎn)上的對(duì)象存儲(chǔ)作為用于存儲(chǔ)存儲(chǔ)系統(tǒng)的全部持久數(shù)據(jù)的方法。
[0045]根據(jù)本發(fā)明的另一種實(shí)施例,本發(fā)明提供了含有可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述可執(zhí)行指令用于執(zhí)行
[0046]在運(yùn)行于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)上的分布式點(diǎn)對(duì)點(diǎn)存儲(chǔ)系統(tǒng)中跟蹤對(duì)數(shù)據(jù)對(duì)象的引用的方法,對(duì)象在網(wǎng)絡(luò)化節(jié)點(diǎn)上具有全局唯一的名稱,每個(gè)節(jié)點(diǎn)具有用于命名對(duì)象并將其存儲(chǔ)于本地節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且本地對(duì)象存儲(chǔ)共用對(duì)象,
[0047]該方法包括:
[0048]在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上確定用于將數(shù)據(jù)對(duì)象的實(shí)例存儲(chǔ)于本地節(jié)點(diǎn)上的一個(gè)或多個(gè)位置;
[0049]在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上將在本地節(jié)點(diǎn)上的存儲(chǔ)實(shí)例的一個(gè)或多個(gè)位置映射到對(duì)象名稱,其中該位置并不改變對(duì)象名稱;并且
[0050]在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上保留對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC,LRC的值包括對(duì)于在本地節(jié)點(diǎn)上的對(duì)象的引用計(jì)數(shù)調(diào)整的總數(shù),其中LRC與是否有所引用的對(duì)象的任何實(shí)例存儲(chǔ)于本地節(jié)點(diǎn)上無(wú)關(guān)。
[0051]根據(jù)本發(fā)明的另一種實(shí)施例,本發(fā)明提供含有用于執(zhí)行方法的可執(zhí)行程序指令的計(jì)算機(jī)可讀介質(zhì),所述方法包括:
[0052]對(duì)于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都具有用于將對(duì)象存儲(chǔ)于各自節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),對(duì)象在網(wǎng)絡(luò)化節(jié)點(diǎn)上具有全局唯一的名稱;
[0053]本地對(duì)象存儲(chǔ)共用一個(gè)或多個(gè)對(duì)象;并且
[0054]該應(yīng)用使用用于將持久數(shù)據(jù)存儲(chǔ)為對(duì)象的本地對(duì)象存儲(chǔ),該應(yīng)用要求對(duì)存儲(chǔ)于網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自對(duì)象的引用數(shù);
[0055]將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上,LRC的值包括在本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整的總數(shù),其中LRC獨(dú)立于被存儲(chǔ)于本地對(duì)象存儲(chǔ)中以致于允許LRC的負(fù)值的所引用對(duì)象的任何實(shí)例;并且
[0056]確定包含LRC之和的全局引用計(jì)數(shù)GRC。
[0057]在一種實(shí)施例中:
[0058]應(yīng)用包括文件系統(tǒng)或存儲(chǔ)系統(tǒng)。
[0059]根據(jù)本發(fā)明的另一種實(shí)施例,本發(fā)明提供一種裝置,包括:
[0060]多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都具有用于將對(duì)象存儲(chǔ)于各自節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且對(duì)象在網(wǎng)絡(luò)化節(jié)點(diǎn)上具有全局唯一的名稱;
[0061]本地對(duì)象存儲(chǔ)共用一個(gè)或多個(gè)對(duì)象;以及
[0062]使用用于將持久數(shù)據(jù)存儲(chǔ)為對(duì)象的本地對(duì)象存儲(chǔ)的應(yīng)用,該應(yīng)用要求存儲(chǔ)于網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自對(duì)象的引用數(shù);
[0063]用于將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上的裝置,LRC的值包括在本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整的總數(shù),其中LRC獨(dú)立于被存儲(chǔ)于本地對(duì)象存儲(chǔ)中以致于允許LRC的負(fù)值的所引用對(duì)象的任何實(shí)例;以及
[0064]用于確定包含LRC之和的全局引用計(jì)數(shù)GRC的裝置。
[0065]根據(jù)本發(fā)明的另一種實(shí)施例,本發(fā)明提供一種裝置,包括:
[0066]多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具有用于將對(duì)象存儲(chǔ)于各自節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且對(duì)象在網(wǎng)絡(luò)化節(jié)點(diǎn)上具有全局唯一的名稱;
[0067]本地對(duì)象存儲(chǔ)共用一個(gè)或多個(gè)對(duì)象;以及
[0068]使用用于將持久數(shù)據(jù)存儲(chǔ)為對(duì)象的本地對(duì)象存儲(chǔ)的應(yīng)用,該應(yīng)用要求存儲(chǔ)于網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自對(duì)象的引用數(shù);
[0069]用于將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上的裝置,LRC的值包括在本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整的總數(shù),其中LRC獨(dú)立于被存儲(chǔ)于本地對(duì)象存儲(chǔ)中以致于允許LRC的負(fù)值的所引用對(duì)象的任何實(shí)例;以及
[0070]用于基于網(wǎng)絡(luò)或系統(tǒng)的性能或可靠性來(lái)選擇本地對(duì)象存儲(chǔ)中的一個(gè)或多個(gè)作為用于存儲(chǔ)于與對(duì)象名稱無(wú)關(guān)的對(duì)象實(shí)例的位置的裝置。
[0071]本發(fā)明的這些及其它方面在下文關(guān)于各種詳細(xì)實(shí)施例進(jìn)行具體地描述?!緦@綀D】
【附圖說(shuō)明】
[0072]附圖示出了本發(fā)明的一種或多種實(shí)施例,其中:
[0073]圖1是用于實(shí)施本發(fā)明的一種實(shí)施例的多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)的示意圖;
[0074]圖2是在經(jīng)由對(duì)象代理與網(wǎng)絡(luò)通信的網(wǎng)絡(luò)的一個(gè)節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ)的示意圖;
[0075]圖3是在兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)Alice與Bob之間的對(duì)象共用的示意圖;
[0076]圖4是在節(jié)點(diǎn)Bob處的本地映射索引的示意圖;
[0077]圖5是在網(wǎng)絡(luò)的節(jié)點(diǎn)Alice和Bob之間的全局引用計(jì)數(shù)核對(duì)(reconciliation);
[0078]圖6是文件系統(tǒng)邏輯視圖的示意圖,從應(yīng)用的視角來(lái)看示出了對(duì)對(duì)象的多個(gè)獨(dú)立引用;
[0079]圖7示出了在網(wǎng)絡(luò)的三個(gè)節(jié)點(diǎn)上跟蹤對(duì)象引用的一個(gè)實(shí)例,其中負(fù)的引用計(jì)數(shù)根據(jù)本發(fā)明是允許的;
[0080]圖8是為了保留本地引用計(jì)數(shù)而在網(wǎng)絡(luò)上的節(jié)點(diǎn)Alice和Bob之間通信的示意圖;以及
[0081]圖9是為了在網(wǎng)絡(luò) 節(jié)點(diǎn)間實(shí)現(xiàn)引用計(jì)數(shù)和實(shí)例計(jì)數(shù)兩者的核對(duì)而在三個(gè)節(jié)點(diǎn)Alice、Bob和Eve之間進(jìn)彳丁網(wǎng)絡(luò)通彳目的不意圖。
【具體實(shí)施方式】
[0082]在本發(fā)明的一種實(shí)施例中,數(shù)據(jù)存儲(chǔ)系統(tǒng)分布于網(wǎng)絡(luò)上的多個(gè)節(jié)點(diǎn)當(dāng)中,每個(gè)節(jié)點(diǎn)都具有它自己的本地對(duì)象存儲(chǔ)并且本地對(duì)象存儲(chǔ)共用對(duì)象。這組網(wǎng)絡(luò)化節(jié)點(diǎn)遵循通用命名約定,其中存儲(chǔ)于網(wǎng)絡(luò)上的每個(gè)對(duì)象在網(wǎng)絡(luò)上具有全局唯一的名稱。在本實(shí)施例中,該多個(gè)節(jié)點(diǎn)作為點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)來(lái)操作,沒(méi)有節(jié)點(diǎn)是主要的。沒(méi)有中心化的命名機(jī)構(gòu);相反,在本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上的本地代理能夠通過(guò)使用常見的散列算法來(lái)確定對(duì)象的名稱而獨(dú)立地確定并在對(duì)象名稱上取得一致,不需要在節(jié)點(diǎn)之間的通信。通過(guò)使用強(qiáng)散列算法,沖突得以避免。
[0083]在本實(shí)施例中,該多個(gè)本地對(duì)象存儲(chǔ)意在管理數(shù)十億個(gè)對(duì)象,每個(gè)對(duì)象都是小的,例如,長(zhǎng)度為4、8、16、32、64、128或2561? (千字節(jié))。在對(duì)象存儲(chǔ)中的對(duì)象是不透明的,包括任意多個(gè)位。對(duì)象存儲(chǔ)不具有關(guān)于位的語(yǔ)義知識(shí);相反,更高層的應(yīng)用(例如,文件系統(tǒng)或者作為選擇為塊存儲(chǔ)系統(tǒng))定義語(yǔ)義內(nèi)容(意思)以及在對(duì)象之間的關(guān)系或引用。每個(gè)本地對(duì)象存儲(chǔ)含有用于將對(duì)象名稱映射到對(duì)象實(shí)例可以存儲(chǔ)于本地的物理位置的本地索引(例如,指向物理位置的指針)。每個(gè)本地對(duì)象存儲(chǔ)還保留了對(duì)于對(duì)象名稱的本地引用計(jì)數(shù)LRC。但是,與現(xiàn)有技術(shù)相反,對(duì)象名稱的本地引用計(jì)數(shù)與對(duì)象實(shí)例解耦(獨(dú)立于對(duì)象實(shí)例)。LRC被保留為帶符號(hào)的整數(shù),并且包括對(duì)對(duì)象名稱的引用的累計(jì)總數(shù),而不是對(duì)象實(shí)例的計(jì)數(shù)。還有區(qū)別LRC的是其保持為帶符號(hào)的整數(shù),從而允許負(fù)值。針對(duì)每個(gè)新的引用和取消引用相應(yīng)地調(diào)整LRC,即,添加引用為+1,而去除引用為-1。
[0084]在一個(gè)實(shí)例中,文件系統(tǒng)應(yīng)用保留包含對(duì)象在文件系統(tǒng)中引用的次數(shù)的全局引用計(jì)數(shù)。在此,在持久數(shù)據(jù)的文件系統(tǒng)存儲(chǔ)被共同地實(shí)現(xiàn)于該多個(gè)節(jié)點(diǎn)上的一個(gè)或多個(gè)本地對(duì)象存儲(chǔ)上的情況下,從文件系統(tǒng)的視角來(lái)看的全局引用計(jì)數(shù)包括在該多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)間對(duì)各自對(duì)象的引用數(shù)。在一種實(shí)施例中,文件系統(tǒng)可以被實(shí)現(xiàn)為稱為過(guò)濾器的物理設(shè)備,該物理設(shè)備包括文件系統(tǒng)和存儲(chǔ)系統(tǒng)兩者,并且該物理設(shè)備使用文件傳輸協(xié)議,例如,NAS。在另一種實(shí)施例中,除了文件系統(tǒng)外或作為代替,塊存儲(chǔ)服務(wù)器共同地使用在一個(gè)或多個(gè)節(jié)點(diǎn)上的所述本地對(duì)象存儲(chǔ),用于存儲(chǔ)持久數(shù)據(jù)對(duì)象。塊服務(wù)器是看起來(lái)像存儲(chǔ)于多個(gè)物理存儲(chǔ)磁盤上的虛擬磁盤并且使用塊傳輸協(xié)議(例如,iSCSI或FCoE)的物理設(shè)備。
[0085]通過(guò)將本地引用計(jì)數(shù)與對(duì)象實(shí)例解耦,系統(tǒng)允許對(duì)象(實(shí)例)布置于本地節(jié)點(diǎn)的任意一個(gè)或多個(gè)節(jié)點(diǎn)上,不考慮對(duì)象性質(zhì)。相反,本地節(jié)點(diǎn)每個(gè)都保留對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)。這些本地引用計(jì)數(shù)不再與根據(jù)應(yīng)用的對(duì)象實(shí)例的數(shù)量連系在一起(例如,文件系統(tǒng)或塊服務(wù)器),并且因而本地引用計(jì)數(shù)的值能夠是負(fù)值(如果本地引用計(jì)數(shù)與對(duì)象實(shí)例的數(shù)量連系在一起,則負(fù)值將是不可能的)。通過(guò)使引用計(jì)數(shù)與實(shí)例的數(shù)量解耦,對(duì)象能夠出于改進(jìn)的網(wǎng)絡(luò)或系統(tǒng)的性能或可靠性的原因或者任何別的原因而布置于網(wǎng)絡(luò)上的任何位置,與全局引用計(jì)數(shù)或本地引用計(jì)數(shù)無(wú)關(guān)。這與用于布置對(duì)象的現(xiàn)有技術(shù)的算法(例如,分布式散列表和其它類似的算法)形成對(duì)比,所述現(xiàn)有技術(shù)的算法基于對(duì)象名稱來(lái)限制布置。相比之下,根據(jù)本發(fā)明,能夠根據(jù)需要在節(jié)點(diǎn)間布置許多的對(duì)象實(shí)例,或者出于任何目的根據(jù)需要布置盡可能的對(duì)象實(shí)例,例如,為了減少網(wǎng)絡(luò)流量,減少處理時(shí)間,或者為了數(shù)據(jù)復(fù)制或恢復(fù)的目的。
[0086]根據(jù)本發(fā)明的另一方面,因使實(shí)例的數(shù)量與引用計(jì)數(shù)解耦而引起了一個(gè)問(wèn)題,SP,不再可能依靠本地引用計(jì)數(shù)來(lái)確定對(duì)象是否能夠被安全地刪除。根據(jù)本發(fā)明的一種實(shí)施例,該問(wèn)題通過(guò)計(jì)算全局引用計(jì)數(shù)(GRC)來(lái)解決,包括在網(wǎng)絡(luò)節(jié)點(diǎn)間的全部本地引用計(jì)數(shù)的總數(shù)。該GRC將會(huì)精確地等于在所有網(wǎng)絡(luò)節(jié)點(diǎn)上的對(duì)對(duì)象的全部引用的總數(shù)。當(dāng)且僅當(dāng)對(duì)象的GRC為0時(shí),對(duì)象才可以被取消分配(例如,被刪除)。但是,要知道GRC是困難的,因?yàn)楸镜匾糜?jì)數(shù)調(diào)整并沒(méi)有與網(wǎng)絡(luò)的其它節(jié)點(diǎn)協(xié)調(diào)一致,并且理想地,希望在系統(tǒng)被積極地修改的同時(shí)(例如,對(duì)象正被讀出以及正被寫入本地節(jié)點(diǎn)上)計(jì)算GRC。
[0087]根據(jù)本發(fā)明的一種實(shí)施例,GRC通過(guò)在全局名稱空間中將對(duì)象標(biāo)識(shí)符(在此為對(duì)象名稱)的所有權(quán)指派給網(wǎng)絡(luò)中的不同節(jié)點(diǎn)來(lái)確定。并非網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都需要擁有一部分名稱空間。但是,整個(gè)名稱空間必須由所有節(jié)點(diǎn)或其子集所覆蓋。擁有某一范圍的標(biāo)識(shí)符的節(jié)點(diǎn)開始對(duì)于在該范圍內(nèi)的一個(gè)或多個(gè)對(duì)象的GRC計(jì)算,并且開始所產(chǎn)生的取消對(duì)象的分配(例如,垃圾收集)。根據(jù)一種實(shí)施例,基于最終一致性的網(wǎng)絡(luò)協(xié)議被使用,其中GRC在系統(tǒng)仍然被積極地修改的同時(shí)(例如,對(duì)象正被讀出或被寫入以及對(duì)象引用計(jì)數(shù)正被修改)進(jìn)行計(jì)算。如同下文將更詳細(xì)地描述的,所有者節(jié)點(diǎn)為將要對(duì)其確定GRC的一個(gè)或多個(gè)對(duì)象標(biāo)識(shí)符提供標(biāo)簽,本地節(jié)點(diǎn)使用該標(biāo)簽來(lái)標(biāo)記各自的對(duì)象(從而允許在節(jié)點(diǎn)上的活動(dòng)繼續(xù)進(jìn)行),并且節(jié)點(diǎn)交換帶標(biāo)簽的消息,其中全部節(jié)點(diǎn)都給所有者節(jié)點(diǎn)提供它們對(duì)于各自對(duì)象的本地引用計(jì)數(shù),從而允許所有者節(jié)點(diǎn)將GRC計(jì)算為本地引用計(jì)數(shù)的總數(shù)。
[0088]以類似的方式,所有者節(jié)點(diǎn)能夠開始并執(zhí)行實(shí)例核對(duì),其中所有者節(jié)點(diǎn)接收來(lái)自全部本地節(jié)點(diǎn)的有關(guān)對(duì)象在每個(gè)各自節(jié)點(diǎn)上的實(shí)例數(shù)的消息。所有者節(jié)點(diǎn)然后能夠按照SLA (服務(wù)水平協(xié)議)和其它指標(biāo)來(lái)計(jì)算在網(wǎng)絡(luò)節(jié)點(diǎn)上的實(shí)例的期望數(shù)量和位置,并然后指示其它節(jié)點(diǎn)來(lái)執(zhí)行對(duì)象實(shí)例的期望添加或刪除。
[0089]本發(fā)明的這些及其它方面將關(guān)于附圖所示的實(shí)施例在下文更具體地描述。這些實(shí)施例作為示例而提供,并且本領(lǐng)域技術(shù)人員應(yīng)當(dāng)很容易清楚各種修改。因而,本發(fā)明并非意指受所公開的實(shí)施例限制。某些介紹性的材料被作為背景包含進(jìn)來(lái),從而提供實(shí)施例的背
旦
-5^ Ο
[0090]圖1是計(jì)算機(jī)網(wǎng)絡(luò)的示意圖,在此為在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)10中的多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)12、14、16。每個(gè)節(jié)點(diǎn)都包括服務(wù)器lla、llb、llc,這些服務(wù)器通過(guò)網(wǎng)絡(luò)(示為云17)耦接在一起,并且使用標(biāo)準(zhǔn)的通信協(xié)議(例如,TCP/IP)相互通信。服務(wù)器11能夠是任何類型的服務(wù)器,包括但不限于基于Intel的服務(wù)器(例如,IBM3650服務(wù)器)。
[0091]每個(gè)節(jié)點(diǎn)12、14、16從本地(15)用戶18的視角來(lái)看被稱為本地節(jié)點(diǎn),并且包括服務(wù)器1和數(shù)據(jù)存儲(chǔ)13 (在此示為多個(gè)存儲(chǔ)磁盤)兩者。這些本地構(gòu)件經(jīng)由系統(tǒng)總線20耦接在一起并通信。每個(gè)服務(wù)器可以包括處理器、存儲(chǔ)器和網(wǎng)絡(luò)接口,并且還可以包括用戶接口設(shè)備,例如,顯示器、鍵盤和/或鼠標(biāo)。網(wǎng)絡(luò)接口將每個(gè)服務(wù)器耦接至節(jié)點(diǎn)的網(wǎng)絡(luò)。
[0092]在全局上,該多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)被稱為全局網(wǎng)絡(luò)10。觀看該全局網(wǎng)絡(luò)的用戶19具有該網(wǎng)絡(luò)的全局視角。如同以下根據(jù)本發(fā)明的各種實(shí)施例所描述的,軟件和/或硬件被設(shè)置于每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)處,用于執(zhí)行本發(fā)明的各種系統(tǒng)和方法實(shí)施例。
[0093]圖2示出了在本發(fā)明中使用的基于對(duì)象的文件系統(tǒng)的一種實(shí)施例。如同在2010年6月25日提交的且題目為File System的共同未決的共同擁有的美國(guó)專利申請(qǐng)N0.12/823,922中更具體地描述的 ,該申請(qǐng)N0.12/823,922的全文由此通過(guò)引用的方式并入本文,計(jì)算機(jī)程序和/或電子電路產(chǎn)品被提供用于在一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)設(shè)備上命名和存儲(chǔ)文件。產(chǎn)品包括用于實(shí)現(xiàn)使用對(duì)象存儲(chǔ)72的名稱空間文件系統(tǒng)70的可執(zhí)行指令或邏輯電路。在一個(gè)實(shí)例中,名稱空間文件系統(tǒng)是在虛擬文件系統(tǒng)層與塊存儲(chǔ)抽象層之間的存儲(chǔ)棧內(nèi)的層。所有文件系統(tǒng)數(shù)據(jù)都包括對(duì)象,包括數(shù)據(jù)、元數(shù)據(jù)和文件。每個(gè)對(duì)象都具有作為其對(duì)象名稱的對(duì)象指紋,該指紋為對(duì)象內(nèi)容的散列(hash)。文件系統(tǒng)對(duì)象的合集還包括對(duì)象存儲(chǔ)的對(duì)象,每個(gè)合集都包括多個(gè)文件系統(tǒng)對(duì)象的映射并且具有它自己的從合集的內(nèi)容中得出的對(duì)象指紋,其中合集中的一個(gè)或多個(gè)對(duì)象的改變會(huì)改變合集對(duì)象指紋。文件系統(tǒng)根對(duì)象具有從文件系統(tǒng)內(nèi)的全部對(duì)象中得出的對(duì)象指紋,使得在名稱空間的文件系統(tǒng)中的每個(gè)對(duì)象都可通過(guò)跟對(duì)象來(lái)訪問(wèn)。跟蹤根對(duì)象的改變會(huì)提供文件系統(tǒng)活動(dòng)的歷史,即,文件系統(tǒng)快照。索引節(jié)點(diǎn)映射對(duì)象被提供用于包含文件系統(tǒng)索引節(jié)點(diǎn)數(shù)和文件系統(tǒng)對(duì)象指紋的映射,使文件系統(tǒng)P0SIX變得兼容。
[0094]如圖2所示,US N0.12/823,922的對(duì)象存儲(chǔ)已經(jīng)按照本發(fā)明進(jìn)行了修改以運(yùn)行于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)上。圖2示出了使用對(duì)象存儲(chǔ)72來(lái)存儲(chǔ)文件系統(tǒng)的所有持久數(shù)據(jù)對(duì)象的全局名稱空間文件系統(tǒng)70。如同下文將進(jìn)一步描述的,名稱空間文件系統(tǒng)70現(xiàn)在使用位于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)12、14、16上的多個(gè)點(diǎn)對(duì)點(diǎn)本地對(duì)象存儲(chǔ),如圖1所示。為了該目的,每個(gè)本地節(jié)點(diǎn)72a現(xiàn)在都包括本地映射索引73、物理存儲(chǔ)(磁盤)74和對(duì)象代理76,該對(duì)象代理76與網(wǎng)絡(luò)17接口連接,用于發(fā)送/接收有關(guān)在本地節(jié)點(diǎn)12、14、16當(dāng)中共用的對(duì)象的分配和跟蹤的通信。
[0095]圖3示意性地示出了根據(jù)本發(fā)明的一種實(shí)施例的分布式對(duì)象存儲(chǔ)的操作,其中名稱空間文件系統(tǒng)共用位于網(wǎng)絡(luò)的各個(gè)本地節(jié)點(diǎn)上的多個(gè)本地對(duì)象存儲(chǔ)。在所示出的實(shí)施例中,第一本地節(jié)點(diǎn)80被稱為Alice,而第二本地節(jié)點(diǎn)82被稱為Bob。文件系統(tǒng)FS-1位于節(jié)點(diǎn)Alice上并且引用對(duì)象P、Q和R。FS。的副本能夠簡(jiǎn)單地通過(guò)將FS。根簽名發(fā)送到節(jié)點(diǎn)Bob而發(fā)布于節(jié)點(diǎn)Bob上(步驟1)。因?yàn)楦灻脤⑦M(jìn)而從文件系統(tǒng)內(nèi)的所有對(duì)象中得出的對(duì)象,所以在名稱空間的文件系統(tǒng)中的每個(gè)對(duì)象都可通過(guò)跟對(duì)象來(lái)訪問(wèn)。因而,沒(méi)有必要將所引用的對(duì)象(p、Q、R)本身傳輸?shù)焦?jié)點(diǎn)Bob。文件系統(tǒng)FS。在Bob上的這種發(fā)布被示為虛線三角形83,文件系統(tǒng)根對(duì)象被指定為在節(jié)點(diǎn)Bob上的非虛線圓84,以表明根對(duì)象現(xiàn)在正位于節(jié)點(diǎn)Bob上。
[0096]如果在節(jié)點(diǎn)Bob上的FS。隨后需要對(duì)象P(步驟2),則它將在節(jié)點(diǎn)Bob上檢查它的本地索引85并且發(fā)現(xiàn)P沒(méi)有位于節(jié)點(diǎn)Bob上。節(jié)點(diǎn)Bob的對(duì)象代理86因此將給網(wǎng)絡(luò)的其它節(jié)點(diǎn)發(fā)送請(qǐng)求消息90,詢問(wèn)它們是否具有對(duì)象P。在該實(shí)例中,節(jié)點(diǎn)Alice接收到該請(qǐng)求并檢查它的本地索引88,該檢查顯示對(duì)象P位于Alice的本地對(duì)象存儲(chǔ)89上。節(jié)點(diǎn)Alice將具有P的實(shí)例的應(yīng)答消息91發(fā)送給節(jié)點(diǎn)Bob。對(duì)象P現(xiàn)在可以被存儲(chǔ)于節(jié)點(diǎn)Bob的本地對(duì)象存儲(chǔ)上。
[0097]圖4示出了關(guān)于在分布式對(duì)象存儲(chǔ)上共用的對(duì)象的,并且更特別地關(guān)于如何允許保留于本地節(jié)點(diǎn)上的本地引用計(jì)數(shù)LRC具有負(fù)值的另一實(shí)例。在此同樣地,具有對(duì)象P、Q和R的文件系統(tǒng)FS41位于節(jié)點(diǎn)Alice80上(步驟1)。通過(guò)將文件系統(tǒng)根對(duì)象從節(jié)點(diǎn)Alice發(fā)送到節(jié)點(diǎn)Bob而將文件系FS。的副本傳輸給節(jié)點(diǎn)Bob82 (步驟2)。在節(jié)點(diǎn)Bob處的本地用戶92然后提供刪除文件的指令(步驟3),該文件作為文件系統(tǒng)F&的一部分,并且該文件恰好包含P。在通過(guò)取消對(duì)P的引用來(lái)實(shí)現(xiàn)該指令的嘗試(步驟4)中,節(jié)點(diǎn)Bob檢查其用于對(duì)象P的引用的本地對(duì)象存儲(chǔ)。但是,在節(jié)點(diǎn)Bob上的本地映射索引85顯示對(duì)象P的引用計(jì)數(shù)為0。為了實(shí)現(xiàn)對(duì)于對(duì)象P的刪除指令,對(duì)于在本地索引條目上的P的引用計(jì)數(shù)減1,從零(0)到負(fù)1 (-1)。這種保留本地引用計(jì)數(shù)LRC的負(fù)值的能力在全局視角上(S卩,跨節(jié)點(diǎn)的網(wǎng)絡(luò)上)保留引用值,不需要在網(wǎng)絡(luò)上對(duì)對(duì)象實(shí)例進(jìn)行即時(shí)搜索或核對(duì),該搜索或核對(duì)會(huì)產(chǎn)生過(guò)度的網(wǎng)絡(luò)流量。作為代替,在節(jié)點(diǎn)間的引用計(jì)數(shù)核對(duì),即引用計(jì)數(shù)GRC的全局計(jì)算,能夠在需要時(shí)稍后進(jìn)行,以確定在網(wǎng)絡(luò)上取消對(duì)對(duì)象P的全部實(shí)例的分配(例如,用于垃圾收集)是否是適當(dāng)?shù)摹?br>
[0098]圖5還示出了全局引用計(jì)數(shù)確定的實(shí)例。全局引用計(jì)數(shù)GRC是在網(wǎng)絡(luò)化節(jié)點(diǎn)上對(duì)由給定的應(yīng)用引用的對(duì)象的全部引用的總數(shù)。GRC通過(guò)對(duì)存儲(chǔ)于各個(gè)本地節(jié)點(diǎn)上的全部本地引用計(jì)數(shù)LRC求和來(lái)確定。在此我們假定,有可能在時(shí)間的給定實(shí)例下,獲知所有LRC,以便計(jì)算GRC。在該假定下,圖5示出了在節(jié)點(diǎn)Alice80上的本地對(duì)象存儲(chǔ)索引,該節(jié)點(diǎn)Alice80包括對(duì)象P的本地引用計(jì)數(shù)為正1 ( + 1 )、對(duì)象Q的本地引用計(jì)數(shù)為正1 (+1)以及對(duì)象Z的本地引用計(jì)數(shù)為正3(+3)的條目。節(jié)點(diǎn)Bob82具有含有對(duì)對(duì)象X的本地引用計(jì)數(shù)為正1 (+1)、對(duì)象Y的本地引用計(jì)數(shù)為正1 (+1)以及對(duì)象Z的本地引用計(jì)數(shù)為正1 (+1)的條目的本地對(duì)象存儲(chǔ)索引。對(duì)象Z的GRC在此時(shí)為Z在節(jié)點(diǎn)Alice上的本地引用計(jì)數(shù)(為正3 (+3))以及在節(jié)點(diǎn)Bob上的本地引用計(jì)數(shù)(為正1 (+1))之和,從而對(duì)象Z的GRC為正4(+4)。這表明,在網(wǎng)絡(luò)節(jié)點(diǎn)中仍然存在對(duì)對(duì)象Z的引用,并且Z不應(yīng)當(dāng)被取消分配。只有當(dāng)對(duì)象Z的GRC為0時(shí),取消對(duì)對(duì)象Z的分配才是安全的。
[0099]圖6示出了在文件系統(tǒng)中對(duì)對(duì)象的獨(dú)立引用,以及在對(duì)象存儲(chǔ)102保留對(duì)象位置(對(duì)象存儲(chǔ)于其中)的物理視圖的情況下如何使用對(duì)象存儲(chǔ)102的文件系統(tǒng)100來(lái)保留對(duì)象的文件系統(tǒng)邏輯視圖(即,對(duì)象的內(nèi)容的獲知)的概念。在圖6中,兩個(gè)獨(dú)立引用被示于樹結(jié)構(gòu)中;在樹的頂部或根部,斜線號(hào)(/)指示特定的文件系統(tǒng)。在樹的頂節(jié)點(diǎn)以下的是文件F00和文件BAR各自的兩個(gè)分支。在文件F00以下的是到對(duì)象A和B的分支。在對(duì)象BAR以下的是到對(duì)象B和Q的分支。在該實(shí)例中,存在對(duì)對(duì)象B的兩個(gè)獨(dú)立引用,一個(gè)通過(guò)文件F00,而另一個(gè)通過(guò)文件BAR。對(duì)象存儲(chǔ)因而包括為2的對(duì)對(duì)象B的引用計(jì)數(shù)(B2)。剩余的對(duì)象A、Q、FOO、BAR和/每個(gè)都具有為1的引用計(jì)數(shù)。
[0100]圖7還示出了如何能夠在仍然允許在節(jié)點(diǎn)網(wǎng)絡(luò)上確定全局引用計(jì)數(shù)的同時(shí)允許根據(jù)本發(fā)明的使對(duì)象引用與對(duì)象實(shí)例解耦。在本發(fā)明中,本地引用計(jì)數(shù)不單獨(dú)確定實(shí)例是否能夠被刪除。相反,如同前面所描述的,只有通過(guò)對(duì)所有本地引用計(jì)數(shù)求和而獲得的全局視角確定取消對(duì)象的全部實(shí)例的分配是否安全(因?yàn)樵谖募到y(tǒng)中不再有對(duì)該對(duì)象的任何引用)。例如,圖7示出了網(wǎng)絡(luò)節(jié)點(diǎn)Alice80、Bob82和Eve94。文件F00包括存儲(chǔ)于節(jié)點(diǎn)Alice上的本地對(duì)象存儲(chǔ)103內(nèi)的對(duì)象P,并且在節(jié)點(diǎn)Alice上的索引具有對(duì)于對(duì)象P的為正1 (+1)的本地引用計(jì)數(shù)。節(jié)點(diǎn)Bob82不具有存儲(chǔ)于它的本地對(duì)象存儲(chǔ)104內(nèi)的對(duì)象P的副本,并且對(duì)象P的本地引用計(jì)數(shù)為負(fù)1 (-1)。節(jié)點(diǎn)Eve94在其本地對(duì)象存儲(chǔ)105內(nèi)不具有對(duì)象P的實(shí)例,并且對(duì)象P的本地引用計(jì)數(shù)為正1 (+1)。因而,在節(jié)點(diǎn)Bob和節(jié)點(diǎn)Eve上,對(duì)象P的引用計(jì)數(shù)與是否存在存儲(chǔ)于各自的節(jié)點(diǎn)Bob或節(jié)點(diǎn)Eve上的實(shí)例無(wú)關(guān)。但是,當(dāng)對(duì)象P的全局引用計(jì)數(shù)GRC (包括對(duì)象P的三個(gè)本地引用計(jì)數(shù)之和)被計(jì)算時(shí),所算得的總數(shù)為正1 (+1),表明仍然存在對(duì)對(duì)象P的引用,并且P不應(yīng)當(dāng)被取消分配。
[0101]圖8是示出在該多個(gè)節(jié)點(diǎn)上保留本地引用計(jì)數(shù)的一個(gè)實(shí)例的流程圖。如同前面所描述的,對(duì)于任意對(duì)象0,對(duì)于文件系統(tǒng)P的0的全局引用計(jì)數(shù)精確匹配對(duì)象0在網(wǎng)絡(luò)化節(jié)點(diǎn)上的全部引用之和,假定所有待決的引用計(jì)數(shù)已經(jīng)完全在整個(gè)文件系統(tǒng)A中傳播開。在圖8中,本地節(jié)點(diǎn)Alice和本地節(jié)點(diǎn)Bob每個(gè)都具有它們自己的本地對(duì)象存儲(chǔ)和對(duì)象代理。在節(jié)點(diǎn)Alice上的文件系統(tǒng)P包括對(duì)象A和B。文件系統(tǒng)P在節(jié)點(diǎn)Alice上具有對(duì)對(duì)象A的兩個(gè)引用,并且對(duì)象A在節(jié)點(diǎn)Alice上的本地引用計(jì)數(shù)為+2 (A2)。對(duì)象B在節(jié)點(diǎn)Alice上的本地引用計(jì)數(shù)為+1 (BP。文件系統(tǒng)Q在節(jié)點(diǎn)Bob上已經(jīng)引用了對(duì)象A —次,并且因而對(duì)象A在節(jié)點(diǎn)B上的本地引用計(jì)數(shù)為+1 (AJ。
[0102]在節(jié)點(diǎn)Bob上的對(duì)象代理現(xiàn)在希望將對(duì)象A復(fù)制到節(jié)點(diǎn)Alice。在節(jié)點(diǎn)Alice上的對(duì)象代理接收由節(jié)點(diǎn)Bob發(fā)出的請(qǐng)求,并且使對(duì)象A在節(jié)點(diǎn)Alice上的本地引用計(jì)數(shù)加1 以達(dá)+3 (A3)。
[0103]隨后,在節(jié)點(diǎn)Alice上的文件系統(tǒng)P希望將文件系統(tǒng)P的副本移動(dòng)到節(jié)點(diǎn)Bob。當(dāng)在節(jié)點(diǎn)Bob上的文件系統(tǒng)P讀取對(duì)象B時(shí),它在節(jié)點(diǎn)Bob上的本地對(duì)象存儲(chǔ)內(nèi)未能找到對(duì)象B。在節(jié)點(diǎn)Bob上的對(duì)象代理然后將對(duì)對(duì)象B的讀取請(qǐng)求發(fā)送到節(jié)點(diǎn)Alice。在節(jié)點(diǎn)Alice上的對(duì)象代理從節(jié)點(diǎn)Alice上的本地對(duì)象存儲(chǔ)中讀取B,將對(duì)象B發(fā)送給節(jié)點(diǎn)Bob,并且對(duì)象B然后被提供給節(jié)點(diǎn)Bob上的文件系統(tǒng)P。
[0104]隨后,在節(jié)點(diǎn)Bob上的文件系統(tǒng)Q取消其對(duì)A首次引用,將對(duì)象A的本地引用計(jì)數(shù)減小至0 接著,在節(jié)點(diǎn)Bob上的文件系統(tǒng)Q發(fā)出對(duì)對(duì)象A的二次取消引用,使對(duì)象A在節(jié)點(diǎn)Bob上的本地引用計(jì)數(shù)減小至-1 (A_i)。在現(xiàn)有技術(shù)中,負(fù)的引用計(jì)數(shù)是不允許的,并且節(jié)點(diǎn)Bob將必須與其它節(jié)點(diǎn)通信并找到另一個(gè)節(jié)點(diǎn)來(lái)接受對(duì)象A的負(fù)的引用計(jì)數(shù)。但是,根據(jù)本發(fā)明,無(wú)需執(zhí)行即時(shí)核對(duì)并且該網(wǎng)絡(luò)流量得以避免。相反,核對(duì)能夠被推遲直至需要時(shí),如同下文將進(jìn)一步描述的。
[0105]根據(jù)本發(fā)明的另一方面,本地節(jié)點(diǎn)被賦予某一具體范圍的對(duì)象標(biāo)識(shí)符的或者在總的密鑰空間中的密鑰(在此為對(duì)象名稱)的所有權(quán)。所有者節(jié)點(diǎn)負(fù)責(zé)開始引用計(jì)數(shù)傳播。并非存儲(chǔ)系統(tǒng)內(nèi)的每個(gè)節(jié)點(diǎn)都需要擁有一部分密鑰空間。但是,整個(gè)密鑰空間必須由某一節(jié)點(diǎn)集所覆蓋。密鑰的所有者(節(jié)點(diǎn))負(fù)責(zé)計(jì)算相應(yīng)對(duì)象的全局引用計(jì)數(shù)GRC。在一種實(shí)施例中,方法包括求本地引用計(jì)數(shù)和本地實(shí)例計(jì)數(shù)兩者的總數(shù)。在其它實(shí)施例中,可以執(zhí)行對(duì)一個(gè)或另一個(gè)的計(jì)數(shù)。
[0106]在一個(gè)實(shí)例中,計(jì)數(shù)過(guò)程可以包括下列步驟:
[0107]a.所有者節(jié)點(diǎn)(標(biāo)注)
[0108]所有者創(chuàng)建作為用于指出在時(shí)間上的特定點(diǎn)的GRC計(jì)算的標(biāo)識(shí)符的唯一標(biāo)簽(Tag);
[0109]所有者決定GRC將要被計(jì)算的密鑰范圍RK ;
[0110]所有者將(RK,T)發(fā)送到存儲(chǔ)系統(tǒng)中的全部節(jié)點(diǎn)。
[0111]b.接受者節(jié)點(diǎn)(累加)
[0112]對(duì)于接收到的每個(gè)(RK,T),接受者必須給本地的所有密鑰加上標(biāo)簽T ;
[0113]在標(biāo)簽T被記入之后對(duì)RK內(nèi)的密鑰的任何更多修改都必須是不同的;
[0114]對(duì)于在RK內(nèi)的每個(gè)密鑰,接受者將其本地引用計(jì)數(shù)以及實(shí)例的本地?cái)?shù)量連同標(biāo)簽T一起發(fā)送回到所有者節(jié)點(diǎn)。
[0115]c.所有者節(jié)點(diǎn)(核對(duì))
[0116]所有者對(duì)接收自其它節(jié)點(diǎn)的本地引用計(jì)數(shù),連同它自己的本地引用計(jì)數(shù)一起求和,以確定全局引用計(jì)數(shù)。如果全局引用計(jì)數(shù)為0,則所有者將具有標(biāo)簽T的刪除消息發(fā)送到所有其它節(jié)點(diǎn),并且刪除密鑰在所有者節(jié)點(diǎn)上的任何本地實(shí)例;
[0117]如果在T記入對(duì)象之后有活動(dòng),則接收節(jié)點(diǎn)和所有者節(jié)點(diǎn)可以不實(shí)際刪除對(duì)象;所有者還回顧對(duì)象在網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn)上的實(shí)例數(shù),并且確定是否可以添加或刪除各個(gè)實(shí)例以提聞性能等。
[0118]d.接受者節(jié)點(diǎn)(動(dòng)作)
[0119]接受者執(zhí)行刪除指令,并且將確認(rèn)與T 一起發(fā)送回給所有者;接受者執(zhí)行有關(guān)實(shí)例創(chuàng)建(如果這樣指示)的指令,并且將確認(rèn)與T 一起發(fā)送回給所有者。
[0120]這種核對(duì)方法提供了“最終一致性”。消息在節(jié)點(diǎn)之間接收或處理的順序并不是重要的,只要它們最終全都回到了所有者節(jié)點(diǎn)。標(biāo)簽充當(dāng)允許接受者節(jié)點(diǎn)繼續(xù)在集合PK上的活動(dòng)的屏障,而節(jié)點(diǎn)則忙于核對(duì)過(guò)程。在一種實(shí)施例中,標(biāo)簽是⑶ID (全局唯一 ID)。
[0121]圖9示出了該標(biāo)注和計(jì)數(shù)過(guò)程的一個(gè)實(shí)例。在此,節(jié)點(diǎn)Alice擁有密鑰空間的一部分,并決定在該范圍的一個(gè)子部分上工作。Alice生成唯一的標(biāo)簽T,并且連同標(biāo)簽T 一起發(fā)出在期望范圍KR內(nèi)對(duì)于本地引用計(jì)數(shù)和本地實(shí)例計(jì)數(shù)兩者的累加請(qǐng)求。
[0122]節(jié)點(diǎn)Bob和Eve最終接收到來(lái)自Alice的對(duì)于密鑰范圍KR、標(biāo)簽T的請(qǐng)求。請(qǐng)求能夠按照任何順序到達(dá)節(jié)點(diǎn)Bob和Eve。每個(gè)接受者節(jié)點(diǎn)都必須標(biāo)注密鑰范圍。如果例如在節(jié)點(diǎn)Bob上的密鑰范圍KR內(nèi)的對(duì)象X將被修改,則Bob必須創(chuàng)建屏障,例如,現(xiàn)在存在著兩個(gè)對(duì)象X:一個(gè)對(duì)象Xtag和另一個(gè)對(duì)象Xother<>每個(gè)接受:者節(jié)點(diǎn)然后對(duì)于在范圍R內(nèi)的每個(gè)密鑰K以下列項(xiàng)對(duì)節(jié)點(diǎn)Alice作出響應(yīng):本地引用計(jì)數(shù)(refs)以及在本地節(jié)點(diǎn)上的實(shí)例(指向物理實(shí)例的指針1ns)的數(shù)量。
[0123]所有者節(jié)點(diǎn)Alice現(xiàn)在具有足夠多的信息來(lái)在標(biāo)簽T之下計(jì)算在范圍R內(nèi)的每個(gè)密鑰K的全局引用計(jì)數(shù)和全局實(shí)例計(jì)數(shù)。Alice累加來(lái)自全部節(jié)點(diǎn)的應(yīng)答。如果對(duì)象的全局引用計(jì)數(shù)GRC為0,則Alice可以發(fā)送指令到全部節(jié)點(diǎn)以取消對(duì)象的分配。接受者以確認(rèn)消息作應(yīng)答。Alice可以應(yīng)用各種方法(例如,服務(wù)水平協(xié)議)來(lái)確定是否應(yīng)當(dāng)在其它節(jié)點(diǎn)中的一個(gè)或多個(gè)節(jié)點(diǎn)上創(chuàng)建或刪除實(shí)例。只有當(dāng)全局引用計(jì)數(shù)為0時(shí),才可以刪除全部實(shí)例。
[0124]更多的實(shí)施例
[0125]本發(fā)明可以被用來(lái)實(shí)現(xiàn)例如在共同未決的且共同擁有的A.J.Beaverson和P.Bowden的題目為File System的美國(guó)專利申請(qǐng)N0.12/823,922以及P.Bowden和A.J.Beaverson的題目為Scalable Indexing的美國(guó)專利申請(qǐng)N0.12/823, 452中公開的文件系統(tǒng)和/或?qū)ξ募到y(tǒng)的索引,這兩個(gè)申請(qǐng)均在2010年6月25日提交,并且都要求在2009年6月26日提交的美國(guó)臨時(shí)申請(qǐng)N0.61/269,633的優(yōu)先權(quán)。要求這些申請(qǐng)中的每個(gè)申請(qǐng)的優(yōu)先權(quán),并且由此通過(guò)引用的方式全文并入每個(gè)申請(qǐng)的完整公開內(nèi)容。
[0126]本發(fā)明的實(shí)施例能夠以數(shù)字電子電路或者以計(jì)算機(jī)硬件、固件、軟件或者它們的組合來(lái)實(shí)現(xiàn)。本發(fā)明的實(shí)施例能夠被實(shí)現(xiàn)為計(jì)算機(jī)程序產(chǎn)品,即,有形地實(shí)現(xiàn)于計(jì)算機(jī)可讀介質(zhì)內(nèi)(例如,在機(jī)器可讀存儲(chǔ)設(shè)備中)的計(jì)算機(jī)程序,以便由數(shù)據(jù)處理裝置(例如,可編程的處理器、一個(gè)或多個(gè)計(jì)算機(jī))執(zhí)行或者控制它們的操作。計(jì)算機(jī)程序能夠以任何形式的編程語(yǔ)言(包括編譯或解釋語(yǔ)言)來(lái)編寫,并且它能夠以任何形式來(lái)部署,包括作為獨(dú)立式程序或者作為模塊、構(gòu)件、子例程,或者適合于在計(jì)算環(huán)境中使用的其它單元。計(jì)算機(jī)程序能夠被部署以在一個(gè)站點(diǎn)處的或者分布于多個(gè)站點(diǎn)上的且通過(guò)通信網(wǎng)絡(luò)互連的一個(gè)或多個(gè)計(jì)算機(jī)上執(zhí)行。
[0127]本發(fā)明的實(shí)施例的方法步驟能夠由執(zhí)行計(jì)算機(jī)程序的一個(gè)或多個(gè)可編程的處理器來(lái)執(zhí)行,以通過(guò)在輸入數(shù)據(jù)上操作并生成輸出來(lái)執(zhí)行本發(fā)明的功能。方法步驟還能夠通過(guò)特殊用途的邏輯電路來(lái)執(zhí)行,并且本發(fā)明的裝置能夠被實(shí)現(xiàn)為特殊用途的邏輯電路,例如,F(xiàn)PGA (現(xiàn)場(chǎng)可編程門陣列)或ASIC (專用集成電路)。
[0128]舉例來(lái)說(shuō),適用于執(zhí)行計(jì)算機(jī)程序的處理器包括通用和專用兩種微處理器,以及任何類型的數(shù)字計(jì)算機(jī)的任意一個(gè)或多個(gè)處理器。一般地,處理器將接收來(lái)自只讀存儲(chǔ)器或隨機(jī)存取存儲(chǔ)器或兩者的指令和數(shù)據(jù)。計(jì)算機(jī)的基本元件是用于執(zhí)行指令的處理器以及用于存儲(chǔ)指令和數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)器設(shè)備。一般地,計(jì)算機(jī)還將包括,或者將在操作上耦接以接收來(lái)自用于存儲(chǔ)數(shù)據(jù)的一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備的數(shù)據(jù)或者給其傳輸數(shù)據(jù),或兩者,例如,磁盤、磁光盤或光盤。適用于實(shí)現(xiàn)計(jì)算機(jī)程序指令和數(shù)據(jù)的信息載體包括所有形式的非易失性存儲(chǔ)器,包括,例如,半導(dǎo)體存儲(chǔ)器設(shè)備(例如,EPR0M、EEPR0M和閃存設(shè)備)、磁盤(例如,內(nèi)部硬盤或可移動(dòng)磁盤)、磁光盤,以及⑶ROM和DVD-ROM光盤。處理器和存儲(chǔ)器能夠由特殊用途邏輯電路來(lái)補(bǔ)充,或者被并入其內(nèi)。
[0129]應(yīng)當(dāng)理解,以上描述意在說(shuō)明而非限制本發(fā)明的范圍。
【權(quán)利要求】
1.一種含有用于執(zhí)行方法的可執(zhí)行程序指令的計(jì)算機(jī)可讀介質(zhì),所述方法包括: 在用于存儲(chǔ)的對(duì)象的共用的多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)中,所述對(duì)象在所述網(wǎng)絡(luò)化節(jié)點(diǎn)間具有全局唯一的名稱,并且其中所述對(duì)象名稱不隨著所述對(duì)象被存儲(chǔ)在所述節(jié)點(diǎn)上的位置而改變; 在每個(gè)節(jié)點(diǎn)處保留對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC,與存儲(chǔ)于所述本地節(jié)點(diǎn)上的任何對(duì)象實(shí)例無(wú)關(guān),所述LRC被保留為帶符號(hào)的整數(shù), 其中對(duì)象名稱的取消引用能夠生成負(fù)的LRC值。
2.根據(jù)權(quán)利要求1所述的介質(zhì),其中所述方法包括: 確定包含所述LRC之和的全局引用計(jì)數(shù)GRC。
3.根據(jù)權(quán)利要求2所述的介質(zhì),其中所述確定步驟包括: 在所述GRC被確定為O時(shí)識(shí)別待取消分配的對(duì)象實(shí)例。
4.根據(jù)權(quán)利要求3所述的介質(zhì),其中所述確定步驟包括: 在所述節(jié)點(diǎn)當(dāng)中實(shí)現(xiàn)最終一致性網(wǎng)絡(luò)協(xié)議,用于確定對(duì)象是否可以被取消分配。
5.根據(jù)權(quán)利要求3所述的介質(zhì),其中所述確定步驟包括: 將一定范圍的對(duì)象標(biāo)識(shí)符的所有權(quán)指派給所述網(wǎng)絡(luò)節(jié)點(diǎn)中的一個(gè)節(jié)點(diǎn),其中所述一個(gè)節(jié)點(diǎn)發(fā)起對(duì)于所述范圍的全部或其子集的所述確定步驟。
6.根據(jù)權(quán)利要求1所述的介質(zhì),其中所述方法步驟包括: 在每個(gè)節(jié)點(diǎn)上保留本地對(duì)象存儲(chǔ),其中所述本地對(duì)象存儲(chǔ)共同地包括所述全局唯一對(duì)象名稱的名稱空間。
7.根據(jù)權(quán)利要求6所述的介質(zhì),其中所述方法包括: 所述本地對(duì)象存儲(chǔ)保留對(duì)象名稱的本地映射索引、LRC和指向所述對(duì)象被存儲(chǔ)在所述本地對(duì)象存儲(chǔ)上的任何物理對(duì)象位置的指針。
8.根據(jù)權(quán)利要求1所述的介質(zhì),其中所述方法包括: 每個(gè)對(duì)象具有從所述對(duì)象的內(nèi)容得出的作為其對(duì)象名稱的對(duì)象指紋。
9.根據(jù)權(quán)利要求8所述的介質(zhì),其中所述方法包括: 所述指紋包括所述對(duì)象內(nèi)容的散列。
10.根據(jù)權(quán)利要求6所述的介質(zhì),其中所述方法包括: 文件系統(tǒng)共同使用在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中的一個(gè)或多個(gè)所述節(jié)點(diǎn)上的所述對(duì)象存儲(chǔ)作為用來(lái)存儲(chǔ)所述文件系統(tǒng)的全部持久數(shù)據(jù)的方法。
11.根據(jù)權(quán)利要求10所述的介質(zhì),其中所述方法包括: ?所有文件系統(tǒng)數(shù)據(jù)、元數(shù)據(jù)和文件包括所述對(duì)象存儲(chǔ)的對(duì)象,每個(gè)對(duì)象具有作為其對(duì)象名稱的對(duì)象指紋; ?文件系統(tǒng)對(duì)象的合集還包括所述對(duì)象存儲(chǔ)的對(duì)象,每個(gè)合集包括多個(gè)所述文件系統(tǒng)對(duì)象的映射并且具有從所述合集的所述內(nèi)容中得出的它自己的對(duì)象指紋,其中所述合集的一個(gè)或多個(gè)對(duì)象的改變會(huì)改變所述合集對(duì)象指紋;并且 ?文件系統(tǒng)根對(duì)象具有根對(duì)象指紋,使得在所述名稱空間文件系統(tǒng)中的每個(gè)對(duì)象可通過(guò)所述根對(duì)象訪問(wèn)。
12.根據(jù)權(quán)利要求1所述的方法,其中所述方法包括: 基于網(wǎng)絡(luò)或系統(tǒng)的性能或可靠性來(lái)選擇所述節(jié)點(diǎn)中的一個(gè)或多個(gè)節(jié)點(diǎn)作為用于存儲(chǔ)獨(dú)立于所述對(duì)象名稱的對(duì)象的一個(gè)或多個(gè)實(shí)例的位置。
13.根據(jù)權(quán)利要求1所述的介質(zhì),其中所述方法包括: 所述存儲(chǔ)的對(duì)象的所述共用包括在節(jié)點(diǎn)之間相對(duì)于存儲(chǔ)的對(duì)象的對(duì)象名稱、LRC和位置進(jìn)行通信。
14.根據(jù)權(quán)利要求6所述的介質(zhì),其中所述方法包括: 當(dāng)應(yīng)用取消引用對(duì)象名稱并且所述對(duì)象的實(shí)例沒(méi)有被存儲(chǔ)于本地對(duì)象存儲(chǔ)上時(shí),所述本地對(duì)象存儲(chǔ)生成-1的LRC。
15.根據(jù)權(quán)利要求6所述的介質(zhì),其中所述方法包括: 存儲(chǔ)系統(tǒng)共同使用在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中的一個(gè)或多個(gè)所述節(jié)點(diǎn)上的所述對(duì)象存儲(chǔ)作為用來(lái)存儲(chǔ)所述存儲(chǔ)系統(tǒng)的全部持久數(shù)據(jù)的方法。
16.一種計(jì)算機(jī)可讀介質(zhì),含有用于執(zhí)行在運(yùn)行于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn)上的分布式點(diǎn)對(duì)點(diǎn)存儲(chǔ)系統(tǒng)中跟蹤對(duì)數(shù)據(jù)對(duì)象的引用的方法的可執(zhí)行指令,所述對(duì)象在所述網(wǎng)絡(luò)化節(jié)點(diǎn)間具有全局唯一的名稱,每個(gè)節(jié)點(diǎn)具有用于命名對(duì)象并將對(duì)象存儲(chǔ)于所述本地節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且 所述本地對(duì)象存儲(chǔ)共用所述對(duì)象, 所述方法包括: 在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上確定用于在所述本地節(jié)點(diǎn)上存儲(chǔ)數(shù)據(jù)對(duì)象的實(shí)例的一個(gè)或多個(gè)位置; 在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上將所存儲(chǔ)的實(shí)例在所述本地節(jié)點(diǎn)上的所述一個(gè)或多個(gè)位置映射到所述對(duì)象名稱,其中所述位置不改變所述對(duì)象名稱;以及 在多個(gè)本地節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)上保留對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC,所述LRC的值包括對(duì)于在所述本地節(jié)點(diǎn)上的所述對(duì)象的引用計(jì)數(shù)調(diào)整之和,其中所述LRC與是否有所引用的對(duì)象的任何實(shí)例被存儲(chǔ)于所述本地節(jié)點(diǎn)上無(wú)關(guān)。
17.一種計(jì)算機(jī)可讀介質(zhì),含有用于執(zhí)行方法的可執(zhí)行程序指令,所述方法包括: 對(duì)于多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具有用于將對(duì)象存儲(chǔ)于各自所述節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),所述對(duì)象在所述網(wǎng)絡(luò)化節(jié)點(diǎn)間具有全局唯一的名稱; 所述本地對(duì)象存儲(chǔ)共用所述對(duì)象中的一個(gè)或多個(gè)對(duì)象;以及 應(yīng)用使用所述本地對(duì)象存儲(chǔ)用于將持久數(shù)據(jù)存儲(chǔ)為對(duì)象,所述應(yīng)用要求存儲(chǔ)于所述網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自所述對(duì)象的引用數(shù); 將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上,所述LRC的值包括在所述本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整之和,其中所述LRC與所引用的對(duì)象的任何實(shí)例被存儲(chǔ)于所述本地對(duì)象存儲(chǔ)內(nèi)無(wú)關(guān)使得允許所述LRC的負(fù)值;以及確定包含所述LRC之和的全局引用計(jì)數(shù)GRC。
18.根據(jù)權(quán)利要求17所述的介質(zhì),其中: 所述應(yīng)用包括文件系統(tǒng)或存儲(chǔ)系統(tǒng)。
19.一種設(shè)備,包括: 多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具有用于將對(duì)象存儲(chǔ)于各自所述節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且所述對(duì)象在所述網(wǎng)絡(luò)化節(jié)點(diǎn)間具有全局唯一的名稱; 所述本地對(duì)象存儲(chǔ)共用所述對(duì)象中的一個(gè)或多個(gè)對(duì)象;以及 應(yīng)用,所述應(yīng)用使用所述本地對(duì)象存儲(chǔ)將持久數(shù)據(jù)存儲(chǔ)為對(duì)象,所述應(yīng)用要求存儲(chǔ)于所述網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自所述對(duì)象的引用數(shù); 用于將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上的裝置,所述LRC的值包括在所述本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整之和,其中所述LRC與所引用的對(duì)象的任何實(shí)例被存儲(chǔ)于所述本地對(duì)象存儲(chǔ)內(nèi)無(wú)關(guān)使得允許所述LRC的負(fù)值;以及用于確定包含所述LRC之和的全局引用計(jì)數(shù)GRC的裝置。
20.—種設(shè)備,包括: 多個(gè)網(wǎng)絡(luò)化節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具有用于將對(duì)象存儲(chǔ)于各自所述節(jié)點(diǎn)上的本地對(duì)象存儲(chǔ),并且所述對(duì)象在所述網(wǎng)絡(luò)化節(jié)點(diǎn)間具有全局唯一的名稱; 所述本地對(duì)象存儲(chǔ)共用所述對(duì)象中的一個(gè)或多個(gè)對(duì)象;以及 應(yīng)用,所述應(yīng)用使用所述本地對(duì)象存儲(chǔ)用于將持久數(shù)據(jù)存儲(chǔ)為對(duì)象,所述應(yīng)用要求存儲(chǔ)于所述網(wǎng)絡(luò)化節(jié)點(diǎn)上的每個(gè)對(duì)象的引用計(jì)數(shù)包括對(duì)各自所述對(duì)象的引用數(shù); 用于將對(duì)對(duì)象名稱的引用的本地引用計(jì)數(shù)LRC保留于每個(gè)節(jié)點(diǎn)上的裝置,所述LRC的值包括在所述本地節(jié)點(diǎn)上的引用計(jì)數(shù)調(diào)整之和,其中所述LRC與所引用的對(duì)象的任何實(shí)例被存儲(chǔ)于所述本地對(duì)象存儲(chǔ)內(nèi)無(wú)關(guān)使得允許所述LRC的負(fù)值;以及 用于基于網(wǎng)絡(luò)或系統(tǒng)的性能或可靠性來(lái)選擇所述本地對(duì)象存儲(chǔ)中的一個(gè)或多個(gè)作為用于存儲(chǔ)獨(dú)立于所述對(duì)象名稱的對(duì)象實(shí)例的位置的裝置。
【文檔編號(hào)】G06F17/30GK103635902SQ201280030779
【公開日】2014年3月12日 申請(qǐng)日期:2012年5月11日 優(yōu)先權(quán)日:2011年5月13日
【發(fā)明者】A·J·比弗森, K·切特拉普, J·M·克澤爾考維茨, S·曼賈納塔 申請(qǐng)人:森普利維蒂公司