專利名稱:對象存儲庫在網(wǎng)絡上的基于群的同步的制作方法
對象存儲庫在網(wǎng)絡上的基于群的同步
背景技術(shù):
在計算領(lǐng)域中,許多情況牽涉到一組計算機或設備被配置以存儲數(shù)據(jù),其有時被表示為一組對象,這里計算機通過網(wǎng)絡被連接。在一些情況下,一組計算機或設備可以分別存儲特定對象的本地表示。可能希望的是,通過在網(wǎng)絡上通信而將對于對象的一個本地表示的改變傳播到被存儲在另外的計算機或設備上的對應對象的其它本地表示。在更復雜的情況下,共享的對象組可能較大,且改變可能是經(jīng)常的。然而,特定的計算機或設備的可得到的網(wǎng)絡帶寬可能是有限的,且可能用來對計算機或設備可用以接收關(guān)于改變的對象的數(shù)據(jù)和發(fā)送關(guān)于對本地表示的改變的數(shù)據(jù)到其它計算機或設備的速率進行限制。所以,可能難以建立一種可靠的機制,借此,計算機和設備可以傳達關(guān)于對這樣的對象的改變的通知, 并且分配網(wǎng)絡的有限帶寬,以達到對這樣的數(shù)據(jù)對象的改變的有效傳播。
發(fā)明內(nèi)容
本概要被提供來以簡化的形式介紹概念的選擇,這些概念還將在下面的詳細說明中進行描述。本概要既不打算確認要求保護的主題的關(guān)鍵因素或必要特征,也不打算被使用來限制要求保護的主題的范圍。用于同步對象的一個機制牽涉到在網(wǎng)絡的節(jié)點之間的安排,當節(jié)點檢測到對于對象的本地表示的改變時,諸如編寫新的對象或更改現(xiàn)有的對象(任何這樣的改變在這里被稱為“更新的對象”),它把更新的對象通知給完全互連的節(jié)點(“鄰居”)的子組,并識別不具有更新對象的鄰居。然后它可以安排來將對象以有效的方式——諸如經(jīng)由對等網(wǎng)絡—— 發(fā)送給這些鄰居。具體地,小的鄰居組可以形成“群(swarm)”類型的對等網(wǎng)絡,其中每個鄰居可以在接收來自源(即發(fā)起對等網(wǎng)絡并具有完整的更新對象的節(jié)點)的對象的一些部分的時候,將對象的所接收部分轉(zhuǎn)發(fā)到其它鄰居,并可以同時從其它鄰居處接收對象的其它部分。所以,這個技術(shù)利用組成群網(wǎng)絡的諸節(jié)點的上載和下載帶寬兩者來達到比從源到每個鄰居的集中式對象轉(zhuǎn)送更快速的對象分發(fā)。而且,與被配置來促進競爭公平性的其它群網(wǎng)絡(例如,促進上載容量在要交換數(shù)據(jù)的相當大的部分的節(jié)點之間的“公平”分布的 BitTorrent的各方面)相比,連接這些設備的群網(wǎng)絡可被配置成利用來自具有更多上載容量的節(jié)點的更多帶寬,以便達到更新對象的更快速的分發(fā)。另外的特征可以任選地被合并, 以便促進在各種情況下的經(jīng)濟性和魯棒性(例如,“要求(Ask) ”技術(shù)可被包括進來以便允許新連接的或重新連接的計算機或設備接收在該計算機或設備離線時分發(fā)的改變,以及與計算環(huán)境主機進行的通信可被包括進來以便同步對象與用于對象組的集中的和有權(quán)威的源。)。為了完成上述的和相關(guān)的目的,以下的說明和附圖闡述某些說明性的方面和實現(xiàn)。這些是可用以利用一個或多個方面的各種方式中僅僅幾種方式的指示。當結(jié)合附圖考慮時,從以下的詳細說明中,本公開內(nèi)容的其它方面、優(yōu)點和新穎的特征將變得明顯。
圖1是源節(jié)點通過網(wǎng)絡發(fā)送對象到節(jié)點組的圖解說明。圖2是源節(jié)點通過網(wǎng)絡發(fā)送對象到節(jié)點組的另一個圖解說明。圖3是源節(jié)點通過網(wǎng)絡發(fā)送對象到節(jié)點組的另一個圖解說明。圖4是源節(jié)點通過網(wǎng)絡發(fā)送對象到節(jié)點組的另一個圖解說明。圖5是源節(jié)點通過網(wǎng)絡發(fā)送對象到節(jié)點組的另一個圖解說明。圖6是一組計算機的圖解說明,這組計算機被配置成同步在它們中間存儲且由計算環(huán)境主機存儲的對象的本地表示。圖7是一組節(jié)點通過網(wǎng)絡同步對象的圖解說明。圖8是流程圖,其圖示同步由計算機存儲的對象組中的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的示范性方法。圖9是流程圖,其圖示同步由計算機存儲的對象組中的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的另一個示范性方法。圖10是部件框圖,其圖示用于同步由計算機存儲的對象組中的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的示范性系統(tǒng)。圖11是包括被配置成體現(xiàn)這里闡述的措施(provision)中的一個或多個的處理器可執(zhí)行指令的示范性計算機可讀介質(zhì)的圖解說明。圖12是被配置成通過使用群組塊圖(swarm chunk map)而同步對象的本地表示的一組計算機的圖解說明。圖13是流程圖,其圖示同步由計算機存儲的對象組中的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的另一個示范性方法。圖14圖示在其中可以實施這里闡述的措施中的一個或多個的示范性計算環(huán)境。
具體實施例方式現(xiàn)在參照附圖描述要求保護的主題,其中同樣的參考標號被使用來在各處指同樣的單元。在以下的描述中,為了說明起見,闡述了許多具體的細節(jié),以便提供對要求保護的主題的透徹的了解。然而,顯然,要求保護的主題可以無需這些具體的細節(jié)而被實踐。在另外的實例中,結(jié)構(gòu)和設備以框圖的形式被顯示,以便使描述要求保護的主題更容易。在計算領(lǐng)域,許多情況牽涉到存儲了各種數(shù)據(jù)組并可以通過網(wǎng)絡進行通信的一組計算機(例如,服務器、工作站、筆記本、移動電話和其它設備)。在這些情況的某些情況下, 兩個或更多個計算機可以分別存儲特定的數(shù)據(jù)組的表示,諸如一個或多個對象(例如,文件、數(shù)據(jù)庫記錄、元組、類實例等等)。例如,對象可以跨越幾個計算機被復制,以便提供對于對象的本地訪問,例如用于本地使用、用于更快速的訪問和/或用于在網(wǎng)絡劃分或斷開連接的事件中保持對對象的訪問。另外,計算機可以試圖同步對象的各個表示,以使得對一臺計算機上對象的本地表示的改變可被傳播給其它計算機上的其它表示。更一般地,各個計算機可以通過一個或多個網(wǎng)絡被連接(例如,計算機A、B和C 可以是通過第一網(wǎng)絡互相可訪問的,同時計算機A可以通過第二網(wǎng)絡與計算機D和E相連接),以及各個計算機可包括對象存儲庫(object store),其被配置成存儲一組對象,其中在第一計算機的第一對象存儲庫中的特定對象對應于在第二計算機的第二對象存儲庫中的特定對象。在這些計算機中間,對對象的改變是要與被存儲在其它計算機的相應對象存儲庫中的對應對象同步的。計算機可以合作來達到在網(wǎng)絡上的這種同步。然而,各個計算機常常具有有限的上載和/或下載容量,并且在一些情形下(例如,移動電話),具有有限的處理能力和/或電池壽命。這些局限性可能限制改變的傳播的速率,并且可能在實現(xiàn)同步時給某些計算機帶來過度的和潛在的低效率的負擔。圖1-4圖示不正確地設計的同步策略可能展現(xiàn)的網(wǎng)絡低效率的四個例子。在這些情況的每種情況下,源節(jié)點12存儲要通過一個或多個網(wǎng)絡被傳送到一個或多個節(jié)點的對象14。要被同步的對象14可包括,例如還沒有在節(jié)點的對象存儲庫中的新對象,或者在源12中帶有要被傳播到諸節(jié)點的改變的已更新的對象,或者源12通過相同的或另外的網(wǎng)絡從另一個節(jié)點(新地或以更新的形式)接收的對象。在圖1的第一例10中,源12試圖通過網(wǎng)絡16發(fā)送對象14到一組節(jié)點18,其中源 12具有相對大的上載容量。然而,在這個第一例10中,源12完全地發(fā)送對象14到每個節(jié)點18,由此把發(fā)送對象14所牽涉到的上載帶寬放大到五倍。即使源12的網(wǎng)絡連接16以比較大的上載容量為特征,但隨著節(jié)點18的數(shù)量的攀升,上載容量會很快耗盡,導致對象14 到節(jié)點18的慢的或失敗的遞送。在圖2的第二例20中,源12試圖通過網(wǎng)絡連接16發(fā)送對象14到一小組節(jié)點,包括第一節(jié)點22、第二節(jié)點M和第三節(jié)點26。然而,第一節(jié)點22和第三節(jié)點沈已經(jīng)接收到對象14 (例如,源12可能從上游節(jié)點接收對象14,而該上游節(jié)點已完成對象14到第一節(jié)點22和第三節(jié)點沈的發(fā)送,但沒有通知源12)。因此發(fā)送對象14到第一節(jié)點22和第三節(jié)點26可能是冗余的,而且是源12的上載容量的非生產(chǎn)性的(unproductive)使用。在圖3的第三例30中,源節(jié)點12可以協(xié)調(diào)來把對象14通過第一網(wǎng)絡34發(fā)送到第一節(jié)點32和通過第二網(wǎng)絡38發(fā)送到第二節(jié)點36。第一節(jié)點32和第二節(jié)點36均還可以被連接到對象14也要被發(fā)送到的第三節(jié)點40。源12可以分別通過第一網(wǎng)絡34和第二網(wǎng)絡38完成對象14到第一節(jié)點32和第二節(jié)點36的遞送,且這些節(jié)點可以試圖發(fā)送對象14 到第三節(jié)點40。作為低效率的一個例子,兩個節(jié)點可以都發(fā)送對象14到第三節(jié)點40,由此導致冗余遞送和非生產(chǎn)性的帶寬使用。作為低效率的另一個例子,第一節(jié)點32和第二節(jié)點 36可以通信以避免冗余性,這樣使得先接收到對象14的任何一個節(jié)點可以在排除另一個節(jié)點的情況下遞送對象14到第三節(jié)點40。雖然這種協(xié)調(diào)可以避免冗余性,但哪個節(jié)點要發(fā)送對象到第三節(jié)點40的決定可能是基于任意的競態(tài)條件,而不是基于對容量的評估。例如,如果第一節(jié)點32碰巧在第二節(jié)點36之前接收到對象14,則第一節(jié)點32可以選擇去發(fā)送對象14到第三節(jié)點40,即使第一節(jié)點32通過第一網(wǎng)絡34的上載容量比第二節(jié)點36通過第二網(wǎng)絡38的上載容量小得多。所以,在發(fā)送對象14到第三節(jié)點40時可能引起本可避免的延時。另外,是第一節(jié)點32的更有限的上載容量,而不是第二節(jié)點36的更充裕的上載容量,可能被過度地消耗,這例如可能顯著地延遲對象14到額外的節(jié)點的遞送,所述額外的節(jié)點是由第一節(jié)點32通過第一網(wǎng)絡34可達到,但第二節(jié)點36通過第二網(wǎng)絡38不可達到的。在圖4的第四例50中,源節(jié)點12存儲要被遞送到大網(wǎng)絡的節(jié)點18的對象14。即使對象14的遞送可以以比在圖1-3的例子中更有效的方式在節(jié)點18之間進行協(xié)調(diào),節(jié)點 18仍然可能從源12請求關(guān)于對象14的信息(替換地,源12可以負責將更新的對象14通知給每個節(jié)點18)。即使忽視發(fā)送對象14的成本,操控關(guān)于對象14的查詢和提供關(guān)于對象14的信息的網(wǎng)絡和處理成本仍可能壓垮(overwhelm)源12,并顯著地延遲對象14到節(jié)點18的傳播。圖1-4的例子例示了各種類型網(wǎng)絡的低效率,但這些缺陷中的許多是由對于源 12的上載容量和節(jié)點18的下載容量的過分依賴引起的。這些瓶頸隨網(wǎng)絡伸擴(network scale)可以變得加劇,導致進一步的延遲和潛在地在遞送對象14到所有節(jié)點18的能力方面的崩潰。鑒于這些網(wǎng)絡困難,已經(jīng)設計了替換的同步策略,用來促進跨越由至少一個網(wǎng)絡連接的一組計算機的對象的更有效遞送。通過也利用節(jié)點18的上載容量(例如,將對象14 或它的一些部分重新分發(fā)到其它節(jié)點18)和/或源的下載容量(例如,用于跟蹤在節(jié)點18 之間對象14的接收狀態(tài)),可以達到更好的伸擴。另外,網(wǎng)絡帶寬的分配可以被委托給各個節(jié)點18,由此將計算能力分布到網(wǎng)絡的節(jié)點18,并將這樣的分配與本地檢測的網(wǎng)絡容量相關(guān)。這些遵循“群網(wǎng)絡”技術(shù)的策略,由此擴展了網(wǎng)絡資源的使用,以達到對象14的更快速分發(fā),以及當節(jié)點18的數(shù)量和在它們之間交換的對象14的數(shù)量伸擴時,分配的委托可以產(chǎn)生顯著的改進。圖5給出被稱為BitTorrent的一個這樣的群網(wǎng)絡的簡化例子60。在典型的 BitTorrent網(wǎng)絡中,對象14要被一個或多個“種子”節(jié)點發(fā)送,每個種子節(jié)點將對象14的相同拷貝存儲到一組“吸血鬼(leech)”節(jié)點,每個“吸血鬼”節(jié)點所存儲的要少于對象14的完整拷貝。為了遞送對象14到吸血鬼節(jié)點,種子節(jié)點把對象14分割成組塊,其可以例如根據(jù)尺寸、實用程序(諸如組成對象14的一組離散的子對象)、任意的“形成組塊的”算法等等來被選擇。而且,BitTorrent網(wǎng)絡的節(jié)點是完全互連的,這樣使得任何節(jié)點可以聯(lián)系網(wǎng)絡16 上的任何其它節(jié)點。BitTorrent群網(wǎng)絡的互連的節(jié)點因此可以合作來通過存儲從某些節(jié)點接收的組塊和通過將組塊重新分發(fā)到其它節(jié)點而交換對象14的組塊。在加入BitTorrent 群后,吸血鬼節(jié)點可以接收組成對象14的組塊的列表、存儲有對象14的所有組塊的種子節(jié)點的列表、以及吸血鬼節(jié)點和每個節(jié)點所存儲的對象14的組塊的列表。因此,吸血鬼節(jié)點可以從各個種子和吸血鬼節(jié)點請求對象14的組塊,并且可以將接收的組塊重新分發(fā)到其它吸血鬼節(jié)點。當吸血鬼節(jié)點接收到組成對象的所有組塊時,它可以留在BitTorrent群網(wǎng)絡中作為種子節(jié)點。在圖5上給出的BitTorrent群網(wǎng)絡的簡化例子60中,對象14要從第一種子62 和第二種子64 (每個均存儲對象14的完整的和相同的拷貝)被分發(fā)到一組吸血鬼,包括第一吸血鬼74、第二吸血鬼76、第三吸血鬼78和第四吸血鬼80。對象14包括第一組塊66、 第二組塊68、第三組塊70和第四組塊72,每個組塊被第一種子62和第二種子64存儲,且這些組塊被不均勻和不完整地分布在吸血鬼節(jié)點之間(例如,第一吸血鬼74存儲第二組塊 68,以及第二吸血鬼76存儲第一組塊66和第四組塊72)。為了促進對象14的組塊的快速散布,第一種子62發(fā)送第一組塊66到第一吸血鬼74,而第二種子64發(fā)送第三組塊70到第一吸血鬼74。雖然第一種子62可能能夠發(fā)送第二種子68或第三種子70到第二吸血鬼 76,但它可以替代地依賴于另外的節(jié)點(諸如第一吸血鬼74)來分發(fā)這些組塊到第二吸血鬼 76。同樣地,第二種子16可以放棄發(fā)送第二組塊68到第二吸血鬼76,因為它可以從第一吸血鬼74得到這個第二組塊68。同時,第一吸血鬼74和第二吸血鬼76可以發(fā)送某些初始的組塊到第三吸血鬼78和第四吸血鬼80,它們每個初始地都沒有存儲組塊(例如,剛加入 BitTorrent網(wǎng)絡)。這樣,第一種子62和第二種子64通過與吸血鬼節(jié)點分擔分發(fā)成本而與吸血鬼節(jié)點合作來分發(fā)對象14的組塊。BitTorrent網(wǎng)絡擅長在比較不信任的節(jié)點組之間以對等方式和通過以“公平”方式分配分發(fā)而同步對象。作為第一個例子,節(jié)點18的操作者典型地選擇加入一個 BitTorrent群網(wǎng)絡,以便由此得到被交換的特定的對象,以及可以選擇在任何時間離開 BitTorrent群網(wǎng)絡(甚至在完全接收對象14之前)。還可以假設,節(jié)點的每個操作者獨立地、“自私地”操作,即,參與網(wǎng)絡(和向群網(wǎng)絡貢獻該節(jié)點的上載和下載容量)僅僅到參與使得該操作者獲益的程度。例如,節(jié)點的操作者從接收(下載)對象獲益,但不從發(fā)送(上載) 對象到其它節(jié)點直接獲益,特別是在這樣的上載容量是有限的且從其它使用轉(zhuǎn)移過來的情況下。節(jié)點的操作者可能企圖通過以下方式而在合作的同步中進行“欺騙”,即完全利用節(jié)點的下載容量來達到對象的快速接收,但限制或排除節(jié)點的上載容量以便保留上載容量用于更希望的任務。BitTorrent群網(wǎng)絡被配置成通過把對象14的組塊的遞送按照與由吸血鬼14重新分發(fā)組塊的速率成比例的比率分配給吸血鬼,而減小“欺騙”。因此,節(jié)制上載容量(或者只不過有很少的上載容量貢獻給群網(wǎng)絡)的吸血鬼節(jié)點被按低速率提供給對象14的新組塊。反過來,BitTorrent群網(wǎng)絡被配置成通過辨認出精通于重新分發(fā)組塊的吸血鬼節(jié)點并通過獎勵這樣的重新分發(fā),而促進在組塊到節(jié)點的分發(fā)之間的“公平性”,其中所述獎勵是通過以高速率提供對象14的新組塊,潛在地使這樣的遞送(諸如由種子進行) 優(yōu)先于到執(zhí)行不那么好的節(jié)點的組塊遞送來進行的。另外,因為典型地在BitTorrent網(wǎng)絡上交換的許多對象可能在所有組塊都被接收之前對于節(jié)點操作者是無用的,所以網(wǎng)絡可以使到幾乎已接收所有組塊的吸血鬼的組塊遞送優(yōu)先于到正存儲較少組塊的吸血鬼的組塊遞送。反過來,節(jié)點可以顯著地限制到正存儲很少的組塊或沒有存儲組塊的最近加入的吸血鬼的組塊遞送速率(特別是由于這樣的吸血鬼的操作者比更接近于完成對象的吸血鬼的操作者更可能從群網(wǎng)絡斷開連接)。作為第二個例子,BitTorrent群網(wǎng)絡被設計成檢測、報告和減少那些分發(fā)對象的被改變或被損壞的版本的惡意或有缺陷的節(jié)點。在許多實現(xiàn)中,組成對象的組塊在群網(wǎng)絡的形成時被固定,以及組塊的權(quán)威性列表由指示用于各個組塊的散列碼的一個或多個指定的種子節(jié)點(稱為“跟蹤器”節(jié)點)來提供給所有的節(jié)點。在接收來自節(jié)點的組塊后,接收節(jié)點按照組塊的散列碼驗證組塊的內(nèi)容;如果組塊已被(諸如分發(fā)節(jié)點)改變或損壞,則接收節(jié)點可以將發(fā)送節(jié)點作為潛在有缺陷的或惡意的節(jié)點報告給跟蹤器節(jié)點,以及跟蹤器節(jié)點可以從群網(wǎng)絡中驅(qū)逐這樣的節(jié)點。BitTorrent群網(wǎng)絡的這些特定化(specialization)可以通過減少欺騙、通過促進公平性和通過檢測及驅(qū)逐惡意的或有缺陷的節(jié)點,而促進靜態(tài)對象在不信任的群節(jié)點之間的分發(fā)。然而,在其它情況下,諸如BitTorrent群網(wǎng)絡那樣的群網(wǎng)絡的這些方面可能是沒有幫助的或不必要的,以及可能減少對象的有效分發(fā)。圖6給出一個這樣的情況的示范性圖解說明90,其中群網(wǎng)絡的節(jié)點包括由用戶92操作的一組計算機。計算機可包括例如工作站94、筆記本計算機96和蜂窩電話設備98。用戶92可能希望將對象14的本地表示存儲在這些計算機的每一個上,以及當計算機可以通過網(wǎng)絡通信時,在所有這樣的計算機之間同步對象14。而且,用戶92可以利用計算環(huán)境主機100,其存儲用戶92的計算環(huán)境102的權(quán)威性版本,包括由用戶92使用的完整的對象組,諸如文件、應用、應用配置信息、用戶簡檔、安全憑證(諸如,用戶名和密碼、證書和公有與私有密鑰),它們可以由計算環(huán)境主機100(整體或部分地)部署到每個計算機。計算環(huán)境主機100還可以把對象14的本地的(和潛在地權(quán)威的)表示包括到計算環(huán)境102中,并且可以參與對象14的同步。示范性情況90不同于其中BitTorrent群網(wǎng)絡在幾個方面針對其定制的情況。作為第一個例子,用戶92可以通過使用計算機或計算環(huán)境主機100的任一個來改變對象14, 這樣的改變是要在所有的計算機與計算環(huán)境主機100之間傳播的。這方面不同于許多群網(wǎng)絡(包括BitTorrent),它們假設靜態(tài)對象14,并把由特定節(jié)點對對象14的改變看作為對象 14的惡意的或有缺陷的更改的證據(jù)。作為第二個例子,盡管在BitTorrent群網(wǎng)絡中的每個節(jié)點特別地選擇去參與群網(wǎng)絡,但在圖6的示范性情況90中計算機可被“拉入”到新形成的群網(wǎng)絡,以便接收對象14的更新(特別是在更新是自發(fā)的或非預期的情況下)。作為第三個例子,盡管BitTorrent網(wǎng)絡尋求建立網(wǎng)絡容量消耗的“公平性”和減少被節(jié)點操作者欺騙,但在圖6上的用戶92完全信任群網(wǎng)絡的節(jié)點,并且超越針對“公平性”的跟蹤和調(diào)節(jié)以及避免欺騙,可能更喜歡快速和完整地運用對象14。例如,雖然BitTorrent網(wǎng)絡尋求與節(jié)點再遞送組塊的速率成比例地調(diào)節(jié)組塊到節(jié)點的遞送,但這個網(wǎng)絡的用戶92可能更喜歡例如通過按可達到的那樣去充分利用節(jié)點的上載容量,而完成對象14到所有節(jié)點的高速率遞送。作為第四個例子,盡管在BitTorrent群網(wǎng)絡中的每個節(jié)點可以在比較自私的和個別化的基礎上操作,以達到節(jié)點操作者的目標,但圖6所圖示的群網(wǎng)絡的節(jié)點可以全盤地(holistically)操作;例如,為了促進對象14在所有節(jié)點之間的分發(fā),即使接收對象的組塊的速率較低或不存在,具有高上載容量的節(jié)點也可以選擇去分配許多或全部上載容量用于對象14的分發(fā)。鑒于合作網(wǎng)絡的這些顯著特征,技術(shù)可以被設計成跨越一組計算機來同步對象組,所述計算機被分別配置成以高效的方式存儲對象組的本地表示。在這個合作網(wǎng)絡中,任何節(jié)點可以生成對對象的改變,且這些改變要快速和可靠地傳播到網(wǎng)絡各處,而不必考慮競爭性方面,諸如減小欺騙、促進“公平性”、平衡和檢測惡意的或有缺陷的節(jié)點。這樣的群網(wǎng)絡可以利用“告訴(tell)”體系結(jié)構(gòu),藉此每個節(jié)點在識別它的對象組中的更新對象后通知其它節(jié)點;以及利用“推送”體系結(jié)構(gòu),藉此節(jié)點發(fā)起更新的對象到?jīng)]有存儲該更新對象的節(jié)點的發(fā)送。因此,控制交互動作的節(jié)點18充當服務器,它將更新的對象14 (或其組塊)遞送到充當客戶機的、被配置成接收更新對象14的節(jié)點18。而且,即使網(wǎng)絡的節(jié)點是完全互連的并且可以以等同的速率通信,更新對象的網(wǎng)絡傳播仍舊可以在小的節(jié)點組(“鄰居”節(jié)點)中發(fā)生,以便減小伸擴困難(諸如在圖4的第四個例子50中的)。圖7給出牽涉到跨越經(jīng)由網(wǎng)絡16 (諸如分別被配置成存儲對象14的本地表示和將對象14的改變與其它計算機同步的一組計算機)連接的一組節(jié)點18 (用字母標識,例如 NA=節(jié)點A和NB=節(jié)點B)來同步對象14的示范性情況(在第一時間點110、第二時間點112 和第三時間點114處所圖示的)。對象14可包括例如由節(jié)點創(chuàng)建的新對象,或跨越諸節(jié)點存在、但在一個節(jié)點處被更新的對象,或由一個節(jié)點從另外的源接收的對象??梢砸庾R到, 諸節(jié)點18是完全互連的,以及任何兩個節(jié)點18是通過網(wǎng)絡16可互相訪問的,雖然互連沒有全部在圖7上圖示。在圖7的示范性情況的第一時間點110,節(jié)點C接收對象14,并試圖將對象14與其它節(jié)點18同步。企圖將對象14與所有的節(jié)點18同步,或甚至企圖將對象14的更新通知給所有的節(jié)點18,可能導致顯著的網(wǎng)絡擁塞,其限制了同步的速率,諸如圖4上所例示的。更恰當?shù)兀?jié)點C首先選擇節(jié)點18的子組作為互相可訪問的“鄰居”(即,其中每個節(jié)點對于所有被選擇的鄰居是可訪問的)。例如,節(jié)點C可以選擇節(jié)點B、D和H作為鄰居。在選擇一組鄰居后,節(jié)點C然后確定哪些鄰居沒有存儲更新的對象14(例如,節(jié)點C可以將所述更新通知給每個鄰居,并且可以提出發(fā)送更新的對象14到鄰居,以及鄰居可以肯定或否定地響應)。如果鄰居存儲著更新的對象14,則不牽涉到在節(jié)點C與該鄰居之間的進一步的同步。 然而,在圖7的第一時間點110,所選擇的鄰居B、D和H沒有存儲更新的對象14,因此向節(jié)點C指示。如在圖7上進一步圖示的,在確定哪些節(jié)點18沒有存儲更新的對象14后,節(jié)點C 形成群網(wǎng)絡116,指定沒有存儲更新對象14的每個互相可訪問的鄰居作為群網(wǎng)絡116中的群節(jié)點118。(節(jié)點C也可以作為群節(jié)點118參與,但因為節(jié)點C是群節(jié)點118的始發(fā)者, 所以它不必接收任何組塊,而可被看作為群網(wǎng)絡116內(nèi)的更新對象14的源。)節(jié)點C 18將群網(wǎng)絡116的形成通知給群節(jié)點118,并開始發(fā)送更新的對象14到群網(wǎng)絡116的群節(jié)點 118。例如且正如在第二時間點112處所圖示的,節(jié)點C可以分割對象14或使對象14 “分塊(chunk)”成可以被一個個地遞送的、對象14的一組組塊或數(shù)據(jù)單元。圖7的對象14被 “分塊”成四個組塊,以及節(jié)點C開始著手遞送對象14的各個組塊到群節(jié)點118。同時,每個群節(jié)點118 (節(jié)點B、D和H)可以接收組塊,把它們存儲在群節(jié)點118的對象存儲庫中,并可以再遞送組塊到其它群節(jié)點118。例如,在第二時間點112,節(jié)點H存儲著第二組塊68,并可以識別節(jié)點B不具有第二組塊68,所以可以將第二組塊68重新分發(fā)到節(jié)點B。組塊的這種分群遞送可以繼續(xù)進行,直至所有的群節(jié)點118具有對象14的全部組塊為止,在這一點群網(wǎng)絡116可以被終止。然而,當群網(wǎng)絡116被終止時,以前的群網(wǎng)絡116的每個群節(jié)點118現(xiàn)在可以識別被存儲在各自的對象存儲庫中的更新對象14。因此,每個節(jié)點B、D和H可以選擇新的鄰居組,并可以確定每個鄰居是否存儲著更新的對象14。例如,節(jié)點B可以選擇節(jié)點A、F和G 作為鄰居,可以確定這些節(jié)點中沒有節(jié)點存儲著更新的對象14,并可以通過指定這些節(jié)點 18作為用于同步更新對象14的群節(jié)點118而形成群網(wǎng)絡116。節(jié)點B然后可以把群網(wǎng)絡 116通知給每個群節(jié)點118,并可以開始著手發(fā)送組塊到群節(jié)點118,以便在它們之間重新分發(fā)。同樣地,節(jié)點H可以選擇節(jié)點L、M和N作為鄰居,并且在確定這些節(jié)點18沒有存儲著更新的對象14后,可以通過指定這些節(jié)點18作為群節(jié)點118而形成群網(wǎng)絡116 ;以及節(jié)點D可以選擇節(jié)點Ε、I和J作為鄰居,確定這些節(jié)點也沒有存儲更新的對象14,且可以形成這些節(jié)點的群網(wǎng)絡116。在第三時間點114,這三個群網(wǎng)絡116操作來更廣泛地跨越節(jié)點 18而分發(fā)更新的對象14,以及通過自組群網(wǎng)絡的進一步傳播(例如,到節(jié)點K和0)可以完成對象14在所有節(jié)點18之間的同步。根據(jù)圖7的示范性情形,可以例示和/或意識到本技術(shù)的幾個附加方面。作為第一個例子,節(jié)點18可以發(fā)現(xiàn)鄰居已經(jīng)存儲著更新的對象14。這可以例如在該鄰居通過另一個群網(wǎng)絡已經(jīng)在接收或已經(jīng)接收到更新對象14的情形下發(fā)生。在這種事件下,節(jié)點18 可以簡單地把該鄰居從群網(wǎng)絡排除。替換地,把該鄰居包括在群網(wǎng)絡中作為額外的“種子” 可能是有利的,特別是如果該鄰居具有空閑的上載容量的話。作為第二個例子,群節(jié)點118 可被配置成把它的大部分或全部的上載容量貢獻到群網(wǎng)絡116以便盡可能快地分發(fā)組塊, 而不管群節(jié)點118接收更新對象14的組塊所用的速率。雖然這種分配對于群節(jié)點118可能是不“公平”的,但群網(wǎng)絡116是被形成來促進更新對象14到節(jié)點的快速同步,而并不是促進“公平性”或減少欺騙,那可能是關(guān)系到BitTorrent群網(wǎng)絡的獨立節(jié)點的操作者的。作為第三個例子,節(jié)點C可以在完成更新對象14到群網(wǎng)絡116的群節(jié)點118的遞送后,結(jié)束它對數(shù)據(jù)交換的參與(例如,以促進在網(wǎng)絡16的節(jié)點18之間計算能力或網(wǎng)絡利用的負荷平衡)。這個變化可能是有用的,例如,因為鄰居選擇可能是計算上困難和/或資源密集型的過程,特別是在鄰居的選擇被設計成以比較統(tǒng)一的方式來群集(cluster)網(wǎng)絡16的節(jié)點18 的情況下;每個節(jié)點18因此可以在它的鄰居之間同步更新對象14,作為它對網(wǎng)絡范圍的同步的貢獻。替換地,如果節(jié)點(諸如,節(jié)點C)被允許選擇鄰居特別地(ad hoc)用于特定對象14的同步,則該節(jié)點在完成它與第一鄰居組的同步后可能試圖選擇還沒有存儲更新對象14的新的鄰居組,以及可以形成第二個群網(wǎng)絡116來在其間交換。圖8給出這里討論的技術(shù)的第一實施例,包括將由具有處理器的計算機存儲的對象組的對象14與由通過至少一個網(wǎng)絡16可訪問的至少一個節(jié)點18存儲的對象組的對應對象進行同步的示范性方法120。所述示范性方法120在122開始,并牽涉到在處理器上執(zhí)行IM被配置成執(zhí)行同步的指令。該指令可被配置成從節(jié)點18中選擇1 包括至少一個鄰居的鄰居組,所述至少一個鄰居是所述計算機和鄰居組的其它鄰居通過至少一個網(wǎng)絡 16可訪問的。該指令還可被配置成在識別1 對象組中的更新對象14后確定130沒有存儲更新對象14的鄰居;形成132包括沒有存儲更新對象14的鄰居的群節(jié)點118的群網(wǎng)絡116 ;把為更新對象14形成的群網(wǎng)絡116通知134給群節(jié)點118 ;以及使用群網(wǎng)絡116發(fā)送136更新對象14到群節(jié)點118。在完成對象14到組成群網(wǎng)絡116的節(jié)點18的遞送后, 示范性方法120由此完成對象的同步,所以在138結(jié)束。雖然圖8的示范性方法120可以完成由計算機進行的更新對象14到節(jié)點組的遞送,但如果計算機還被配置成通過參與由作為更新對象14的源操作的另一個節(jié)點18形成的群網(wǎng)絡116而接收更新對象14 (即,計算機可被配置成不僅僅在這個同步技術(shù)中作為服務器,而且也作為客戶機),則可以達到另外的優(yōu)點。圖9圖示在對象存儲庫中的對象14的同步過程中接收更新對象14的示范性方法140,所述方法可以例如通過附加地配置在處理器上執(zhí)行的指令而達到。在這個示范性方法140中,指令還可被配置成在被通知114由源形成包括用于更新對象14的計算機的群網(wǎng)絡116后在142開始,且在對象存儲庫中創(chuàng)建146 對應的更新對象14。所述指令還可以被配置成在群節(jié)點118接收到對象14之前參與群網(wǎng)絡116。這種參與可以牽涉到在接收對象14后,把對象14存儲150到對象存儲庫中,并把對象14發(fā)送152到?jīng)]有存儲對象14的群節(jié)點118。最后,該指令可以被配置成在確定群節(jié)點118已接收到對象14后終止群網(wǎng)絡116。在使用群網(wǎng)絡116完成對象14的接收和重新分發(fā)后,示范性方法140還可以促進對象14跨越節(jié)點18的同步,所以在156結(jié)束。圖10圖示了在示范性情況160內(nèi)的這里討論的技術(shù)的另一個實施例,示范性情況 160牽涉到具有處理器164和被配置成存儲至少一個對象14的對象存儲庫166的計算機 162。計算機162可被連接到網(wǎng)絡16,并且是節(jié)點組18通過網(wǎng)絡16可互相訪問的,每個節(jié)點還可包括對象存儲庫166,其存儲對象14的對應本地表示。示范性計算機162因此可以與節(jié)點18合作來同步在對象存儲庫166中的更新對象14。這種合作可以通過把被配置成利用這里討論的技術(shù)的示范性系統(tǒng)168包括到計算機162中而達到。例如,示范性系統(tǒng)168 可包括鄰居選擇部件170,它可被配置成從節(jié)點18中選擇包括至少一個鄰居的鄰居組172,所述至少一個鄰居是計算機162和鄰居組172的其它鄰居可以通過至少一個網(wǎng)絡16訪問的。該示范性系統(tǒng)還可以包括群網(wǎng)絡形成部件174,它可被配置成確定在鄰居組172中的沒有存儲更新對象14的鄰居;形成群節(jié)點118的群網(wǎng)絡116,其包括沒有存儲更新對象14 的鄰居;和把為更新對象14形成的群網(wǎng)絡116通知給群節(jié)點118。最后,示范性系統(tǒng)168 可包括群網(wǎng)絡發(fā)送部件176,它可被配置成使用群網(wǎng)絡116發(fā)送更新對象14到群節(jié)點118。 在完成群網(wǎng)絡116的形成和對象存儲庫166中的更新對象14到群網(wǎng)絡118的分發(fā)后,示范性系統(tǒng)168由此促進對象組的對象14的同步。這里討論的技術(shù)的還有一個實施例牽涉到包括指令的計算機可讀存儲介質(zhì),所述指令在由計算機的至少一個處理器執(zhí)行時,使得所述至少一個處理器將對象組的對象14 與該計算機通過網(wǎng)絡16可訪問的節(jié)點18存儲的對應對象14進行同步。可以按這些方式設計的示范性計算機可讀介質(zhì)被圖示于圖11,其中實現(xiàn)180包括計算機可讀介質(zhì)182 (例如, ⑶-R、DVD-R、或硬盤驅(qū)動的盤片),在其上有編碼的計算機可讀數(shù)據(jù)184。這個計算機可讀數(shù)據(jù)184進而又包括一組計算機指令186,其被配置成按照這里闡述的原理運行。在一個這樣的實施例中,處理器可執(zhí)行的指令186可被配置成執(zhí)行同步由計算機存儲的對象組的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的方法,諸如圖8的示范性方法 120。在另一個這樣的實施例中,處理器可執(zhí)行的指令186可被配置成實施用于同步由計算機存儲的對象組的更新對象與由通過網(wǎng)絡可訪問的至少一個節(jié)點存儲的對應對象的系統(tǒng), 諸如圖10的示范性系統(tǒng)168。本領(lǐng)域技術(shù)人員可以設計出許多這樣的、被配置成按照這里給出的技術(shù)操作的計算機可讀媒體。這里討論的技術(shù)可以被設計成在許多方面具有變化,某些變化可以相對于這些和其它技術(shù)的其它變化給出附加的優(yōu)點和/或減少缺點。而且,某些變化可以組合地實施,以及某些組合可以通過協(xié)同作用而展示附加的優(yōu)點和/或減少的缺點。變化可以被合并在各種實施例(例如,圖8的示范性方法120和圖10的示范性系統(tǒng)168)中,以便在這樣的實施例上賦予個體的和/或協(xié)同作用的優(yōu)點。可以在這些技術(shù)的實施例之間變化的第一方面涉及到通過形成和使用群網(wǎng)絡116 而發(fā)送對象14的更新到節(jié)點18的方式。這些變化可以例如在計算機用作為群網(wǎng)絡116中的服務器或源時應用,諸如按照圖8的示范性方法120。這個第一方面的第一變化涉及到更新對象14的識別,它可以觸發(fā)對象14與其它節(jié)點18的同步。同步可以例如通過在對象存儲庫166中創(chuàng)建新對象14或在對象存儲庫166 中更新對象14而被觸發(fā)。同步也可以通過從另一個源——諸如另一個設備、網(wǎng)絡16上的另一個節(jié)點18、或計算環(huán)境主機102——接收新的對象14或?qū)ο?4的更新版本而被觸發(fā)。 同步例如也可以通過在對象存儲庫166中發(fā)現(xiàn)更新對象而被觸發(fā)。例如,當計算機加入網(wǎng)絡16并連接到節(jié)點18時,它可以比較它的對象存儲庫166與其它節(jié)點18的對象存儲庫, 以便發(fā)現(xiàn)在計算機離線時可能發(fā)生的改變;以及在發(fā)現(xiàn)這樣的更新對象14后,計算機可以將更新對象14與其它節(jié)點18進行同步。在一個這樣的實施例中,被查閱(consult)以發(fā)現(xiàn)改變的其它節(jié)點18的組可以被限于例如以前選擇的鄰居組,以避免可能使得網(wǎng)絡16飽和的許多節(jié)點18的廣播詢問。對被聯(lián)系以發(fā)現(xiàn)更新對象14的節(jié)點18進行約束限制,可以因此促進這里討論的技術(shù)的可伸擴性。這個第一方面的第二變化涉及到由節(jié)點18選擇要被看作為用于更新對象14的群節(jié)點118的鄰居組。鄰居組的選擇可以有助于避免圖4所例示的問題,其中源節(jié)點12企圖將更新對象14與過大的互連節(jié)點18的組進行同步,導致網(wǎng)絡擁塞和低效的同步。鄰居的選擇可以是任意的,但任意的選擇會導致不太完全地互連的網(wǎng)絡16,其中第一節(jié)點18和第二節(jié)點18不能通信。因此,鄰居的選擇可被配置成縮減可能導致網(wǎng)絡劃分的鄰居的選擇。 鄰居的選擇也可以是基于各種各樣的其它因素,諸如(舉例而言)物理接近度、網(wǎng)絡拓撲(例如,在同一個局域網(wǎng)上或在一系列IP地址范圍內(nèi)的節(jié)點子組)、或在源節(jié)點12與鄰居之間的比較低的網(wǎng)絡等待時間。作為這個變化的第二個例子,源節(jié)點12可以形成包括任何數(shù)量的鄰居且以任何方式包括的鄰居組。例如,源節(jié)點12可以從空的鄰居組開始,可以迭代地測試節(jié)點18以測試節(jié)點與所選擇的鄰居的相互可訪問性,以及可以將任何這樣的節(jié)點18 添加到鄰居組。源節(jié)點12還可以指定鄰居組的任何特定尺寸(例如,鄰居可被添加到鄰居組,直至鄰居組達到諸如10 (N)個鄰居那樣的有利尺寸為止,其中N決定在網(wǎng)絡16上可訪問的節(jié)點的數(shù)目)。作為這個變化的第三個例子,源節(jié)點12可以在開始同步更新對象18 后,例如在識別出更新對象18后,選擇鄰居。這可能對于例如允許源節(jié)點12在終止第一群網(wǎng)絡116后促進更新對象18的傳播是所希望的,于是源節(jié)點12可以選擇新的鄰居組和形成第二群網(wǎng)絡116,如果任何這樣的鄰居沒有存儲更新對象14的話。替換地,鄰居的選擇可以發(fā)生在節(jié)點18檢測到至少一個網(wǎng)絡改變事件時(例如,當節(jié)點18連接到網(wǎng)絡16時,當新節(jié)點18變成在線時,當被選擇的鄰居離線時,或當節(jié)點18檢測到網(wǎng)絡16的劃分時)。這可以是有利的,因為鄰居的選擇可能是在計算密集型或資源密集型的,特別是在鄰居是通過測試網(wǎng)絡16的等待時間或?qū)W(wǎng)絡16的能力進行建模而被選擇的情況下。在一個按照這個第一方面的這個第二變化實施的這樣的實施例中,網(wǎng)絡16的節(jié)點18可以按照超立方體拓撲被建模。按照這個拓撲,網(wǎng)絡16的各個節(jié)點18可以被連接成使得每個節(jié)點18選擇沿超立方體的每個邊緣的其它節(jié)點18作為鄰居。超立方體拓撲的第一個優(yōu)點涉及到僅僅通過識別節(jié)點18在超立方體內(nèi)的位置和選擇在各個邊緣上連接的節(jié)點18作為鄰居,而容易選擇鄰居。例如,如果完全互連的網(wǎng)絡16的節(jié)點18可以從1到N (表示在網(wǎng)絡16中節(jié)點18的數(shù)量)被計數(shù),則特定的節(jié)點(被計數(shù)為η)的鄰居(O到i)可以按照以下公式被識別和選擇
Si=n xor 21 I O ^ i<ceiling (上限)(lo&(N)),η xor 2kN.
因此,新的節(jié)點18可以僅僅通過識別它的計數(shù)(enumeration)和通過計算它通過超立方體模型的邊緣被連接到的節(jié)點18的計數(shù)而識別和選擇它的鄰居。這個第一方面的第三變化涉及到識別鄰居是否存儲有更新對象14的方式。作為第一個例子,每個節(jié)點18可以存儲由其它節(jié)點18 (具體地是鄰居)存儲的對象14的列表。 當節(jié)點18識別出更新的對象14時,它可以首先通知其它節(jié)點18 (具體地是鄰居),每個其它節(jié)點可以更新它的由該節(jié)點存儲的對象14的內(nèi)部列表。隨后,當節(jié)點18識別鄰居以加到群網(wǎng)絡116時,它可以參考它的由其鄰居存儲的對象14的列表,這可以允許節(jié)點18排除已經(jīng)接收到更新對象14的鄰居(例如,從另一個源或經(jīng)由另一個群網(wǎng)絡)。作為第二個例子, 存儲更新對象14的節(jié)點18可以通過以下方式而確定每個鄰居是否存儲有更新對象14,即 輪詢這樣的鄰居。例如,對于每個鄰居,節(jié)點18可以將更新對象14的標識符(例如,名字、 區(qū)別性的位置、GUID、或?qū)ο?4的索引節(jié)點號)和更新對象14的內(nèi)容指示符(例如,對象14 的散列碼、版本號、或最后的修改日期)發(fā)送到鄰居。然后節(jié)點18可以從鄰居接收有關(guān)該鄰居是否存儲著更新對象14的通知,這個通知可以由鄰居例如通過比較所述標識符和內(nèi)容指示符與它的對象存儲庫166中的對象14而生成。這個第一方面的第四個變化涉及到在更改的對象14與為完成在其它表示中的對象14的更改而在群網(wǎng)絡116上被交換的數(shù)據(jù)之間的關(guān)系。作為第一個例子,每當檢測到對象的更改時,群網(wǎng)絡116可以交換對象14的全部內(nèi)容。作為第二個例子,群網(wǎng)絡116可以僅僅交換對象14的、在該對象14的早先版本與當前版本之間已發(fā)生改變的部分。這個例子例如在其中對對象的改變被限于特定的組塊以使得群網(wǎng)絡116可以僅僅交換更改的組塊的場合下,可以是特別有利的,這些更改的組塊可以改寫在節(jié)點18的對象存儲庫166中這樣的組塊的以前版本。替換地,對象14可以定義內(nèi)部結(jié)構(gòu)(例如,組成數(shù)據(jù)庫的一系列記錄),以及節(jié)點18可以僅僅交換結(jié)構(gòu)的已發(fā)生改變的部分(例如,在數(shù)據(jù)庫中新的、更新的、 或刪除的記錄)。作為第三個例子,群網(wǎng)絡116可以交換差別補丁,其可以被每個節(jié)點18應用來把對象14更新成更加新的版本。例如,差別補丁可以指令每個節(jié)點18在特定的位置處插入對象14的數(shù)據(jù)塊,并刪除另一個數(shù)據(jù)塊。例如,在對于大的對象作出小的更新的場合下,差別補丁和局部更新可以是有利的,而在對象小或改變量大的場合下,重新分發(fā)整個對象可能是有利的。一個這樣的變化組涉及到把對象14 “分塊”成一組組塊,每個組塊包括對象14的數(shù)據(jù)單元,所述數(shù)據(jù)單元可以一個個地從一個群節(jié)點118遞送到另一個節(jié)點118。在這個變化中,“分塊”算法可被應用來將對象14分割成組塊。許多這樣的分塊算法是可以與這里討論的技術(shù)兼容的。例如,分塊算法可以以許多方式選擇分段;例如,算法可以生成固定尺寸的組塊,或識別對象14的內(nèi)部結(jié)構(gòu)并按照內(nèi)部結(jié)構(gòu)對對象14分割,或在任意位置處生成組塊??梢赃m合于這些技術(shù)的一個這樣的分塊算法是遠程差分壓縮(Remote Differential Compression, RDC),其中可以掃描對象14,以便識別在對象14的各個部分內(nèi)的局部最大, 且對象14的組塊可以被選擇為落在這樣的局部最大之間。這個分塊算法可以特別適合于例如減小對象14在一個位置上的改變(例如,字節(jié)的插入)不正確地用信號通知更改在對象 14中所有隨后的組塊的幾率。而且,遠程差分壓縮允許對于大的對象14的多級組塊;例如, 對象14可以被分塊成一系列組塊,以及在每個組塊內(nèi)可以識別更小的組塊等等。如果僅僅對象14的小部分改變(例如,單個字節(jié)),則更有效的可能是檢查大的組塊來識別改變,檢查已改變的大組塊內(nèi)的更小的組塊,以便進一步定位改變,然后從一個或多個鄰居只請求包含所述改變的小組塊。替換地,如果對象14包括一組項目(例如,一組小的對象,其被按批匯集在一起以便作為一個對象來同步),則每個項目可被選擇作為組塊。在特定的分塊變化中,數(shù)據(jù)的區(qū)別性的圖案可以在對象內(nèi)被識別(例如,特定的字節(jié)組),并隨之對對象14分塊。對象的分塊可以由于幾個原因而是有利的。作為第一個例子,在對象14內(nèi)的小改變(數(shù)據(jù)的插入、更改或刪除)可以僅僅處在幾個組塊內(nèi),且組塊的差別比較可以指示為了更新對象14,只要交換特定的組塊。第二個例子牽涉到重新利用具有與遺漏的組塊的、完全比特對比特的同一性的組塊的可能。如果在對象14中的第一組塊等同于在所述對象14或在另一個對象14中的第二組塊,則具有第一組塊但不具有第二組塊的節(jié)點18可以簡單地復制所述第一組塊以便在對象存儲庫166中創(chuàng)建第二組塊,因此避免通過網(wǎng)絡16轉(zhuǎn)送第二組塊。
另外的優(yōu)點可以通過基于這些變化的這些技術(shù)的特定實施例達到。圖12圖示示范性情況190,其特征為源節(jié)點12被配置成在網(wǎng)絡12上發(fā)送對象14到組成群網(wǎng)絡116的群節(jié)點118。源節(jié)點12可以把更新的對象14分塊成至少一個組塊(在這個示范性情況190 中,形成四個這樣的組塊),然后可以對內(nèi)部存儲的群組塊圖192初始化,群組塊圖192指示各個群節(jié)點118是否存儲著更新對象14的各個組塊。群組塊圖192可包括例如被排列成二維陣列的比特圖,其在相應的組塊被相應的群節(jié)點118存儲的場合下指示1,否則指示0。 源節(jié)點12可以通過參考群組塊圖192而選擇要發(fā)送到群節(jié)點118的組塊。而且,當群節(jié)點 118接收到組塊(或是從源節(jié)點12或是從另一個群節(jié)點118)時,群節(jié)點118可以通知源節(jié)點12 存儲著該組塊,以及源節(jié)點12隨之可以更新群組塊圖192。最后,源節(jié)點12可以通過檢查群組塊圖192而確定群節(jié)點118已經(jīng)收到對象14??赡茴~外地有利的是,讓每個群節(jié)點118存儲和初始化群組塊圖192,該群組塊圖192被參考以便發(fā)送組塊到其它群節(jié)點 118,以及讓每個群節(jié)點118存儲著組塊后通知所有的其它群節(jié)點118。群組塊圖192的包括還可以允許在這些技術(shù)中的另外的改進。例如,當群節(jié)點118 (包括源節(jié)點12)選擇要發(fā)送到另一個群節(jié)點118的組塊時,它可以選擇被存儲在它的對象存儲庫中、但按照群組塊圖192不經(jīng)常被存儲在群節(jié)點118之間的稀少組塊。這個選擇可以方便組成對象14的組塊在群節(jié)點118之間的均勻分布和廣泛的可用性,由此改進組塊的可訪問性和群網(wǎng)絡116的魯棒性(例如,以避免離線的節(jié)點可能是特定組塊的唯一源的情況)。 例如,在圖12的示范性情況190中所例示的時間點,源節(jié)點12可以準備好發(fā)送組塊到另一個群節(jié)點118,以及可以檢查群組塊圖192以識別稀少的組塊。例如,源節(jié)點12可以確定第一組塊66是最不廣泛分發(fā)的組塊,所以可以選擇第一組塊66來發(fā)送到?jīng)]有存儲該第一組塊66的群節(jié)點118 (例如,節(jié)點B、C、D或E)。這個第一方面的第五變化牽涉到要與群節(jié)點118同步的更新對象14的選擇。作為第一個例子,對象存儲庫166可包括一組項目,該組項目一起與其它節(jié)點18同步比一個個地同步更有效。例如,所述項目可以是語義上或邏輯上有關(guān)的(例如,數(shù)據(jù)庫中的一組相關(guān)的記錄,或一起組成應用的一組資源),或者可以是經(jīng)常一起被更新的。所述項目還可包括一個個地包括很少數(shù)據(jù)的一組項目,或牽涉到很少數(shù)據(jù)轉(zhuǎn)送的小的更新。替換地,項目可包括最近被更新的一組項目;例如,計算機可以高速緩存要被同步的一組項目,且一旦超過某個閾值(例如,消逝的時間或要被更新的數(shù)據(jù)量),就把所有的項目一起同步。在這樣的情況下,相比于把項目一起捆綁在要經(jīng)由群網(wǎng)絡116同步的對象批次(object batch)中,為一個個項目生成群網(wǎng)絡116 (包括選擇和通知群節(jié)點118,對對象14進行分塊,初始化群組塊圖192,和發(fā)起組塊的發(fā)送)可能是低效的。所以,計算機可被配置成在識別在對象組中的更新對象14后,將更新對象14添加到包括沒有被鄰居存儲的更新對象14的更新對象批次中,以及當更新對象批次超過對象批次閾值時形成群網(wǎng)絡116。替換地或附加地,計算機可被配置成同步小的更新(例如,牽涉到比較小量的要被同步的數(shù)據(jù)一諸如小于1兆字節(jié)一的那些更新;小數(shù)量的更新對象14,諸如少于10 ;和/ 或小的鄰居組,諸如少于3個鄰居)而無需形成群網(wǎng)絡116,但簡單地通過直接發(fā)送要被同步的數(shù)據(jù)到鄰居來進行。所以,計算機可被配置成在識別小的數(shù)據(jù)更新后(例如,小數(shù)量的更新對象14 ;小的更新對象14 ;或小的鄰居組),發(fā)送小的更新對象組到小的鄰居組中的鄰居。這個替換的配置可以允許源節(jié)點12更迅速地傳播小的數(shù)據(jù)更新,而不引起群網(wǎng)絡的不必要的開銷。這個第一方面的第六變化涉及到要由源節(jié)點12同步的對象14的優(yōu)先化。作為第一個例子,有利的可以是在較低優(yōu)先級的對象14之前同步較高優(yōu)先級的對象14,或按更嚴格的同步調(diào)度表同步(例如,對于較低優(yōu)先級的對象14的更新的同步可以被推遲或批處理,而較高優(yōu)先級的對象14的同步可以迅速地執(zhí)行)。作為第二個例子,對象14可以屬于不同的組,且在屬于第二組的對象14之前同步屬于第一組的對象14可能是想要的。計算機在作為源節(jié)點12操作時,因此可以按照優(yōu)先級確立同步特定對象的次序,并可以按照更新對象14的優(yōu)先級來依次對更新對象14執(zhí)行這里討論的技術(shù)(諸如圖8的示范性方法)。這個第一方面的第七變化涉及把計算機(作為服務器或源節(jié)點1 配置成利用集中的對象存儲庫和/或群聯(lián)網(wǎng)的集中的協(xié)調(diào),諸如計算環(huán)境主機100。在一個這樣的變化中,計算環(huán)境主機100可以集中地跟蹤哪些節(jié)點18存儲哪些對象14,并可以參與在鄰居中間的群節(jié)點118的選擇以便同步更新的對象14。例如,每個節(jié)點18可以在識別更新的對象 14后,首先通知計算環(huán)境主機100。計算環(huán)境主機100然后可以被任何節(jié)點18詢問有關(guān)哪些鄰居存儲著更新的對象14,以及響應可被使用來形成群網(wǎng)絡116。在另一個這樣的變化中,計算環(huán)境主機100可以用作為對象組的有權(quán)威的源;例如,計算環(huán)境主機100可以按要求提供對象14的最新版本,可以解決版本沖突,和/或如果存儲對象14的其它節(jié)點18是不可得到的,則可以用作為對象14的可靠的源。因此,在計算機的對象存儲庫166中的對象14也在計算環(huán)境主機100的對象存儲庫166中被存儲為對應對象的場合下,計算機可被配置成在識別更新的對象14后,確定計算環(huán)境主機100是否存儲著更新的對象14,如果沒有的話,則發(fā)送更新的對象14到計算環(huán)境主機100。而且,可能有利的是在將更新的對象14與鄰居同步之前,將更新的對象14與計算環(huán)境主機100進行同步。本領(lǐng)域技術(shù)人員可以在實施這里討論的技術(shù)的同時,在計算機(例如,作為源節(jié)點12或服務器)的配置中實施附加的特征??梢栽谶@些技術(shù)的實施例之間變化的第二方面涉及到配置計算機以參與為由另一個源節(jié)點12存儲的更新對象14而形成的群網(wǎng)絡116的方式。這些變化可以例如在計算機用作為在群網(wǎng)絡116中的客戶機或群節(jié)點118時應用,諸如在圖9的示范性方法140中那樣。作為這個第二方面的第一變化,計算機可被配置成幫助源節(jié)點12識別計算機是否存儲更新的對象14。例如,源節(jié)點12可以將標識符(例如,名字、區(qū)別性的位置、GUID、或索引節(jié)點號)和內(nèi)容指示符(例如,對象14的散列碼、版本號、或最后的修改日期)發(fā)送到計算機。計算機可被配置成比較這個信息與在對象存儲庫166中的對象14(和在對象存儲庫 166中的對應對象14,如果存在一個的話)。然后如果找出匹配的對象,如果具有相同標識符的對象具有更晚的版本等等,計算機可以肯定地通知源節(jié)點12,或者如果沒有發(fā)現(xiàn)這樣的對象,則否定地通知,以及更新的對象14將被計算機接收和被存儲在對象存儲庫166中。作為這個第二方面的第二變化,計算機可被配置成在接收到對象14的組塊后,通過通知其它群節(jié)點118和/或源節(jié)點12,而參與群網(wǎng)絡116。這例如對于方便被遞送到計算機的組塊的分發(fā)可以是有幫助的,這諸如是通過使得源節(jié)點12和/或其它群節(jié)點118能夠更新群組塊圖192,以指示由計算機存儲的組塊組而進行的。另外,計算機可被配置成通過初始化、保持和使用群組塊圖192指示哪些群節(jié)點118存儲著更新對象14的哪些組塊,而參與群網(wǎng)絡116。這個群組塊圖192可以以與源節(jié)點12相似的方式被生成和使用。例如, 在加入群網(wǎng)絡116后,計算機可以初始化群組塊圖192,并且在被通知另一個群節(jié)點118存儲著特定的組塊后,計算機可以更新群組塊圖192,以指示該群節(jié)點118存儲著該組塊。這個群組塊圖192可被使用來例如確定群節(jié)點118何時接收到組塊,和方便選擇要被發(fā)送到各個群節(jié)點118的組塊(例如,通過選擇由計算機存儲的、但不經(jīng)常被其它群節(jié)點118存儲的稀少的組塊)。這個第二方面的第三變化涉及到計算機在參與群網(wǎng)絡116時遞送組塊到其它群節(jié)點118的方式。作為第一個例子,計算機可以一次僅僅發(fā)送一個組塊到一個群節(jié)點118, 以及在完成當前組塊的發(fā)送后可以選擇和發(fā)送隨后的組塊到群節(jié)點118。作為第二個例子, 計算機可以并發(fā)地發(fā)送一個或多個組塊到一個或多個群節(jié)點。在一個這樣的實施例中,計算機可以把要被發(fā)送到各個群節(jié)點118的組塊排入隊列。在被通知形成包括計算機的群網(wǎng)絡后,計算機可以被配置成生成用于各個群節(jié)點118的發(fā)送隊列。然后,通過把一個或多個組塊排入群節(jié)點118的發(fā)送隊列,可以把組塊發(fā)送到各個群節(jié)點118。在把組塊排入群節(jié)點 118的空的發(fā)送隊列后,或在完成組塊到群節(jié)點的發(fā)送后(在將發(fā)送組塊從發(fā)送隊列中取出后),計算機可以識別在對于群節(jié)點118的發(fā)送隊列中的下一個排入的組塊,并且可以發(fā)起該下一個排入的組塊的發(fā)送。這個實施例可以促進到各個群節(jié)點118的重新分發(fā)的組塊的穩(wěn)定流,以及也可以維持計算機的上載容量的高利用率。作為一個附加的改進,計算機可以在識別下一個排入的組塊后,檢查群組塊圖192,以確定群節(jié)點118是否已接收到該下一個排入的組塊;如果是的話,計算機可以僅僅將排入的組塊取出,而不用把它發(fā)送到群節(jié)點 118。本領(lǐng)域技術(shù)人員可以設計出其它改進和特征,由此在實施這里討論的技術(shù)時,計算機可以被配置成作為群節(jié)點118參與群網(wǎng)絡116。可以在這些技術(shù)的實施例之間變化的第三方面涉及到節(jié)點18的附加配置以在群網(wǎng)絡技術(shù)可能不成功的場合下完成各個對象存儲庫166的同步。正如對于圖7可以意識到的,這里討論的群網(wǎng)絡技術(shù)在特定的條件內(nèi)——諸如未被劃分的網(wǎng)絡16、完全覆蓋節(jié)點18 的鄰居組選擇和所有節(jié)點18的未中斷的網(wǎng)絡連接性——可能成功地傳播更新的對象14到所有的節(jié)點。然而,如果這些條件不能達到,則群網(wǎng)絡技術(shù)可能無法將更新的對象14傳播到一個或多個節(jié)點18。作為第一個例子,網(wǎng)絡16可以被劃分成節(jié)點18的兩個或更多個分區(qū),其中第一分區(qū)中沒有一個節(jié)點是另一個分區(qū)的任何節(jié)點可訪問的。這種劃分例如可以由于連接性故障、橋節(jié)點掉線、或不適當?shù)剡x擇的網(wǎng)絡拓撲而發(fā)生。在這種情況下,更新的對象14可以在第一分區(qū)的節(jié)點18之間傳播,但不能傳播到第二分區(qū)的任何節(jié)點18。而且, 第二分區(qū)的節(jié)點18甚至不能被通知對象14已被更新。作為第二個例子,被節(jié)點18利用來形成群網(wǎng)絡116的不適當?shù)泥従舆x擇算法可能非有意地從任何鄰居組中排除一個或多個節(jié)點18(例如,在第一節(jié)點僅僅是第二節(jié)點可訪問的,而第二節(jié)點未能把第一節(jié)點包括在它的鄰居組的場合下)。在這種情況下,被排除的節(jié)點18沒有被包括在任何群網(wǎng)絡116中, 并且沒有接收更新的對象14,甚至可能沒有被通知更新的對象14。作為第三個例子,當更新的對象14通過群網(wǎng)絡116在諸節(jié)點18間被傳播時,節(jié)點18可能臨時離線,以及可能沒有接收到更新的對象14或者甚至沒有接收到關(guān)于對象14已被更新的通知。在這些和其它情況下,當群網(wǎng)絡技術(shù)不能完成這樣的同步時,附加的技術(shù)可被利用來促進由各個節(jié)點18存儲的對象組的同步。作為一個這樣的例子,計算機可被配置成,在檢測到可能指示更新的遺失或獲得更新的遺漏(missing)的機會的同步事件(例如,重新連接到網(wǎng)絡16,檢測到網(wǎng)絡16的劃分或解除劃分,或選擇新的鄰居組)后,試圖識別和獲得更新的對象14。計算機然后可以請求節(jié)點14(諸如,鄰居)識別更新的對象14,并可以要求存儲有任何被識別的更新對象14的這樣的節(jié)點14發(fā)送更新對象14到計算機。因此,與遞送更新的對象14到由群網(wǎng)絡116展現(xiàn)的鄰居的“告訴”和“推送”體系結(jié)構(gòu)相對比,這個補充技術(shù)展現(xiàn)出“要求(ask)”體系結(jié)構(gòu)(由此節(jié)點向附近的節(jié)點要求更新的對象14)和“拉取(pull) ”體系結(jié)構(gòu)(由此節(jié)點發(fā)起從存儲更新對象14的一個或多個節(jié)點接收更新對象14 的請求)。因此,控制交互動作的節(jié)點18充當客戶機,該客戶機從充當更新對象14的服務器的節(jié)點18索要更新對象14 (或其組塊)。圖13圖示這個技術(shù)的一個實施例,包括將計算機的對象存儲庫166的對象14與被存儲在其它節(jié)點18的對象存儲庫166中的對應更新對象14進行同步的示范性方法200。 這個實施例可被添加到例如這些技術(shù)的其它的實施例(例如,圖8的示范性方法120或圖10 的示范性系統(tǒng)168)。示范性方法200從202開始,并牽涉到在檢測到204同步事件后,識別206由至少一個鄰居存儲、但沒有被存儲在計算機的對象存儲庫166中的更新對象14。 在識別208 —個或多個這樣的更新對象14后,示范性方法200牽涉到在計算機的對象存儲庫166中創(chuàng)建210該更新對象14,以及把更新對象14分塊212到至少一個組塊中。(替換地,這種分塊212可以由另一個計算機,例如更新對象14的源節(jié)點12執(zhí)行,它可以把對象 14的組塊告知計算機。)示范性方法200還牽涉到,在更新對象14的組塊被存儲在對象存儲庫166之前214,從存儲有對象存儲庫166中未存儲的至少一個組塊的鄰居請求216所述組塊,以及在從鄰居接收到組塊之后,將該組塊存儲到對象存儲庫166中。計算機可以繼續(xù)從存儲這樣的組塊的鄰居請求更新對象14的組塊,直至更新對象14被接收和存儲為止,由此示范性方法200在220處結(jié)束。替換地或附加地,實施例可被配置成支持遞送更新對象14到請求這樣的更新對象14的節(jié)點18(例如,通過作為更新對象14或其組塊的服務器操作,其可以由客戶機節(jié)點利用圖13的示范性方法200來請求)。例如,計算機可以被配置成在從鄰居接收到對于被存儲在計算機的對象存儲庫166中的對象14的組塊的請求后,發(fā)送對象14的組塊到該鄰居。另外,計算機可以在尋求識別由其它節(jié)點18存儲的更新對象14的同時,識別要被遞送到其它節(jié)點18的、被存儲在它的對象存儲庫166中的一個或多個更新對象14。例如,計算機可以在離線的同時已更新在對象存儲庫166中的對象14,而在與網(wǎng)絡16重新連接后,可以在詢問關(guān)于由其它節(jié)點18存儲的更新對象14時,將所述對象14識別為已被本地更新。 在這種情況下,計算機可以將該對象14識別為更新對象14,由此調(diào)用用于同步更新的對象 14的“告訴”和“推送”技術(shù),諸如圖8的示范性方法120。本領(lǐng)域技術(shù)人員可以設計出同步對象組的許多方式,這些方式可以在實施這里討論的技術(shù)的同時,對群網(wǎng)絡同步進行補充??梢栽谶@些技術(shù)的實施例之間變化的第四方面涉及到在這些技術(shù)中,特別是在 “要求”和“拉取”同步技術(shù)中,計算環(huán)境主機100的參與。這個第四方面的第一變化牽涉到這樣的實施例與計算環(huán)境主機100的交互,其可以方便來自其它節(jié)點18的更新對象14的同步。計算環(huán)境主機100可以存儲由包括計算機在內(nèi)的各個節(jié)點18存儲的更新對象14的列表。當計算機檢測到同步事件時,計算機可以從計算環(huán)境主機100請求已被更新的、但并沒有被存儲在計算機的對象存儲庫166中的對象14的記錄。這個記錄可以例如在以下情形中獲得,即各個節(jié)點18被配置成在把更新對象14存儲到它的對象存儲庫166后通知計算環(huán)境主機100。計算環(huán)境主機100例如可以通過比較它的由該計算機存儲的對象組14的記錄與由其它節(jié)點18——包括由計算環(huán)境主機100——存儲的對象組14,而識別和提供這樣的列表。比較的結(jié)果可以識別更新的對象14,還可以識別存儲這樣的更新對象14的節(jié)點 18,這些更新對象可以在由計算機請求后被提供。替換地,計算環(huán)境主機100可以維持由節(jié)點18存儲的更新對象14的日志,并可以把自從計算機最后已知是與其它節(jié)點18同步以來 (例如,自從由計算機檢測到的最后的網(wǎng)絡同步事件以來)的日志部分發(fā)送到計算機。計算機然后可以檢查該日志部分來識別沒有被存儲在計算機的對象存儲庫166中的任何的更新對象14。替換地,如果對象組沒有被計算環(huán)境主機100管理,則可以使用其它技術(shù)來識別更新的對象14 ;例如,計算機可以從鄰居請求最近更新的對象14的列表,或可以比較在它的對象存儲庫166中所存儲的對象14與在鄰居的對象存儲庫166中所存儲的對象14。這個第四方面的第二個變化牽涉到計算機與作為更新對象14或其組塊的替換源的計算環(huán)境主機100的另外的交互。在一些情況下,與從任何節(jié)點18獲得相比,計算機可以從計算環(huán)境主機100更容易地獲得更新的對象14。作為第一個例子,存儲更新對象14的節(jié)點18可以是計算機通過比直接聯(lián)系計算環(huán)境主機100可達到的網(wǎng)絡連接慢的網(wǎng)絡連接可訪問的(例如,在那里來自節(jié)點18的上行鏈路具有有限的上載容量,就如有時候描述通過住宅寬帶連接而連接的家庭網(wǎng)絡那樣)。作為第二個例子,存儲更新對象14的節(jié)點18可能是該計算機根本不可訪問的,諸如當這些節(jié)點18失去網(wǎng)絡連接性時,或當網(wǎng)絡劃分把這些節(jié)點18隔離在一個分區(qū)中與計算機分開時。在這些情形下,計算機可以采取從計算環(huán)境主機100請求更新對象14或其組塊的手段。例如,計算機可被配置成在無法從它的鄰居接收更新對象14的至少一個組塊時,從計算環(huán)境主機100請求所述至少一個組塊,以及在從計算環(huán)境主機100接收到所述至少一個組塊后,將所述至少一個組塊存儲在對象存儲庫 166中。把節(jié)點18配置成僅僅將這樣的請求作為最后手段以便保存網(wǎng)絡容量和計算環(huán)境主機100的處理資源可以是有利的,但是在由計算機存儲的對象14與對象14的最新更新不同步的場合下,在拖延的時間段上把計算機配置成運用這個選項可能是想要的。這個第四方面的第三變化牽涉到利用計算環(huán)境主機100來調(diào)停版本沖突。在許多情況下,對象14可能由兩個節(jié)點18并發(fā)地但不同地更新,可能難以調(diào)和所述更新,以及難以使對象14的一個版本優(yōu)先于另一個版本。例如,第一節(jié)點18可以將對象14的它的本地表示進行更新,而該節(jié)點18是與網(wǎng)絡16斷開連接的,在此期間第二節(jié)點18可能不同地更新同一個對象14的它的本地表示。當?shù)谝还?jié)點18重新連接到網(wǎng)絡16時,它可能發(fā)現(xiàn)由第二節(jié)點18進行的對象14的有沖突的更新。在這樣的情況下,節(jié)點18可以求助于計算環(huán)境主機100以調(diào)停版本沖突,因為計算環(huán)境主機100可以作為對象組的權(quán)威表示的宿主。計算環(huán)境主機100可以通過根據(jù)各種因素選擇一個版本優(yōu)于另一個版本而進行響應(例如, 最近更新的版本,或在較高優(yōu)先級設備上更新的對象14的版本優(yōu)于在較低優(yōu)先級節(jié)點設備上更新的對象14的版本。)替換地,計算環(huán)境主機100可以試圖調(diào)和/或融合對對象14 的不同更新,以及可以生成要被分發(fā)到節(jié)點18的混合對象。作為另外的替換例,計算環(huán)境主機100可以指示對象14的兩個版本都要被存儲(例如,通過重新命名對象14的至少一個版本),或可以要求用戶選擇一個版本。本領(lǐng)域技術(shù)人員可以設計出與這里討論的技術(shù)有關(guān)的計算環(huán)境主機100的許多使用。
雖然本主題是以特定于結(jié)構(gòu)特征和/或方法動作的語言描述的,但應當明白,在所附權(quán)利要求中限定的主題不是必然地限于以上描述的特定特征或動作。而是,以上描述的特定特征和動作是作為實施權(quán)利要求的示例性形式被公開的。當在本申請中使用時,名詞“部件”、“模塊”、“系統(tǒng)”、“接口”等等通常打算指與計算機有關(guān)的實體,或者是硬件、硬件與軟件的組合、軟件、或執(zhí)行中的軟件。例如,部件可以是,但不限于在處理器上運行的進程、處理器、對象、可執(zhí)行的、執(zhí)行的線程、程序和/或計算機。作為示例,在控制器上運行的應用和控制器都可以是部件。一個或多個部件可以駐留在進程內(nèi)和/或執(zhí)行的線程內(nèi),以及部件可以局限在一個計算機上,和/或被分布在兩個或更多個計算機之間。而且,要求保護的主題可以被實施為方法、設備、或制造品,它們通過使用標準編程和/或工程技術(shù)來生產(chǎn)軟件、固件、硬件或它們的任何組合,以便控制計算機來實施所公開的主題。當在這里使用時,名詞“制造品”打算包括從任何計算機可讀的設備、載體或媒體可訪問的計算機程序。當然,本領(lǐng)域技術(shù)人員將認識到,可以對于這種配置作出許多修改, 而不背離要求保護的主題的范圍或精神。圖14和以下的討論提供了對適當?shù)挠嬎悱h(huán)境的概略的一般性描述,以實施這里闡述的一個或多個措施的實施例。圖14的操作環(huán)境僅僅是適當?shù)牟僮鳝h(huán)境的一個例子, 它不打算對于操作環(huán)境的使用范圍或功能性提出任何限制。示例性計算設備包括,但不限于個人計算機、服務器計算機、手持或膝上型設備、移動設備(諸如移動電話、個人數(shù)字助理(PDA)、媒體播放器等等)、多處理器系統(tǒng)、消費者電子設備、小型計算機、大型計算機、包括上述的任何系統(tǒng)和設備的分布式計算環(huán)境、等等。雖然不要求,但實施例是在“計算機可讀指令”正由一個或多個計算設備執(zhí)行的一般上下文中描述的。計算機可讀指令可以經(jīng)由計算機可讀媒體被分發(fā)(下面討論)。計算機可讀指令可被實施為執(zhí)行特定任務或?qū)嵤┨囟ǔ橄髷?shù)據(jù)類型的程序模塊,諸如函數(shù)過程、 對象、應用編程接口(API)、數(shù)據(jù)結(jié)構(gòu)等等。典型地,計算機可讀指令的功能性可以在各種環(huán)境中按所期望的被組合或分布。圖14圖示包括被配置成實施這里提供的一個或多個實施例的計算設備232的系統(tǒng)230的例子。在一個配置中,計算設備232包括至少一個處理單元236和存儲器238。根據(jù)計算設備的確切配置和類型,存儲器238可以是易失性(舉例而言,諸如RAM)、非易失性 (舉例而言,諸如ROM、閃速存儲器等)、或這二者的一些組合。這個配置在圖14上用虛線234 來例示。在其它實施例中,設備232可包括附加的特征和/或功能性。例如,設備232還可包括附加的存儲裝置(例如,可拆卸的和/或不可拆卸的),包括但不限于磁存儲裝置、光學存儲裝置等等。這樣的附加存儲裝置在圖14上用存儲裝置240來例示。在一個實施例中,用來實施這里提供的一個或多個實施例的計算機可讀指令可以是存儲著裝置MO中。 存儲裝置240還可以存儲用來實施操作系統(tǒng)、應用程序等等的其它計算機可讀指令。計算機可讀指令例如可被裝載存儲著器238中,供處理單元236執(zhí)行。當在這里使用時,名詞“計算機可讀媒體”包括計算機存儲媒體。計算機存儲媒體包括以任何方法或技術(shù)被實施的、用于存儲諸如計算機可讀指令或其它數(shù)據(jù)那樣的信息的易失性和非易失性的、可拆卸和非可拆卸的媒體。存儲器238和存儲裝置240是計算機存儲媒體的例子。計算機儲存媒體包括但不限于RAM、R0M、EEPR0M、閃速存儲器或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光學存儲裝置、盒式磁帶、磁帶、磁盤存儲裝置或其它磁存儲設備,或可被使用來存儲想要的信息并可被設備232訪問的任何其它介質(zhì)。任何這樣的計算機存儲媒體可以是設備232的一部分。設備232還可包括通信連接M6,其允許設備232與其它設備通信。通信連接246 可包括,但不限于調(diào)制解調(diào)器、網(wǎng)絡接口卡(NIC)、集成的網(wǎng)絡接口、射頻發(fā)射機/接收機、 紅外端口、USB連接、或用于把計算設備232連接到其它計算設備的其它接口。通信連接246 可包括有線連接或無線連接。通信連接246可以傳送和/或接收通信媒體。名詞“計算機可讀媒體”可包括通信媒體。通信媒體典型地使計算機可讀指令或其它數(shù)據(jù)具體化為“調(diào)制的數(shù)據(jù)信號”,諸如載波或其它輸送機制,以及包括任何信息傳遞媒體。名詞“調(diào)制的數(shù)據(jù)信號”可包括使它的一個或多個特征以將信息編碼在信號中這樣的方式來被設置或者改變的信號。設備232可包括輸入設備M4,諸如鍵盤、鼠標、筆、話音輸入設備、觸摸輸入設備、 紅外照相機、視頻輸入設備和/或任何其它輸入設備。在設備232中也可以包括輸出設備 M2,諸如一個或多個顯示器、揚聲器、打印機和/或任何其它輸出設備。輸入設備244和輸出設備242可以經(jīng)由有線連接、無線連接或它們的任何組合被連接到設備232。在一個實施例中,來自另一個計算設備的輸入設備或輸出設備可被用作為用于計算設備232的輸入設備244或輸出設備M2。計算設備232的部件可以通過諸如總線那樣的各種互連被連接。這樣的互連可包括外圍部件互連(PCI),諸如PCI Express、通用串行總線(USB)、firewire (IEEE 1394)、光學總線結(jié)構(gòu)等等。在另一個實施例中,計算設備232的部件可以通過網(wǎng)絡被互連。例如,存儲器238可以由位于不同物理位置、通過網(wǎng)絡被互連的多個物理存儲器單元組成。本領(lǐng)域技術(shù)人員會認識到,被利用來存儲計算機可讀指令的存儲設備可被跨越網(wǎng)絡來分布。例如,經(jīng)由網(wǎng)絡248可訪問的計算設備250可以存儲用來實施這里提供的一個或多個實施例的計算機可讀指令。計算設備232可以訪問計算設備250并下載一部分或全部的計算機可讀指令用于執(zhí)行。替換地,計算設備232可以按需要下載計算機可讀指令的片段,或者某些指令可以在計算設備232上執(zhí)行,而某些在計算設備250上執(zhí)行。這里提供了實施例的各種操作。在一個實施例中,所描述的操作中的一個或多個操作可以構(gòu)成被存儲在一個或多個計算機可讀媒體上的計算機可讀指令,這些指令如果被計算設備執(zhí)行,將使得計算設備執(zhí)行所描述的操作。某些或全部操作被描述的次序不應當解釋為是指這些操作必然地依賴于次序。本領(lǐng)域技術(shù)人員將意識到替換的次序安排具有本描述的益處。而且,應明白,不是所有的操作都必然地存在于這里提供的每個實施例中。而且,單詞“示范性”在這里被使用來指用作為例子、實例、或舉例說明。在這里被描述為“示范性”的任何方面或設計不是必然地被解釋為比其它方面或設計更有利。而是, 單詞示范性的使用打算以具體的方式給出構(gòu)思。當在本申請中使用時,名詞“或”打算是指包括性的“或”,而不是排除性的“或”。也就是,除非另外規(guī)定,或從上下文清楚看出,否則“X 利用A或B”打算是指任何的自然的包括性置換。也就是,如果X利用A ;X利用B ;或X利用A和B兩者,則在任何上述的情況下“X利用A或B”均被滿足。另外,在本申請和所附權(quán)利要求中使用的冠詞“一”或“一個”(“a”或“an”)可通常被解釋為是指“一個或多個”,除非另外規(guī)定,或從上下文清楚看出是針對單數(shù)形式。 另外,雖然本公開內(nèi)容是相對于一個或多個實現(xiàn)被顯示和描述的,但本領(lǐng)域技術(shù)人員基于閱讀和了解本說明書和附圖,將想到等同的變更和修改。本公開內(nèi)容包括所有這樣的修改和變更,并且僅僅由以下權(quán)利要求的范圍來限制。特別是關(guān)于由上述的部件(例如,元件、資源等等)執(zhí)行的各種功能,被使用來描述這樣的部件的名詞,除非另外指明,否則打算對應于用來執(zhí)行所描述的部件的規(guī)定功能的任何部件(例如,也就是功能上等同), 即便它們在結(jié)構(gòu)上不等同于在本公開內(nèi)容的這里例示的示范性實現(xiàn)中執(zhí)行該功能的公開的結(jié)構(gòu)。另外,雖然本公開內(nèi)容的具體特征可能是相對于幾個實現(xiàn)中的僅僅一個實現(xiàn)而予以公開的,但這樣的特征可以按對于任何給定的或特定的應用可能是想要的和有利的那樣,來與其它實現(xiàn)的一個或多個其它特征組合。而且,就名詞“包括”、“具有”、“有”、“帶有” 或它們的變形在本詳細說明或權(quán)利要求中被使用而言,這樣的名詞打算以與名詞“包括”類似的方式是包括性的。
權(quán)利要求
1.一種同步由具有處理器(164)的計算機(162)存儲的對象組(166)的對象(14)與由通過至少一個網(wǎng)絡(16)可訪問的至少一個節(jié)點存儲的對象組的對應對象的方法(120),該方法(120)包括在處理器(164)上執(zhí)行指令,所述指令被配置成從所述節(jié)點(18)中選擇包括至少一個鄰居的鄰居組,所述至少一個鄰居是該計算機 (162)和鄰居組的其它鄰居通過所述至少一個網(wǎng)絡(16)可訪問的;以及在識別對象組(166)中的更新的對象(14)后 確定鄰居組中沒有存儲該更新對象(14)的鄰居;形成包括沒有存儲該更新對象(14)的鄰居的群節(jié)點(118)的群網(wǎng)絡(116); 將為該更新對象(14)形成的群網(wǎng)絡(116)通知給群節(jié)點(118);以及使用群網(wǎng)絡(166)發(fā)送該更新對象(114)到群節(jié)點(118)。
2.權(quán)利要求1的方法,選擇鄰居組包括 枚舉網(wǎng)絡的節(jié)點,以及對于各個節(jié)點,選擇包括按照以下公式枚舉的網(wǎng)絡的節(jié)點的鄰居組 Si=n xor 21 | 0 ^ i<ceiling (Iog2 (N)), η xor 2J<N, 其中Si表示該節(jié)點的鄰居i ; η表示該節(jié)點的計數(shù);以及 N表示網(wǎng)絡中節(jié)點的數(shù)量。
3.權(quán)利要求1的方法,確定沒有存儲該更新對象的鄰居包括 對于各個鄰居將更新對象的標識符和更新對象的內(nèi)容指示符發(fā)送到鄰居,以及從鄰居接收關(guān)于該鄰居是否存儲更新對象的通知。
4.權(quán)利要求1的方法,發(fā)送更新對象到群節(jié)點包括 將更新對象分塊成至少一個組塊;初始化群組塊圖,該群組塊圖指示各個群節(jié)點是否存儲著更新對象的各個組塊;以及在群組塊圖指示各群節(jié)點已接收到組塊之前 按照群組塊圖,發(fā)送組塊到?jīng)]有存儲該組塊的群節(jié)點;和在從群節(jié)點接收到存儲著組塊的通知后,更新群組塊圖,以指示該群節(jié)點存儲著該組塊;以及在從群組塊圖確定各群節(jié)點已接收到組塊后,終止群網(wǎng)絡。
5.權(quán)利要求1的方法指令被配置成在識別對象組中的更新對象后,將更新對象添加到包括沒有被鄰居存儲的更新對象的更新對象批次中;以及形成群網(wǎng)絡包括當更新對象批次超過對象批次閾值時,形成群網(wǎng)絡。
6.權(quán)利要求1的方法所述對象在計算環(huán)境主機的對象存儲庫中被存儲為對應的對象;以及指令被配置成,在識別更新的對象后確定計算環(huán)境主機是否存儲著更新的對象;以及在確定計算環(huán)境主機沒有存儲更新的對象后,發(fā)送更新的對象到計算環(huán)境主機。
7.權(quán)利要求1的方法,指令被配置成在由鄰居通知包括標識符和內(nèi)容指示符的更新對象后比較更新對象的標識符和內(nèi)容指示符與在對象存儲庫中的對應對象,以及將計算機是否存儲著更新對象的通知發(fā)送給鄰居。
8.權(quán)利要求1的方法,指令被配置成,在被通知給由源為更新的對象形成包括該計算機的群網(wǎng)絡后在對象存儲庫中創(chuàng)建對應的更新對象; 在各群節(jié)點接收到該對象之前 在接收到該對象后,將該對象存儲在對象存儲庫中,以及將該對象發(fā)送到?jīng)]有存儲該對象的群節(jié)點;以及在確定各群節(jié)點已接收到該對象后,終止群網(wǎng)絡。
9.權(quán)利要求8的方法指令被配置成,在被通知給由源為更新的對象形成包括計算機的群網(wǎng)絡后,創(chuàng)建群組塊圖,該群組塊圖指示各個群節(jié)點是否存儲更新對象的各個組塊; 接收對象包括 在接收到組塊后 將組塊存儲在對象存儲庫中,以及更新群組塊圖,以指示計算機存儲著該組塊; 發(fā)送對象包括在各群節(jié)點接收到對象的組塊之前按照群組塊圖將組塊發(fā)送到?jīng)]有存儲該組塊的群節(jié)點,以及更新群組塊圖,以指示該群節(jié)點存儲著該組塊;以及確定群節(jié)點接收到對象包括按照群組塊圖確定群節(jié)點已接收到組塊。
10.權(quán)利要求9的方法接收組塊包括向群節(jié)點和源通知計算機存儲著組塊;以及指令被配置成,在被通知群節(jié)點存儲著組塊后,更新群組塊圖,以指示該群節(jié)點存儲著該組塊。
11.權(quán)利要求9的方法指令被配置成,在被通知形成包括計算機的群網(wǎng)絡后,生成用于各個群節(jié)點的發(fā)送隊列;和發(fā)送組塊到群節(jié)點包括 將組塊排入群節(jié)點的發(fā)送隊列;在將組塊排入群節(jié)點的空的發(fā)送隊列后,發(fā)起組塊到群節(jié)點的發(fā)送;以及在完成組塊到群節(jié)點的發(fā)送后 從發(fā)送隊列取出該組塊,和在識別群節(jié)點的發(fā)送隊列中的下一個排入的組塊后,發(fā)起該發(fā)送隊列中下一個排入的組塊到群節(jié)點的發(fā)送。
12.權(quán)利要求1的方法,指令被配置成,在檢測到同步事件后識別由至少一個鄰居存儲、但沒有被存儲在計算機的對象存儲庫中的更新對象;以及在識別由至少一個鄰居存儲、但沒有被存儲在計算機的對象存儲庫中的更新對象后 在對象存儲庫中創(chuàng)建更新對象; 將更新對象分塊成至少一個組塊;以及在更新對象的組塊被存儲在對象存儲庫之前從存儲組塊的鄰居請求沒有被存儲在對象存儲庫中的至少一個組塊,以及在從鄰居接收到組塊后,將該組塊存儲在對象存儲庫中。
13.權(quán)利要求12的方法,指令被配置成,在從鄰居接收到對于被存儲在計算機的對象存儲庫中的對象組塊的請求后,發(fā)送對象的組塊到鄰居。
14.一種被配置成同步由計算機(162)存儲的對象組的更新對象(14)與由通過至少一個網(wǎng)絡(16)可訪問的至少一個節(jié)點(18)存儲的對象組的對應對象(14)的系統(tǒng)(168),該系統(tǒng)(168)包括鄰居選擇部件(170),被配置成從所述節(jié)點(18)中選擇包括至少一個鄰居的鄰居組, 所述至少一個鄰居是該計算機(162)和鄰居組的其它鄰居通過所述至少一個網(wǎng)絡(16)可訪問的;群網(wǎng)絡形成部件(174),被配置成 確定在鄰居組中沒有存儲該更新對象(14)的鄰居;形成包括沒有存儲該更新對象(14)的鄰居的群節(jié)點(118)的群網(wǎng)絡(116); 將為該更新對象(14)形成的群網(wǎng)絡(116)通知給群節(jié)點(118);以及群網(wǎng)絡發(fā)送部件(176),被配置成使用群網(wǎng)絡(116)發(fā)送該更新對象(14)到群節(jié)點 (118)。
15.一種計算機可讀的存儲媒體(182),該媒體包括指令,當所述指令被計算機(162) 的至少一個處理器(164)執(zhí)行時,使得所述至少一個處理器(164)執(zhí)行以下動作,這里該計算機存儲著包括對象(14)的對象組,所述對象(14)對應于由通過至少一個網(wǎng)絡(16)可訪問的至少一個節(jié)點(18)存儲的對象組的對象(14),并且在計算環(huán)境主機(100)的對象存儲庫(166)中被存儲為對應的對象(14),所述動作為在檢測到至少一個網(wǎng)絡改變事件后,通過以下步驟從節(jié)點(18)中選擇包括至少一個鄰居的鄰居組枚舉網(wǎng)絡(16)的節(jié)點(18),以及對于各個節(jié)點(18),選擇包括按照以下公式枚舉的網(wǎng)絡(16)的節(jié)點(18)的鄰居組 Si=n xor 21 | 0 ^ i<ceiling (Iog2 (N)), η xor 2kN. 其中Si表示該節(jié)點(18)的鄰居i; η表示該節(jié)點(18)的計數(shù);以及 N表示網(wǎng)絡(16)中節(jié)點(18)的數(shù)量;在識別包括要被遞送到小鄰居組的小數(shù)量的小更新對象(14)的小更新對象組后,將小更新對象組發(fā)送到小鄰居組中的鄰居;在識別到在超過小更新對象組的對象組中的更新對象(14)后通過對于各個鄰居執(zhí)行以下步驟,而確定沒有存儲該更新對象(14)的鄰居 將更新對象(14)的標識符和更新對象(14)的內(nèi)容指示符發(fā)送到鄰居,以及從鄰居接收關(guān)于該鄰居是否存儲著該更新對象(14)的通知; 形成包括沒有存儲該更新對象(14)的鄰居的群節(jié)點(118)的群網(wǎng)絡(116); 將為該更新對象(14)形成的群網(wǎng)絡(116)通知給群節(jié)點(118);以及通過以下步驟來使用群網(wǎng)絡(116)發(fā)送更新對象(14)到群節(jié)點(118) 使更新對象(14)分塊成至少一個組塊;初始化群組塊圖(192),該群組塊圖指示各個群節(jié)點(118)是否存儲著更新對象(14) 的各個組塊;以及在群組塊圖(192)指示各群節(jié)點(118)接收到組塊之前 按照群組塊圖(192),發(fā)送組塊到?jīng)]有存儲該組塊的群節(jié)點(118);和在從群節(jié)點(118)接收到存儲著組塊的通知后,更新群組塊圖(192),以指示該群節(jié)點 (118)存儲著該組塊;以及在從群組塊圖(192)確定各群節(jié)點(118)已接收到組塊后,終止群網(wǎng)絡(116); 確定計算環(huán)境主機(100)是否存儲著更新對象(14);以及在確定計算環(huán)境主機(100)沒有存儲更新對象(14)后,發(fā)送更新對象(14)到計算環(huán)境主機(100);在由鄰居通知包括標識符和內(nèi)容指示符的更新對象(14)后 比較更新對象(14)的標識符和內(nèi)容指示符與在對象存儲庫(166)中的對應的對象 (14),以及將計算機(162)是否存儲更新對象(14)的通知發(fā)送給鄰居; 在被通知給由源為更新對象(14)形成包括計算機(162)的群網(wǎng)絡(116)后 在對象存儲庫(116)中創(chuàng)建對應的更新對象(14); 生成用于各個群節(jié)點(118)的發(fā)送隊列;創(chuàng)建群組塊圖(192),該群組塊圖指示各個群節(jié)點(118)是否存儲著更新對象(14)的各個組塊;在各群節(jié)點(118)接收到對象(14)的組塊之前 在接收到對象(14)的組塊后 將組塊存儲在對象存儲庫(166)中,更新群組塊圖(192),以指示計算機(162)存儲著該組塊;以及通知群節(jié)點(118)和源計算機(162)存儲著該組塊;在被通知群節(jié)點(118)存儲著組塊后,更新群組塊圖(192),以指示該群節(jié)點(118)存儲著該組塊;按照群組塊圖(192),通過以下步驟發(fā)送組塊到?jīng)]有存儲該組塊的群節(jié)點(118) 按照群組塊圖(192),選擇包括被存儲在對象存儲庫(166)中、但不經(jīng)常被存儲在群節(jié)點(118)之中的稀少組塊的組塊;將組塊排入群節(jié)點(118)的發(fā)送隊列;在將組塊排入群節(jié)點(118)的空的發(fā)送隊列后,發(fā)起組塊到群節(jié)點(118)的發(fā)送;以及在完成組塊到群節(jié)點(118)的發(fā)送后從發(fā)送隊列取出該組塊,和在識別群節(jié)點(118)的發(fā)送隊列中的下一個排入組塊后,發(fā)起該發(fā)送隊列中下一個排入的組塊到群節(jié)點(118)的發(fā)送;以及更新群組塊圖(192),以指示該群節(jié)點(118)存儲著該組塊;以及在按照群組塊圖(192)確定各群節(jié)點(118)已接收組塊后,終止群網(wǎng)絡(116); 在檢測到同步事件后通過從計算環(huán)境主機(100)請求被存儲在計算環(huán)境主機(100)的對象存儲庫(166)中、 但沒有被存儲在計算機(162)的對象存儲庫(166)中的更新對象(14)的列表,而識別由至少一個鄰居存儲、但沒有被存儲在計算機(162)的對象存儲庫(166)中的更新對象(14);在識別由至少一個鄰居存儲、但沒有被存儲在計算機(162)的對象存儲庫(166)中的更新對象(14)后在對象存儲庫(166)中創(chuàng)建該更新對象(14); 將該更新對象(14)分塊成至少一個組塊;以及在未能從鄰居接收更新對象(14)的至少一個組塊后 從計算環(huán)境主機(100)請求該至少一個組塊,以及在從計算環(huán)境主機(100)接收該至少一個組塊后,將該至少一個組塊存儲在對象存儲庫(166)中;在更新對象(14)的組塊被存儲在對象存儲庫(166)之前 從存儲組塊的鄰居請求沒有被存儲在對象存儲庫(166)中的至少一個組塊,以及在從鄰居接收到組塊后,將該組塊存儲在對象存儲庫(166)中;以及對于被存儲在計算機(162)的對象組中、但沒有被存儲在至少一個鄰居的對象組中的對象(14),將該對象(14)識別為更新的對象(14);以及在從鄰居接收到對于被存儲在計算機(162)的對象存儲庫(166)中的對象(14)的組塊的請求后,發(fā)送該對象(14)的該組塊給該鄰居。
全文摘要
對象組可以由一組計算機冗余地存儲,每個計算機被配置成存儲對應的對象的本地表示。當計算機改變對象組時(例如,通過添加或更改對象),可以通過從存儲更新對象的節(jié)點的鄰居迭代地形成和使用自組群網(wǎng)絡,而跨越多個計算機來同步更新的對象。這個群網(wǎng)絡可以合作地操作,其中每個節(jié)點盡可能快速地分發(fā)對象組塊到其它節(jié)點,并且可以忽視諸如公平性和欺騙避免那樣的、競爭性群網(wǎng)絡的概念,它們可能不適用于合作的群集,否則會使得對象的傳播變慢。替換的“要求(ask)”技術(shù)可被包括來識別和恢復遺漏的對象更新,以及計算環(huán)境主機可以被包括進來作為權(quán)威的對象源和/或作為最后手段的對象存儲庫。
文檔編號G06F9/44GK102449616SQ201080023715
公開日2012年5月9日 申請日期2010年5月27日 優(yōu)先權(quán)日2009年5月29日
發(fā)明者薩佩克 A. 申請人:微軟公司