專利名稱:在基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng)中傳播預(yù)訂的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng),尤其涉及傳播預(yù)訂以及從發(fā)布者路由發(fā)布的消息到用戶的方法。因此,在支持除盡最大努力傳送之外所利用的消息可靠(即按順序,無間隙)傳送的系統(tǒng)中能夠利用本發(fā)明。
背景技術(shù):
在基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng)中,發(fā)布者通過系統(tǒng)投送或發(fā)布信息,并且用戶指定對接收某種信息的興趣。使用定義對所投送信息的謂詞的預(yù)訂來指定用戶興趣。為了改進(jìn)發(fā)布/預(yù)訂系統(tǒng)中信息傳送的性能,避免遍及整個(gè)發(fā)布/預(yù)訂系統(tǒng)地廣播每個(gè)消息。在基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng)中,所請求的信息依用戶而變化,并且任何一個(gè)用戶可以僅對發(fā)布的信息總量的很小部分感興趣。例如,當(dāng)發(fā)布/預(yù)訂系統(tǒng)中的預(yù)訂顯著重疊以及僅與所有發(fā)布信息的較小子集匹配時(shí),大部分發(fā)布信息不需要在發(fā)布/預(yù)訂系統(tǒng)的主要部分各處廣播。
發(fā)布/預(yù)訂系統(tǒng)通常通過經(jīng)由系統(tǒng)傳播預(yù)訂給信息的發(fā)布者,以及通過使用傳播的預(yù)訂指引經(jīng)由系統(tǒng)的信息路由并且過濾出不必被路由的發(fā)布信息,來防止發(fā)布信息在整個(gè)系統(tǒng)的不必要泛濫。通過在發(fā)布/預(yù)訂系統(tǒng)中的發(fā)布者和用戶之間配置的代理的使用,促進(jìn)此路由及過濾。每個(gè)代理包含傳播的預(yù)訂,其與代理可以路由發(fā)布信息到的用戶有關(guān)。尤其是,每個(gè)代理包含系統(tǒng)中鄰近代理和用戶的預(yù)訂。當(dāng)信息經(jīng)過發(fā)布/預(yù)訂系統(tǒng)時(shí),代理基于預(yù)訂使用傳播的預(yù)訂來過濾發(fā)布信息。此處理被稱為消息過濾并且可以被用在網(wǎng)絡(luò)中的任何地方,即使代理非常接近投送信息的發(fā)布者。因此,僅傳遞與連接到代理的下行用戶有關(guān)的信息,并且發(fā)布的信息未被傳遞給不涉及匹配預(yù)訂的發(fā)布/預(yù)訂系統(tǒng)中的代理和用戶。
當(dāng)更多預(yù)訂被加入以及通過發(fā)布/預(yù)訂系統(tǒng)傳播時(shí),或當(dāng)接近發(fā)布者的程度提高時(shí),在每個(gè)代理中為信息過濾及路由目的而維護(hù)的關(guān)于預(yù)訂的信息量增長并且可以變得麻煩,從而消極地影響發(fā)布/預(yù)訂系統(tǒng)的性能。通常,發(fā)布/預(yù)訂系統(tǒng)通過使用預(yù)訂聚集(subscriptionaggregation)或預(yù)訂合并(subscription consolidation)來嘗試避免此問題。在預(yù)訂聚集中,例如,如果匹配第一預(yù)訂的信息也匹配第二預(yù)訂,并且兩個(gè)預(yù)訂都在相對于給定代理的相同方向上路由,則僅傳播第二預(yù)訂。此聚集處理利用預(yù)訂間的覆蓋關(guān)系,并且許多實(shí)現(xiàn)預(yù)訂傳播的發(fā)布/預(yù)訂系統(tǒng)利用預(yù)訂間的覆蓋關(guān)系降低在整個(gè)系統(tǒng)中傳播以及在每個(gè)代理處維護(hù)的信息的量。
除了嘗試盡可能有效地匹配發(fā)布的信息與預(yù)訂之外,操作發(fā)布/預(yù)訂系統(tǒng)以提供發(fā)布信息的按順序,無間隙傳送。針對即使在存在系統(tǒng)故障的情況下也提供信息的按順序、無間隙傳送的需求源于規(guī)定對信息的不間斷流動的要求的服務(wù)等級協(xié)議,例如,對于某些特定的股票交易人,不能訪問其它交易人能夠訪問的交易事件是不可接受的,并且該需求也源于消息相關(guān)性,例如當(dāng)消息被預(yù)訂應(yīng)用用以累積事件的視圖并且錯(cuò)過或重新定序的消息能夠?qū)е嘛@示不正確狀態(tài)的時(shí)候。在單獨(dú)系統(tǒng)內(nèi)使用常規(guī)方法滿足按順序、無間隙傳送,高性能,可伸縮性以及高可用性的要求是非常困難的。
由于硬件和軟件故障以及網(wǎng)絡(luò)配置錯(cuò)誤,在廣域網(wǎng)應(yīng)用中,用戶,發(fā)布者以及代理丟失連接是常見的。為提高系統(tǒng)可用性,在提供基礎(chǔ)網(wǎng)絡(luò)鏈路中的冗余的冗余覆蓋網(wǎng)絡(luò)上建立一些發(fā)布/預(yù)訂系統(tǒng)。然而,當(dāng)前系統(tǒng)未有效利用覆蓋網(wǎng)絡(luò)中的可用冗余以通過及時(shí)和有效的處理從硬件和軟件故障中恢復(fù)。在代理的典型冗余覆蓋網(wǎng)絡(luò)中,多個(gè)路徑可以存在于網(wǎng)絡(luò)中任何兩個(gè)代理之間,并且發(fā)布/預(yù)訂系統(tǒng)通過這些路徑自動對發(fā)布信息傳輸量進(jìn)行負(fù)載平衡。當(dāng)這些路徑之一被中斷時(shí),例如由于代理或鏈接故障,發(fā)布/預(yù)訂系統(tǒng)重定向發(fā)布信息傳輸?shù)娇捎玫目蛇x路徑。
然而,用于提供冗余覆蓋網(wǎng)絡(luò)中的可靠傳送的常規(guī)方法在發(fā)布者和用戶之間的路由路徑上持久存儲任何消息或消息元數(shù)據(jù)。在(參考文獻(xiàn))中描述了支持可靠傳送但無需在路由路徑上持久存儲消息或消息元數(shù)據(jù)的方案。然而,該方案未考慮由連接到系統(tǒng)或從系統(tǒng)斷開的用戶導(dǎo)致的動態(tài)預(yù)訂變化。
能夠處理動態(tài)預(yù)訂變化的已知發(fā)布/預(yù)訂系統(tǒng)未提供無間隙、按順序的傳送,并且未利用存在于代理網(wǎng)絡(luò)中的冗余路徑。因此,已知系統(tǒng)不是高度可伸縮以及可用的。
在A.Carzaniga,D.S.Rosenblum以及A.L.Wolf,Design andEvaluation of a Wide-Area Event Notification Service,ACMTransactions on Computer Systems,19(3)332-383,aug.2001以及R.Chand and P.A.Felber,A Scalable Protocol for Content-BasedRouting in Overlay Networks,Proceedings of the IEEE InternationalSymposium on Network Computing and Applications(NCA′03),Cambridge,MA,April 2003中發(fā)現(xiàn)支持預(yù)訂聚集以實(shí)現(xiàn)可伸縮性的發(fā)布/預(yù)訂系統(tǒng)的例子。這些應(yīng)用也支持在服務(wù)器之間有多個(gè)路由的拓?fù)?;然而,預(yù)訂僅沿著生成樹中單個(gè)選擇的“最優(yōu)路由”傳播。沿著單個(gè)選擇的路由傳播預(yù)訂的這個(gè)限制使系統(tǒng)速度慢,并且很難通過動態(tài)切換到另一個(gè)路由來從生成樹鏈接故障中恢復(fù)。此外,這些發(fā)布/預(yù)訂系統(tǒng)未提供在多個(gè)可用路徑間分享負(fù)載的機(jī)構(gòu),并且不支持可靠傳送。
在B.Segall,D.Arnold,J.Boot,M.Henderson,以及T.Phelps,Content Based Routing with Elvin4,AUUG2K,Canberra,Australia,June 2000中,圍繞過濾以及直接向客戶傳遞消息的單個(gè)服務(wù)器構(gòu)造發(fā)布/預(yù)訂系統(tǒng)。然而,系統(tǒng)未解決可伸縮性或可用性的問題。
在A.Snoeren,K.Conley以及D.Gifford,Mesh-Based ContentRouting using XML,Proceedings of the 18th ACM Symposium onOperating System Principles(SOSP 2001)Alberta,Canada,October2001中討論的發(fā)布/預(yù)訂系統(tǒng)嘗試通過在基于網(wǎng)狀的覆蓋網(wǎng)絡(luò)中的冗余鏈路上同時(shí)發(fā)送消息來改進(jìn)具有低時(shí)延的可靠性。協(xié)議使用基于內(nèi)容的路由以及提供高等級的可用性。然而,當(dāng)動態(tài)增加以及從系統(tǒng)刪除預(yù)訂時(shí),無法保證按順序、無間隙的傳送。
G.Cugola,E.Di Nitto,以及A.Fuggetta,The JEDI Event-BasedInfrastructure and Its Application to the Development of the OPSSWFMS,IEEE Transactions on Software Engineering,27(9)827-850,Sept.2001論述了保證事件的因果順序(作為特例)的發(fā)布/預(yù)訂系統(tǒng)。通過稱作活動對象(Active Object)的實(shí)體發(fā)布事件的順序。這個(gè)系統(tǒng)提供事件分配器的兩個(gè)實(shí)現(xiàn)。第一版本是構(gòu)成單個(gè)進(jìn)程并且滿足簡單系統(tǒng)的要求的集中式版本。第二版本是由互連成樹結(jié)構(gòu)的一組分發(fā)服務(wù)器構(gòu)成的分布式版本。此分布式版本雖然解決了參與高強(qiáng)度通信的因特網(wǎng)分布式應(yīng)用的部分需要,然而不適應(yīng)以及利用分發(fā)服務(wù)器之間的冗余鏈接,因此既不是高可用的,也不容易用于負(fù)載分享。
在B.Zhao,L.Huang,A.Joseph,以及J.Kubiatowicz,ExploitingRouting Redundancy Using a Wide-area Overlay,Technical ReportUCB/CSD-02-1215,University of California,Berkeley中圖解的發(fā)布/預(yù)訂系統(tǒng)通過動態(tài)交換流量到預(yù)先計(jì)算的可選路由來提供耐故障路由。在這個(gè)系統(tǒng)中的消息能夠被復(fù)制,并且以快速再收斂“圍繞”網(wǎng)絡(luò)阻塞及故障熱點(diǎn)進(jìn)行多點(diǎn)傳送以降低重復(fù)。然而,這個(gè)系統(tǒng)不支持內(nèi)容路由。
A.Rowstron,A.Kermarrec,M.Castro,and P.Druschel,SCRIBEThe design of a Large-Scale Event NotificationInfrastructure,Proceedings of 3rd International Workshop onNetworked Group Communication(NGC 2001),UCL,London,UK,November 2001描述了建立在覆蓋于因特網(wǎng)上的端到端對象定位及路由底層的頂端的大規(guī)模以及完全非集中式的事件通知系統(tǒng)。事件通知系統(tǒng)權(quán)衡對象定位及路由底層的可伸縮性,局部性,故障恢復(fù)能力以及自組織特性。然而,事件通知系統(tǒng)不支持基于內(nèi)容的路由。此外,事件通知系統(tǒng)為每個(gè)個(gè)人話題建立單獨(dú)的多點(diǎn)傳送樹。使用類似于反向路徑傳遞的模式建立這個(gè)多點(diǎn)傳送樹,其說明能夠在Y.Dalal and R.Metcalfe,Reverse Path Forwarding of Broadcast Packets,Commnunications of the ACM,21(12)1040-1048,1978中找到,因此在其上傳遞預(yù)訂消息的路由被反轉(zhuǎn)成稍后分配事件的路由。這使得不能向多點(diǎn)傳送樹增加冗余節(jié)點(diǎn)以便在不需要重建整個(gè)多點(diǎn)傳送樹的情況下分享負(fù)載。盡管系統(tǒng)通過建立新多點(diǎn)傳送樹能夠從多點(diǎn)傳送節(jié)點(diǎn)故障中恢復(fù),但是這以可靠,按順序,無間隙傳送為代價(jià)。應(yīng)用必須通過自身實(shí)現(xiàn)更高的服務(wù)質(zhì)量。此外,事件通知系統(tǒng)中的取消預(yù)訂必須延遲,直到第一事件被接收。
因此,需要提供一種保證消息的按順序、無間隙基于內(nèi)容的路由,同時(shí)也實(shí)現(xiàn)高性能,可伸縮性以及高可用性的發(fā)布/預(yù)訂系統(tǒng)。此外,發(fā)布/預(yù)訂系統(tǒng)不應(yīng)需要冗余路由成員之間的協(xié)定或協(xié)議,從而允許它們作為彼此的路由及處理候選來用于容錯(cuò)及負(fù)載分享。
發(fā)明內(nèi)容
本發(fā)明涉及發(fā)布/預(yù)訂系統(tǒng),以及通過系統(tǒng)傳播預(yù)訂和路由所發(fā)布消息的方法。發(fā)布/預(yù)訂系統(tǒng)包含產(chǎn)生消息的發(fā)布者以及在這些消息中注冊興趣的用戶。系統(tǒng)也包含在操作中通過冗余覆蓋網(wǎng)絡(luò)彼此連接以及通信的多個(gè)路由代理。每個(gè)代理能夠被設(shè)置為發(fā)布者連接代理,用戶連接代理,中間代理或其組合。每個(gè)發(fā)布者連接代理與一或多個(gè)發(fā)布者通信,并且每個(gè)用戶連接代理與一或多個(gè)用戶通信。用戶連接代理在操作中通過網(wǎng)絡(luò)經(jīng)由中間代理被連接到發(fā)布者連接代理。因此,通過發(fā)布代理向系統(tǒng)發(fā)布消息,并且通過預(yù)訂代理向系統(tǒng)傳播預(yù)訂。
覆蓋網(wǎng)絡(luò)能夠被視作通過鏈接束連接的單元(cell)的生成樹。單元是生成樹拓?fù)涞墓?jié)點(diǎn),并且可以是例如路由器或服務(wù)器。盡管每個(gè)代理可以是生成樹中節(jié)點(diǎn)之一,但是路由代理最好是邏輯代理。因此,每個(gè)節(jié)點(diǎn)可以具有與它相關(guān)的一或多個(gè)代理,并且每個(gè)代理可以存在于樹中不止一個(gè)節(jié)點(diǎn)中。類似地,每個(gè)鏈接束可以包含不止一個(gè)鏈接。作為生成樹拓?fù)涞囊徊糠?,?jié)點(diǎn)包含根節(jié)點(diǎn),中間節(jié)點(diǎn)以及葉節(jié)點(diǎn)。發(fā)布者連接代理位于根節(jié)點(diǎn),用戶連接代理位于葉節(jié)點(diǎn)。因此,發(fā)布者連接代理駐留的位置被稱作上游,用戶連接代理駐留的位置被稱作下湃。
本發(fā)明的系統(tǒng)和方法涉及基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng),其中每個(gè)用戶可以請求唯一消息組的傳送。本發(fā)明的系統(tǒng)和方法提供用于基于內(nèi)容的路由的預(yù)訂信息,以支持可伸縮,高性能,無間隙消息傳送。此外,本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)可以異步操作,即消除對冗余路由以及路由代理間協(xié)議或協(xié)定的需要。
每個(gè)發(fā)布的消息與標(biāo)識預(yù)訂的一組消息預(yù)訂Sm相關(guān),其中將經(jīng)過內(nèi)容匹配而應(yīng)該預(yù)訂來傳送每個(gè)發(fā)布的消息。發(fā)布者連接代理維護(hù)一組預(yù)訂,并且把合適的消息預(yù)訂組與和其相連的發(fā)布者發(fā)布的消息相關(guān)。與每個(gè)代理相關(guān)的是一組代理預(yù)訂Sb,該代理預(yù)訂組標(biāo)識這樣的預(yù)訂列表,其中代理針對該列預(yù)訂維護(hù)例如路由信息的信息以及涉及預(yù)訂的狀態(tài)的信息。當(dāng)向系統(tǒng)發(fā)布每個(gè)消息時(shí),通過覆蓋網(wǎng)絡(luò)樹以及通過代理,從發(fā)布者連接代理路由消息到用戶連接代理,以及在必要時(shí)通過一或多個(gè)中間代理進(jìn)行路由。用戶連接代理與和預(yù)訂相關(guān)的用戶通信,以及維護(hù)關(guān)于每個(gè)預(yù)訂的最新信息。每個(gè)用戶連接代理使用這個(gè)預(yù)訂信息傳遞發(fā)布的消息到用戶。
當(dāng)通過代理發(fā)布消息時(shí),基于當(dāng)前活動的預(yù)訂指引這些消息,使得適當(dāng)?shù)南⒖梢员宦酚傻叫枰切┫⒌挠脩暨B接代理以傳送給用戶。除內(nèi)容匹配的結(jié)果之外,通過針對經(jīng)由每個(gè)代理路由每個(gè)發(fā)布消息在該代理處把Sb與Sm相比較,實(shí)現(xiàn)通過代理的適當(dāng)路由。根據(jù)這個(gè)比較,尤其是根據(jù)對與消息相關(guān)并且能夠通過代理路由的預(yù)訂的識別,消息被路由到下游代理以及用戶。例如,當(dāng)比較指示包含在Sm內(nèi)的所有預(yù)訂也被包含在Sb內(nèi),即Sb等于Sm或是Sm的超集時(shí),則代理包含涉及消息到其下游代理和用戶的路由的充分信息,并且能夠把Sm中的預(yù)訂與Sb中的預(yù)訂進(jìn)行匹配,以及進(jìn)行相應(yīng)路由。如果Sb小于Sm,即如果Sm包含至少一個(gè)不包含在Sb中的預(yù)訂,則代理缺乏過濾以及路由Sm中的預(yù)訂的所有必要信息。因此,代理路由消息到其下游代理,而不考慮匹配結(jié)果。
由于例如發(fā)布/預(yù)訂系統(tǒng)中的等待時(shí)間的影響以及預(yù)訂隨時(shí)間的增加和清除,所以時(shí)間要素與Sm和Sb中的每個(gè)預(yù)訂相關(guān)。消息預(yù)訂組Sm被表示成包含最好是整數(shù)個(gè)的多個(gè)消息向量元素的消息向量Vm。每個(gè)消息向量元素表示發(fā)布/預(yù)訂系統(tǒng)中的單個(gè)用戶連接代理,并且包含與該用戶連接代理相關(guān)并且具有小于或等于向量元素的相關(guān)虛擬開始時(shí)間的Sm中所有活動預(yù)訂的標(biāo)識。代理預(yù)訂組Sb被表示成包含最好是整數(shù)個(gè)的多個(gè)代理向量元素的代理向量Vb。每個(gè)代理向量預(yù)訂單元表示發(fā)布/預(yù)訂系統(tǒng)中的單個(gè)用戶連接代理,并且包含與該用戶連接代理相關(guān)并且具有小于或等于向量元素的相關(guān)虛擬開始時(shí)間的Sb中所有活動預(yù)訂的標(biāo)識。
通過逐個(gè)元素地比較Vm與Vb,實(shí)現(xiàn)Sm和Sb的比較,即比較每個(gè)消息向量元素中的活動預(yù)訂和每個(gè)代理向量元素中的活動預(yù)訂。這個(gè)比較被稱為充分性測試,即代理是否充分了解用于路由的所發(fā)布消息所需的所有預(yù)訂。如果比較指示包含在消息向量元素中的所有活動預(yù)訂也被包含在代理向量元素中,則與Vb的代理能夠執(zhí)行預(yù)訂匹配并且基于此匹配進(jìn)行路由。如果比較指示消息向量元素包含至少一個(gè)不包含在代理向量元素中的預(yù)訂,則消息被路由到與Vb相關(guān)的代理下游的所有代理。當(dāng)比較Vm和Vb時(shí),比較消息向量和代理單元以確認(rèn)代理向量元素遲于或等于對應(yīng)消息向量元素。通過確認(rèn)代理向量元素遲于或等于消息代理單元,系統(tǒng)確認(rèn)位于代理處的預(yù)訂至少與和發(fā)布消息相關(guān)的預(yù)訂一樣新。因此,系統(tǒng)避免使用舊預(yù)訂信息來路由較新的發(fā)布消息。
通常,虛擬開始時(shí)間由其連接代理分配給新預(yù)訂。每個(gè)用戶代理維護(hù)一時(shí)鐘,例如單調(diào)的,整數(shù)取值的計(jì)數(shù)器。用戶通過相關(guān)的預(yù)訂連接代理把新預(yù)訂引入到本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)中,并且這些預(yù)訂代理根據(jù)其時(shí)鐘值分配虛擬開始時(shí)間給新的預(yù)訂。因此,活動預(yù)訂具有等于或早于包含在其相關(guān)代理中的時(shí)鐘的當(dāng)前值的虛擬開始時(shí)間。活動預(yù)訂是自從當(dāng)前時(shí)間以來尚未取消預(yù)訂的那些預(yù)訂。
每個(gè)用戶連接代理的消息向量元素指示與消息向量相關(guān)的發(fā)布消息應(yīng)當(dāng)被傳送給其向量虛擬開始時(shí)間早于或等于有關(guān)預(yù)訂連接代理的對應(yīng)消息向量元素的所有活動預(yù)訂。因而,與發(fā)布消息相關(guān)的Vm向量形成消息以及該消息所路由經(jīng)過的代理之間的綁定契約(bindingcontract)。相對于具有早于有關(guān)連接代理的對應(yīng)消息向量元素的虛擬開始時(shí)間的所有預(yù)訂,代理匹配并且過濾發(fā)布消息。然而,如果代理缺乏關(guān)于與發(fā)布消息相關(guān)的預(yù)訂的信息,則該代理不基于匹配以及過濾路由所發(fā)布消息。相反,代理傳遞所發(fā)布消息給所有下游代理。
本發(fā)明的方法和系統(tǒng)使用覆蓋關(guān)系合并或聚集預(yù)訂。通常,每個(gè)預(yù)訂能夠被定義成多個(gè)邏輯合取(logical conjunction)。多個(gè)合取中的每個(gè)合取定義或指定與預(yù)訂相關(guān)的一組發(fā)布消息。這些邏輯合取被聚集,使得重復(fù)合取能夠被消除,因此降低每個(gè)代理在發(fā)布消息的匹配以及路由期間必須分析或考慮的合取的數(shù)量。預(yù)訂的聚集可以在整個(gè)發(fā)布/預(yù)訂系統(tǒng)中出現(xiàn)。例如,當(dāng)新預(yù)訂被加入系統(tǒng)時(shí),預(yù)訂的邏輯合取可以在用戶連接代理處被聚集。可選地,當(dāng)在系統(tǒng)中增加并且傳播預(yù)訂時(shí),與預(yù)訂相關(guān)的邏輯合取可以在所有代理處被聚集。
通過在系統(tǒng)中的一或多個(gè)代理處維護(hù)有向非循環(huán)圖(DAG)來促進(jìn)聚集。每個(gè)DAG表示與在其處維護(hù)DAG的代理相關(guān)的Sb中的每個(gè)預(yù)訂的邏輯合取。DAG的維護(hù)包含向DAG增加新合取以及從DAG中消除到期的合取。由于每個(gè)DAG沿其分支傳遞,所以可以從DAG中省略傳遞弧(transitive arc)。當(dāng)維護(hù)DAG時(shí),覆蓋關(guān)系被用于識別未覆蓋的合取,其定義不是由其它合取定義的任何其它發(fā)布消息組的子集的未覆蓋發(fā)布消息組。因此,未覆蓋的合取定義唯一發(fā)布消息組。此外,這些覆蓋關(guān)系標(biāo)識定義了作為未覆蓋發(fā)布消息組之一的子集的覆蓋發(fā)布消息組的被覆蓋合取。因此,被覆蓋合取未定義或標(biāo)識仍未由另一個(gè)合取標(biāo)識的發(fā)布消息。
由于每個(gè)用戶連接代理維護(hù)一時(shí)鐘并且使用這個(gè)時(shí)鐘向預(yù)訂分配虛擬開始時(shí)間,所以虛擬開始時(shí)間的分配與預(yù)訂的聚集相協(xié)調(diào)。當(dāng)未覆蓋的合取被加入DAG時(shí),被加入DAG的每個(gè)未覆蓋的合取被分配虛擬開始時(shí)間,其等于與代理相關(guān)的時(shí)鐘的當(dāng)前值。在代理傳播預(yù)訂變化時(shí),推進(jìn)時(shí)鐘時(shí)間。被覆蓋合取被分配虛擬開始時(shí)間,它是與其覆蓋合取相關(guān)的虛擬開始時(shí)間的最小值。由于每個(gè)預(yù)訂可以包含各種被覆蓋的和未覆蓋的合取,不同虛擬開始時(shí)間可以關(guān)聯(lián)于相同預(yù)訂的不同合取。總之,與每個(gè)活動預(yù)訂相關(guān)的虛擬開始時(shí)間被設(shè)置成等于包含在活動預(yù)訂中的合取的被覆蓋和未覆蓋合取虛擬開始時(shí)間的最大值,即最近的時(shí)間。
通過系統(tǒng)中的一或多個(gè)附加代理傳播來自用戶連接代理的DAG。這個(gè)傳播可以基于預(yù)定時(shí)間間隔或響應(yīng)DAG中的變化而進(jìn)行。DAG的傳播包含向DAG中的未覆蓋的或根合取傳播任何變化,從而標(biāo)識傳播DAG的代理和可能節(jié)點(diǎn)或單元,標(biāo)識在變化出現(xiàn)時(shí)包含在所標(biāo)識的代理中的時(shí)鐘的當(dāng)前時(shí)間,標(biāo)識要從DAG刪除的未覆蓋的或根合取,標(biāo)識要加入DAG的未覆蓋的或根合取,并且提供約束向量。約束向量是與接收DAG中的傳播變化的代理相關(guān)的代理向量的值的約束。約束向量的形式類似于代理向量,其中它是虛擬時(shí)間的向量,每個(gè)代理有一個(gè)能夠與用戶關(guān)聯(lián)的元素。例如,約束向量標(biāo)識接收代理的代理向量中的預(yù)訂的最舊可接受時(shí)間或虛擬開始時(shí)間,以便使接收代理能夠接受并且處理變化。如果與接收代理相關(guān)的代理向量過舊或過期,則它可能錯(cuò)過處理當(dāng)前DAG變化所需的中間變化。
在接收了所傳播的DAG變化和相關(guān)約束向量的情況下,系統(tǒng)確認(rèn)與接收代理相關(guān)的代理向量滿足約束向量。如果滿足約束向量,則應(yīng)用對DAG的變化并且相應(yīng)更新代理向量,諸如例如推進(jìn)代理向量中的相應(yīng)值。如果未滿足約束向量,則不能應(yīng)用DAG變化。然而,系統(tǒng)可以向具有最近狀態(tài)的發(fā)送代理請求更新。
預(yù)訂可以被傳播為盡最大努力的,逐轉(zhuǎn)發(fā)段的傳播。如果冗余代理存在于給定轉(zhuǎn)發(fā)段中,則無需在冗余代理間取得一致便能進(jìn)一步傳播預(yù)訂消息。因此,每個(gè)代理即使在它了解預(yù)訂之前,也可以處理預(yù)訂的發(fā)布消息,這使得故障恢復(fù)(failover)非常容易。
圖1是基于本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)的實(shí)施例的示意說明;圖2是在發(fā)布/預(yù)訂系統(tǒng)中使用的代理的實(shí)施例的示意說明;
圖3是代理使用的有向非循環(huán)圖的實(shí)施例的示意說明;圖4是代理使用的有向非循環(huán)圖的另一個(gè)實(shí)施例的示意說明;圖5是在處理預(yù)訂更新之前代理處有向非循環(huán)圖的實(shí)施例的示意說明;圖6是在處理預(yù)訂更新之后代理處有向非循環(huán)圖的實(shí)施例的示意說明;圖7是根據(jù)本發(fā)明圖解預(yù)訂傳播方法的實(shí)施例的流程圖;并且圖8是圖解預(yù)訂傳播方法的另一個(gè)實(shí)施例的流程圖。
具體實(shí)施例方式
根據(jù)本發(fā)明的基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng)的實(shí)施例包含一或多個(gè)發(fā)布者,其通過包含多個(gè)代理的網(wǎng)絡(luò)投送或發(fā)布消息到一或多個(gè)用戶。適當(dāng)網(wǎng)絡(luò)包含局域網(wǎng)(LAN),諸如因特網(wǎng)或萬維網(wǎng)的廣域網(wǎng)(WAN),專用區(qū)域網(wǎng),安全區(qū)域網(wǎng),公用交換電話網(wǎng)(PSTN)及其組合。網(wǎng)絡(luò)最好是包含多個(gè)連接的單元或節(jié)點(diǎn)的覆蓋網(wǎng)絡(luò)。代理被布置在一或多個(gè)這些節(jié)點(diǎn)處,并且通過網(wǎng)絡(luò)通信。多個(gè)代理至少部分基于發(fā)布消息的內(nèi)容以及用戶提供的過濾謂詞(filtering predicate),向用戶提供發(fā)布消息的過濾以及路由。因此,存在通過多個(gè)代理從每個(gè)發(fā)布者到每個(gè)用戶的冗余路由。本發(fā)明允許發(fā)布/預(yù)訂系統(tǒng)利用這個(gè)冗余來通過發(fā)布/預(yù)訂系統(tǒng)傳送所發(fā)布消息。然而,本發(fā)明能夠在沒有這個(gè)冗余的情況下操作。
根據(jù)本發(fā)明的方法通過發(fā)布/預(yù)訂系統(tǒng)傳播預(yù)訂,使得不僅支持發(fā)布消息的盡最大努力傳送,而且支持也稱作可靠傳送的發(fā)布消息的按順序、無間隙傳送。發(fā)布/預(yù)訂系統(tǒng)能夠包含多個(gè)發(fā)布消息流。在可靠傳送中,發(fā)布/預(yù)訂系統(tǒng)在每個(gè)預(yù)訂的每個(gè)發(fā)布消息流中找到開始發(fā)布消息,并且從發(fā)布消息流中的該發(fā)布消息按照與原始發(fā)布消息流一致的順序傳送所有并且匹配于預(yù)訂的那些發(fā)布消息。
為了簡單,針對從單個(gè)發(fā)布消息流的可靠傳送提出實(shí)施例。然而,發(fā)布/預(yù)訂系統(tǒng)內(nèi)的每個(gè)代理能夠處理多個(gè)同時(shí)發(fā)布消息流,并且能夠針對每個(gè)發(fā)布消息流執(zhí)行不同過濾和路由職責(zé)。當(dāng)考慮單個(gè)發(fā)布消息流時(shí),能夠根據(jù)這些路由器對發(fā)布消息流承擔(dān)的功能來區(qū)分單個(gè)消息流所路由經(jīng)過的代理。這些功能包含但不限于充當(dāng)發(fā)布者駐留或連接代理(PB),充當(dāng)中間或路由代理(IB),以及充當(dāng)用戶駐留或連接代理(SB)。PB是首先或立即與發(fā)布者聯(lián)系的代理,并且駐留由該發(fā)布者產(chǎn)生的發(fā)布消息流。類似地,SB是首先或立即與用戶聯(lián)系的代理,并且駐留用戶,包含從用戶接受預(yù)訂并且傳播那些預(yù)訂到發(fā)布/預(yù)訂系統(tǒng)。任意數(shù)量的IB能夠存在于每個(gè)PB和每個(gè)SB之間。這些IB執(zhí)行發(fā)布消息的路由和過濾,以及預(yù)訂的傳播。在一個(gè)實(shí)施例中,每個(gè)代理是具有單個(gè)功能的獨(dú)立實(shí)體。在另一個(gè)實(shí)施例中,任意一個(gè)代理執(zhí)行兩個(gè)或更多功能。最好是,每個(gè)代理是邏輯代理,或是與發(fā)布/預(yù)訂系統(tǒng)中的節(jié)點(diǎn)或單元相關(guān)的構(gòu)造,并且表示單個(gè)邏輯代理或多個(gè)邏輯代理。這些節(jié)點(diǎn)能夠表示路由器,服務(wù)器,計(jì)算機(jī)或發(fā)布/預(yù)訂系統(tǒng)內(nèi)覆蓋網(wǎng)絡(luò)中的其它硬件。在一個(gè)實(shí)施例中,每個(gè)代理關(guān)聯(lián)于單個(gè)節(jié)點(diǎn)。在另一個(gè)實(shí)施例中,每個(gè)代理參與多個(gè)節(jié)點(diǎn)。例如,每個(gè)代理可以是在計(jì)算機(jī)上運(yùn)行的進(jìn)程或應(yīng)用程序,或?yàn)槭瓜到y(tǒng)故障導(dǎo)致的延遲最小,可以是多個(gè)計(jì)算機(jī)內(nèi)以分布方式運(yùn)行的冗余進(jìn)程集群。
開始參考圖1,其中圖解了基于本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)10的實(shí)施例。發(fā)布/預(yù)訂系統(tǒng)10包含多個(gè)發(fā)布者101a,101b,101c。每個(gè)發(fā)布者能通過發(fā)布/預(yù)訂系統(tǒng)10發(fā)布消息或消息流。系統(tǒng)也包含多個(gè)用戶105a,105b,105c,105d,105e,即發(fā)布/預(yù)訂系統(tǒng)10中的用戶或客戶。每個(gè)用戶能把標(biāo)識用戶想接收的一或多個(gè)發(fā)布消息組的一或多個(gè)預(yù)訂建立并且引入系統(tǒng)10中。每個(gè)用戶也能夠接收發(fā)布消息。布置在用戶和發(fā)布者之間的是多個(gè)代理12。如圖所示,每個(gè)代理12關(guān)聯(lián)于一或多個(gè)節(jié)點(diǎn),N11,N12,N13,N21,N22,N31,在系統(tǒng)10中形成用戶和發(fā)布者之間冗余代理的覆蓋網(wǎng)絡(luò)。節(jié)點(diǎn)表示路由器,服務(wù)器和網(wǎng)絡(luò)內(nèi)的其它設(shè)備。
每個(gè)代理12可以執(zhí)行系統(tǒng)10內(nèi)的一或多個(gè)功能。如圖所示,這些功能包含PB 102,SB 106a,106b,106e和IB 109a,109b,109c,109d。發(fā)布者101a,101b,101c通過一或多個(gè)PB 102經(jīng)由發(fā)布者連接103a,103b,103c連接到發(fā)布/預(yù)訂系統(tǒng)10。尤其是,發(fā)布者連接在發(fā)布者和在節(jié)點(diǎn)N31處布置的PB 102之間工作。適當(dāng)?shù)陌l(fā)布者連接包含用于傳送所發(fā)送信息的任意類型的通信介質(zhì),包含無線通信鏈接,諸如紅外,射頻,衛(wèi)星和微波,以及專用通信連接,例如電話,電纜和光纖。最好是,發(fā)布者連接是可靠的先入先出(FIFO)連接,包含但不限于傳送控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)套接字連接。
用戶105a,105b,105c,105d,105e通過一或多個(gè)用戶連接108a,108b,108c,108d,108e連接到發(fā)布/預(yù)訂系統(tǒng)10。尤其是,用戶連接在一或多個(gè)用戶105a,105b,105c,105d,105e和一或多個(gè)SB 106a,106b,106c之間工作。適當(dāng)用戶連接與發(fā)布者連接相同。PB 102和SB 106a,106b,106c通過代理間連接111a,111b,111c,111d,111e,111f,111g,111h,111i,111j連接到多個(gè)IB。在一個(gè)實(shí)施例中,中間代理連接利用FIFO協(xié)議,例如TCP/IP。最好是,由于本發(fā)明的傳送協(xié)議承受連接故障和消息重新排序,所以代理間連接利用更快速,可靠性較低的協(xié)議,因而提高系統(tǒng)處理量。
如圖所示,系統(tǒng)10中的代理12的排列構(gòu)成邏輯樹結(jié)構(gòu)。樹的根節(jié)點(diǎn)位于發(fā)布者附近并且關(guān)聯(lián)于PB。葉節(jié)點(diǎn)位于用戶附近并且關(guān)聯(lián)于SB。IB構(gòu)成樹結(jié)構(gòu)中的中間節(jié)點(diǎn)。代理間連接形成樹結(jié)構(gòu)的分支。引入系統(tǒng)10中的消息通過樹中的IB從根節(jié)點(diǎn)發(fā)布到葉節(jié)點(diǎn)。預(yù)訂通過樹中的IB從葉節(jié)點(diǎn)向上傳播到根節(jié)點(diǎn)?;趥鞑サ念A(yù)訂,在每個(gè)代理處提供發(fā)布消息的過濾和路由,以向SB和用戶提供所期望消息的精確以及可靠的傳送。
在一個(gè)實(shí)施例中,每個(gè)發(fā)布消息關(guān)聯(lián)于標(biāo)識預(yù)訂的消息預(yù)訂組Sm,其中將針對該預(yù)訂來傳送每個(gè)發(fā)布消息。每個(gè)PB針對其連接的發(fā)布者維護(hù)預(yù)訂組,并且產(chǎn)生由這些連接的發(fā)布者發(fā)布的每個(gè)消息的適當(dāng)Sm。與每個(gè)IB和SB相關(guān)的是標(biāo)識預(yù)訂列表的代理預(yù)訂組Sb,其中每個(gè)代理針對該列預(yù)訂維護(hù)例如路由和傳送信息的信息,以及涉及預(yù)訂的狀態(tài)的信息。當(dāng)通過系統(tǒng)發(fā)布每個(gè)消息時(shí),通過覆蓋網(wǎng)絡(luò)樹從PB路由消息到一或多個(gè)SB,并且可能通過一或多個(gè)IB。每個(gè)SB維護(hù)關(guān)于其連接的用戶的每個(gè)預(yù)訂的最新和完整的信息。每個(gè)SB使用這個(gè)預(yù)訂信息傳遞發(fā)布消息到用戶。
當(dāng)通過代理發(fā)布消息時(shí),基于當(dāng)前活動預(yù)訂指引這些消息,使得適當(dāng)消息可以被路由到需要那些消息的用戶連接代理以傳送給用戶。通過在每個(gè)代理處針對通過該代理路由的每個(gè)發(fā)布消息比較Sb與Sm,實(shí)現(xiàn)通過代理的適當(dāng)路由。根據(jù)這個(gè)比較,尤其是根據(jù)與消息相關(guān)并且能夠通過代理路由的預(yù)訂的識別,消息被路由到下游代理和用戶。例如,當(dāng)比較指示包含在Sm之內(nèi)的所有活動預(yù)訂也被包含在Sb內(nèi),即Sb等于Sm或是Sm的超集時(shí),代理包含涉及消息到其下游代理和用戶的路由的充分信息,并且能夠使用Sb中的預(yù)訂匹配發(fā)布消息并且進(jìn)行相應(yīng)路由。如果Sb小于Sm,即如果Sm包含至少一個(gè)不包含在Sb中的預(yù)訂,則代理缺乏過濾和路由Sm中的預(yù)訂的所有必要信息。因此,代理路由Sm中的所有消息到所有其下游代理。
除識別所期望的消息類型和期望該消息的用戶之外,本發(fā)明把時(shí)間要素與每個(gè)預(yù)訂相關(guān)聯(lián)。在一個(gè)實(shí)施例中,虛擬開始時(shí)間和虛擬結(jié)束時(shí)間關(guān)聯(lián)于每個(gè)預(yù)訂。這些虛擬開始時(shí)間和虛擬結(jié)束時(shí)間傳遞預(yù)訂和消息間的時(shí)間關(guān)系和相關(guān)性。每個(gè)SB維護(hù)一時(shí)鐘。適當(dāng)?shù)臅r(shí)鐘包含24小時(shí)時(shí)鐘,向上計(jì)數(shù)定時(shí)器,向下計(jì)數(shù)定時(shí)器,累加器和包含整數(shù)取值計(jì)數(shù)器的計(jì)數(shù)器。最好是,時(shí)鐘是具有總是增加的值的非零整數(shù)取值計(jì)數(shù)器。時(shí)鐘值最好被單調(diào)地分配給預(yù)訂。虛擬開始時(shí)間被代理之一分配給每個(gè)預(yù)訂。在一個(gè)實(shí)施例中,每個(gè)SB分配虛擬開始時(shí)間給由與SB相關(guān)的用戶提交的新預(yù)訂。虛擬開始時(shí)間等于在接收新預(yù)訂時(shí)包含在SB內(nèi)的時(shí)鐘的當(dāng)前值。
具有虛擬開始時(shí)間的例如包含在Sb和Sm內(nèi)的預(yù)訂的預(yù)訂的組合定義與每個(gè)發(fā)布消息相關(guān)的預(yù)訂和在每個(gè)代理處維護(hù)的預(yù)訂的向量表示。在一個(gè)實(shí)施例中,消息預(yù)訂組Sm被表示成包含多個(gè)消息向量元素的消息向量Vm。每個(gè)消息向量元素表示發(fā)布/預(yù)訂系統(tǒng)中的單個(gè)SB,并且包含與該SB相關(guān)并且具有小于或等于向量元素的值的相關(guān)虛擬開始時(shí)間的Sm中所有活動預(yù)訂的標(biāo)識。代理預(yù)訂組Sb被表示成包含多個(gè)代理向量元素的代理向量Vb。每個(gè)代理向量元素表示發(fā)布/預(yù)訂系統(tǒng)中的單個(gè)SB,并且包含與該SB相關(guān)并且具有小于或等于向量元素的值的相關(guān)虛擬開始時(shí)間的Sb中所有活動預(yù)訂的標(biāo)識。最好在每個(gè)代理處維護(hù)代理向量Vb。
通過和預(yù)訂一起傳播虛擬開始時(shí)間,路由代理不僅維護(hù)關(guān)于來自網(wǎng)絡(luò)的每個(gè)鄰近部分的預(yù)訂客戶所興趣的數(shù)據(jù)消息的類型的信息,而且維護(hù)有關(guān)什么代理了解來自鄰近網(wǎng)絡(luò)的客戶的預(yù)訂的短摘要。
當(dāng)數(shù)據(jù)消息由發(fā)布者之一通過關(guān)聯(lián)的PB發(fā)布時(shí),Vm被分配給發(fā)布的消息。當(dāng)消息通過系統(tǒng)被路由或傳送時(shí),每個(gè)代理針對位于下游的SB比較其Vb和與消息相關(guān)的Vm。如果對于所有下游SB,Vb元素至少與Vm元素相同,則代理可以使用匹配和過濾來路由消息。因此,如果匹配指示不存在代理下游的匹配用戶,則代理過濾出消息并且不發(fā)送消息給下游。然而,如果對于一些下游SB,Vb小于Vm,即如果Vm包含至少一個(gè)不包含在Vb中的元素,則代理不考慮匹配地發(fā)送消息到所有下游代理。因此,通過比較Vb和Vm來實(shí)現(xiàn)Sb和Sm的比較。
基于通過系統(tǒng)從用戶向上傳播到發(fā)布者的預(yù)訂信息,在每個(gè)代理處建立并且維護(hù)Vb。除傳播預(yù)訂自身的標(biāo)識以及與預(yù)訂相關(guān)的虛擬開始時(shí)間外,還提供約束向量。通過比較這個(gè)約束向量和由代理維護(hù)的Vb,代理確定它的Vb在約束向量中示出的針對用戶連接代理的元素方面是否等于約束向量,即在代理處維護(hù)的預(yù)訂信息是否是最新的。如果Vb的元素對于這些用戶連接代理與約束向量相同,則在代理處維護(hù)的預(yù)訂信息包含足夠新的信息以接受并且應(yīng)用與傳播的預(yù)訂相關(guān)的任何變化。然而,如果Vb不滿足約束向量,則代理不能應(yīng)用預(yù)訂變化。因此,Vb需要在接受最近傳播的預(yù)訂之前被更新。
如圖2所示,圖解了包含一或多個(gè)代理12的發(fā)布/預(yù)訂系統(tǒng)內(nèi)的節(jié)點(diǎn)或單元150的實(shí)施例。節(jié)點(diǎn)150可以關(guān)聯(lián)于包含PB,SB,IB及其組合的任何類型的代理。如圖所示,節(jié)點(diǎn)150包含邏輯處理器152,計(jì)算機(jī)可讀存儲介質(zhì)154以及一或多個(gè)輸入/輸出(I/O)設(shè)備156。適當(dāng)邏輯處理器包含但不限于中央處理單元(CPU)和微處理器。盡管圖解了單個(gè)邏輯處理器,但是每個(gè)節(jié)點(diǎn)150可以包含多個(gè)邏輯處理器,并且與處理設(shè)備相關(guān)的單元可以被其它處理設(shè)備共享。適當(dāng)計(jì)算機(jī)可讀存儲介質(zhì)包含存儲器以及與處理器或CPU相關(guān)的其它計(jì)算機(jī)可讀介質(zhì),其包含但不限于隨機(jī)訪問存儲器(RAM),只讀存儲器(ROM),固定存儲介質(zhì)(諸如硬盤驅(qū)動器),可移動存儲介質(zhì)(諸如軟盤),快擦寫存儲器及其組合。適當(dāng)I/O設(shè)備包含但不限于鍵盤,鼠標(biāo),網(wǎng)絡(luò)接口卡,打印機(jī),監(jiān)視器及其組合。
相應(yīng)地,在一個(gè)實(shí)施例中,包含用于執(zhí)行根據(jù)本發(fā)明的方法的計(jì)算機(jī)可執(zhí)行指令或代碼的應(yīng)用程序或其軟件構(gòu)件被存儲在一或多個(gè)計(jì)算機(jī)可讀存儲介質(zhì)154中。當(dāng)處理器152執(zhí)行計(jì)算機(jī)可執(zhí)行代碼時(shí),處理器152執(zhí)行根據(jù)本發(fā)明的方法。可選地,計(jì)算機(jī)可執(zhí)行代碼可以被存儲在計(jì)算機(jī)可讀介質(zhì)中,并且由包含在發(fā)布/預(yù)訂系統(tǒng)10的邏輯樹內(nèi)的節(jié)點(diǎn)外部并且與其無關(guān)的處理器執(zhí)行。節(jié)點(diǎn)150的適當(dāng)設(shè)備包含但不限于個(gè)人計(jì)算機(jī),大型計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)器。
當(dāng)通過發(fā)布/預(yù)訂系統(tǒng)10中的代理12傳播預(yù)訂時(shí),這些預(yù)訂被合并或聚集??梢允褂媚軌蚝喜㈩A(yù)訂并且同時(shí)維護(hù)用于發(fā)布消息的路由和傳送的必要信息的任何方法。例如,通過執(zhí)行內(nèi)容過濾符的布爾表達(dá)式的析取范式(DNF)變換,能夠把每個(gè)預(yù)訂表示成合取過濾符(conjunctive filters)的析取(disjunction)。在一個(gè)實(shí)施例中,合并和聚集方法利用預(yù)訂的合取表達(dá)式。最好是,聚集方法利用合取過濾符間的覆蓋關(guān)系。例如,當(dāng)代理接收包含多個(gè)合取的新傳播的預(yù)訂時(shí),代理相對于與由代理預(yù)先接收并且在相關(guān)Vb中表示的預(yù)訂相關(guān)的所有現(xiàn)有合取檢查每個(gè)新合取,以確定由任何新合取定義的發(fā)布消息組是否被任何現(xiàn)有合取覆蓋。在匹配新合取的所有發(fā)布消息也匹配現(xiàn)有合取的情況下,新合取被現(xiàn)有合取覆蓋。
參考圖3-6,每個(gè)代理處的合取表現(xiàn)為具有從覆蓋合取繪制到被覆蓋合取的邊的結(jié)構(gòu)中的節(jié)點(diǎn)。因此,在每個(gè)代理處維護(hù)的預(yù)訂,即包含在Sb或Vb中的預(yù)訂,由部分有序有向非循環(huán)圖(DAG)表示,其也可以被稱為合取DAG′。未由任何其它合取覆蓋的合取被稱作未覆蓋的合取,并且被表示成DAG中的根節(jié)點(diǎn)。因此,每個(gè)DAG內(nèi)的邏輯合取被聚集,使得被覆蓋合取不需要被傳播到上游代理,因而降低每個(gè)代理在發(fā)布消息的匹配和路由期間必須分析或考慮的合取的數(shù)量。由于每個(gè)DAG沿其分支傳遞,所以可以從DAG省略傳遞弧。在一個(gè)實(shí)施例中,例如當(dāng)新預(yù)訂被引入系統(tǒng)10時(shí),在每個(gè)SB處執(zhí)行聚集。在另一個(gè)實(shí)施例中,當(dāng)增加預(yù)訂并且通過系統(tǒng)傳播預(yù)訂時(shí),在每個(gè)代理12處遍及發(fā)布/預(yù)訂系統(tǒng)10地執(zhí)行預(yù)訂的聚集。
每個(gè)DAG表示與在其處維護(hù)DAG的代理相關(guān)的Sb中的每個(gè)預(yù)訂的邏輯合取。維護(hù)每個(gè)DAG包含向DAG增加新合取以及從DAG消除到期的合取。當(dāng)維護(hù)每個(gè)DAG時(shí),覆蓋關(guān)系被用于識別未覆蓋的合取,其定義不是由其它合取定義的發(fā)布消息的任何其它組的子集的未覆蓋的發(fā)布消息組。因此,未覆蓋的合取定義唯一發(fā)布消息組。此外,這些覆蓋關(guān)系標(biāo)識了被覆蓋合取,其定義作為未覆蓋發(fā)布消息組之一的子集的被覆蓋發(fā)布消息組。因此,被覆蓋合取未定義或標(biāo)識尚未由另一個(gè)合取標(biāo)識的發(fā)布消息。未覆蓋合取被維護(hù)并且傳播到在這個(gè)代理的上游的代理,并且例如SB中在維護(hù)的同時(shí)的被覆蓋合取未通過系統(tǒng)中的代理向上游傳播。
參考圖3和4,圖解了在向DAG增加新預(yù)訂之前和之后SB1106a的DAG 200(圖1)。如圖3所示,在增加新預(yù)訂之前,DAG包含現(xiàn)有合取過濾符201。如圖所示,現(xiàn)有合取過濾符是″Stock=nyse:ibm″。現(xiàn)有合取過濾符201關(guān)聯(lián)于具有包含現(xiàn)有合取201的內(nèi)容過濾符合取的至少一個(gè)預(yù)訂105a。從也與SB1相關(guān)的第二個(gè)用戶105b把新預(yù)訂引入系統(tǒng)10。如圖所示,新預(yù)訂是″Stock=nyse:t&p>19或Stock=nyse:ibm&p>90或Stock=nasdaq:msft″。這個(gè)新預(yù)訂包含第一新預(yù)訂合取252,″Stock=nyse:ibm&p>90″,第二新預(yù)訂合取253,″Stock=nyse:t&p>19″,并且第三新預(yù)訂合取254,″Stock=nasdaq:msft″。把這些新預(yù)訂合取252,253,254加入SB1的DAG 200,基于覆蓋關(guān)系進(jìn)行聚集。在圖4中圖解更新的DAG 200。
第二和第三新合取253,254定義未包含在由現(xiàn)有合取201定義的發(fā)布消息組內(nèi)的發(fā)布消息組。因此,把第二和第三新合取253,254被加入DAG 200以作為根節(jié)點(diǎn)。然而,由于由″Stock=nyse:ibm&p>90″定義的組中的每個(gè)發(fā)布消息也被包含在由″Stock=nyse:ibm″定義的發(fā)布消息組中,所以第一新合取252被現(xiàn)有合取覆蓋。因此,第一新預(yù)訂252被加入DAG 200以作為現(xiàn)有合取201的子葉節(jié)點(diǎn)?,F(xiàn)有合取201和第一新合取252之間的有向邊255表示此覆蓋關(guān)系。
除分析每個(gè)新預(yù)訂的覆蓋關(guān)系并且基于這些關(guān)系把新預(yù)訂集成到DAG中之外,每個(gè)SB根據(jù)在SB處維護(hù)的時(shí)鐘的值向新預(yù)訂分配虛擬開始時(shí)間。在一個(gè)實(shí)施例中,虛擬開始時(shí)間被分配給新預(yù)訂中的每個(gè)合取,并且這些時(shí)間的最大值被作為新預(yù)訂的虛擬開始時(shí)間。如圖3和4所示,與現(xiàn)有預(yù)訂相關(guān)的現(xiàn)有合取201已經(jīng)被分配等于時(shí)鐘值1的虛擬開始時(shí)間256。與SB1相關(guān)的時(shí)鐘值已經(jīng)遞增到值2。當(dāng)在SB1處增加新預(yù)訂時(shí),第一新合取252被現(xiàn)有合取201覆蓋,并且分配等于現(xiàn)有合取虛擬開始時(shí)間256(為1)的虛擬開始時(shí)間257。通常,對于新的被覆蓋合取,所分配的虛擬開始時(shí)間是所有其直接父結(jié)點(diǎn)的虛擬開始時(shí)間的最小值。第二和第三新合取未被覆蓋,并且被分配等于在SB1處的時(shí)鐘的當(dāng)前值(為2)的虛擬開始時(shí)間258,259。因而,新預(yù)訂被分配等于2的虛擬開始時(shí)間,并且與SB1相關(guān)的時(shí)鐘在SB1傳播此預(yù)訂變化時(shí)遞增到值3。此虛擬開始時(shí)間被系統(tǒng)用于確定發(fā)布消息流中的起始點(diǎn),以基于新預(yù)訂來傳送消息。
如圖所示,由SB1維護(hù)的時(shí)鐘是整數(shù)值的計(jì)數(shù)器。此SB保證此時(shí)鐘的最高值的單調(diào)性,即使從系統(tǒng)崩潰中恢復(fù)也是如此。保證單調(diào)性的適當(dāng)方法包含使用單調(diào)的系統(tǒng)時(shí)鐘并且對最高虛擬時(shí)鐘時(shí)間保持上界。根據(jù)本發(fā)明的時(shí)鐘值最好不溢出,這對于64位或更長的時(shí)鐘值是合理的。
再次參考圖1,SB 106a,106b,106c通過系統(tǒng)10向PB傳播預(yù)訂。此預(yù)訂信息包含新預(yù)訂的增加,以及清除在DAG中具有未覆蓋合取的到期預(yù)訂?;谀承┛膳渲脳l件來傳播此信息。在一個(gè)實(shí)施例中,基于預(yù)定時(shí)間間隔傳播預(yù)訂信息。在另一個(gè)實(shí)施例中,如果在一個(gè)周期內(nèi)已經(jīng)接收至少一個(gè)新預(yù)訂增加或清除請求,則SB周期性地傳播變化。最好是,在每次接收增加或消除預(yù)訂的請求時(shí),并且在預(yù)訂的增加或清除改變其DAG中的根節(jié)點(diǎn)的情況下,SB傳播預(yù)訂信息。在一個(gè)實(shí)施例中,當(dāng)SB傳播改變到DAG時(shí),SB傳播變化和其當(dāng)前時(shí)鐘值,并且增加其時(shí)鐘值。所傳播的變化向IB 109a,109b指示有關(guān)要執(zhí)行的操作,以便這些IB能夠把發(fā)布數(shù)據(jù)消息與當(dāng)前預(yù)訂進(jìn)行匹配。
在一個(gè)實(shí)施例中,通過指示從DAG刪除或向DAG加入的根合取節(jié)點(diǎn),計(jì)算遞增變化。因此,在沒有要增加或消除的根合取節(jié)點(diǎn)的情況下,不需要響應(yīng)預(yù)訂的增加或清除而傳播任何預(yù)訂信息。如圖3和4所示,由于只覆蓋″Stock=nyse:ibm&p>90″并且未覆蓋″stock=nyse:t&p>19″和″stock=nasdaq:msft″,所以包含″Stock=nyse:t&p>19or Stock=nyse:ibm&p>90或Stock=nasdaq:msft″的新預(yù)訂使得預(yù)訂信息從SB1傳播。所傳播的預(yù)訂信息包含含有發(fā)出SB的標(biāo)識的信息,約束向量的值,和加入合取到DAG或從DAG刪除合取所針對的指令。對于這個(gè)實(shí)施例,預(yù)訂信息中的約束向量指示接收代理在它處理具有小于或等于1的虛擬開始時(shí)間的所傳播的預(yù)訂信息之后,處理這個(gè)預(yù)訂信息。因此,約束向量規(guī)定預(yù)訂更新的適當(dāng)序列,以及后續(xù)更新之間相關(guān)性的保持。如果在新預(yù)訂的增加之后,SB1從用戶接收附加預(yù)訂″Stock=nasdaq:msft&p>24″,則由于只有與這個(gè)附加預(yù)訂相關(guān)的合取被DAG中的當(dāng)前現(xiàn)有合取″Stock=nasdaq:msft″覆蓋,所以預(yù)訂變化不會被傳播。
在一個(gè)實(shí)施例中,預(yù)訂之間的相關(guān)性限于來自相同SB的預(yù)訂。因此,在處理來自相同SB、具有早于T的虛擬開始時(shí)間的所有預(yù)訂信息變化之后,上游代理102,109a,109b處理來自SB、具有虛擬開始時(shí)間T的預(yù)訂信息變化。在預(yù)訂″Stock=nyse:t&p>19或Stock=nyse:ibm&p>90或Stock=nasdaq:msft″中,由于″Stock=nyse:ibm&p>90″被覆蓋并且因而未包含在預(yù)訂信息變化中,具有等于2的虛擬開始時(shí)間的預(yù)訂的相關(guān)性被建立在具有等于1的虛擬開始時(shí)間的預(yù)訂上。在一個(gè)實(shí)施例中,通過假定來自相同SB、具有某個(gè)虛擬開始時(shí)間T的所有預(yù)訂依賴于來自相同SB、具有早于T的虛擬開始時(shí)間的所有預(yù)訂,簡化這個(gè)約束。當(dāng)預(yù)訂通過系統(tǒng)被傳播時(shí),每個(gè)預(yù)訂變化可以進(jìn)一步在每個(gè)代理處與現(xiàn)有預(yù)訂DAG進(jìn)行聚集。這個(gè)連續(xù)聚集可以在SB上產(chǎn)生新相關(guān)性。
參考圖5和6,圖解了在預(yù)訂信息的傳播之前和之后IB1109a的DAG 300。如圖所示,所傳播的預(yù)訂信息被從SB1106a傳播到IB1109a,并且包含SB1的標(biāo)識,具有等于2的虛擬開始時(shí)間,等于1的約束向量,增加合取過濾符″Stock=nyse:t&p>19″的指令以及增加合取過濾符″Stock=nasdaq:msft″的指令。如圖5所示,DAG 300包含現(xiàn)有根合取301,″Stock=nyse:*″,以及現(xiàn)有被覆蓋合取302,″Stock=nyse:ibm″。有向邊303在現(xiàn)有根合取301和現(xiàn)有被覆蓋合取302之間延伸,并且表示現(xiàn)有覆蓋關(guān)系。
所傳播的預(yù)訂信息產(chǎn)生新的被覆蓋合取304,″Stock=nyse:t&p>19″。這個(gè)合取304被現(xiàn)有根合取301,″Stock=nyse:*″覆蓋,如有向邊306所示。由于新合取被在IB1處從SB1106b接收的現(xiàn)有根合取301(其中虛擬開始時(shí)間等于1)覆蓋,即SB2∶1,所以IB1不需要進(jìn)一步通過系統(tǒng)10傳播這個(gè)新的被覆蓋合取304。然而,在SB1和SB2之間建立相關(guān)性,即SB1∶2取決于SB2∶1。這個(gè)相關(guān)性由約束向量表示。所傳播的預(yù)訂信息也產(chǎn)生新的未覆蓋的根合取305,″Stock=nasdaq:msft″。因此,IB1向PB1傳播包含虛擬開始時(shí)間等于2的SB1的標(biāo)識,約束向量(SB1∶1,SB2∶1)和增加合取″Stock=nasdaq:msft″的指令的合并預(yù)訂信息。PB1在它接收并且處理來自虛擬開始時(shí)間等于1的SB1的所有預(yù)先傳播的預(yù)訂信息,以及來自虛擬開始時(shí)間等于1的SB2的所有預(yù)訂信息之后,處理這個(gè)消息。
在一個(gè)實(shí)施例中,由于完全被現(xiàn)有預(yù)訂覆蓋的預(yù)訂未導(dǎo)致SB之外的變化,所以預(yù)訂信息在每個(gè)SB處被聚集,從而降低通過系統(tǒng)傳播的預(yù)訂信息的量。當(dāng)遞增更新時(shí),由于只有未被覆蓋的合取需要被傳播,所以現(xiàn)有預(yù)訂部分覆蓋的新預(yù)訂導(dǎo)致傳播信息量的降低。所覆蓋的預(yù)訂取決于SB處的現(xiàn)有預(yù)訂。因此,由任何接收代理按其虛擬時(shí)鐘時(shí)間指示的順序處理遞增更新。在另一個(gè)實(shí)施例中,在整個(gè)系統(tǒng)的每個(gè)代理處聚集預(yù)訂。在這個(gè)實(shí)施例中,在把遞增更新上行傳播到PB之前,在中間代理處聚集遞增更新。這個(gè)聚集導(dǎo)致不同SB處的預(yù)訂之間的相關(guān)性。在伴隨每個(gè)遞增更新的約束向量中收集這些相關(guān)性。為了使接收代理正確地處理預(yù)訂消息,需要使Vb具有與約束向量的值相同的值。
在一個(gè)示例中,IB1109a(圖1)關(guān)聯(lián)于Vb={SB1∶v1,SB2∶v2},并且它部分地聚集來自具有結(jié)果版本v1+l的SB1的遞增更新,并且結(jié)果更新現(xiàn)在依賴于(SB2∶v2)。新更新將具有約束向量(SB2∶v2)。上游代理102a在其Vb向量是{SB1∶v1,SB2∶v2}的情況下應(yīng)用此更新,并且結(jié)果狀態(tài)具有Vb={SB1∶v1+1,SB2∶v2}。因此,僅在SB處的預(yù)訂信息的聚集可以產(chǎn)生比其它處的聚集更多的預(yù)訂消息流量。由于來自不同SB的被其它所覆蓋的合取需要分別維護(hù),所以每個(gè)代理也在前一種情況下維護(hù)更大的預(yù)訂狀態(tài)??蛇x地,僅在SB處的聚集在可以應(yīng)用遞增更新時(shí)導(dǎo)致具有較少限制的簡單計(jì)算。
當(dāng)預(yù)訂到期或從系統(tǒng)10刪除時(shí),這些修改也被處理并且通過系統(tǒng)傳播到發(fā)布者。例如,如果從DAG刪除根覆蓋合取,則直接被這個(gè)根合取明確或隱含覆蓋的所有合取被重新提交。例如,如果IB1接收請求以消除現(xiàn)有根合取301,″Stock=nyse:*″,則重新提交現(xiàn)有被覆蓋合取302,″Stock=nyse:ibm″,和新的被覆蓋合取304,″Stock=nyse:t&p>19″。因此,如果IB1產(chǎn)生命令以從DAG消除合取″Stock=nyse:*″,則它還產(chǎn)生命令以增加合取″Stock=nyse:ibm″和″Stock=nyse:t&p>19″。如果這些命令在DAG中產(chǎn)生新的根合取變化,則這些變化通過系統(tǒng)進(jìn)一步傳播到發(fā)布者。
在存在依賴于己消除的合取″Stock=nyse:*″的附加合取的情況下,PB1不能處理這個(gè)更新的預(yù)訂信息,直到將這些附加合取提供給PB1。這些附加相關(guān)合取可以從同層代理路由到IB1,例如IB2109b。此外,由于IB2只傳播根合取,所以PB1可能不知道這些附加相關(guān)性。在一個(gè)實(shí)施例中,檢查PB1與關(guān)聯(lián)于IB1的Vm的一致性,與產(chǎn)生并且傳播預(yù)訂信息的中間代理的一致性。即,對照與傳播代理相關(guān)的Vm檢查接收代理的Vm,尤其是針對公共的下游SB的預(yù)訂單元。通常,這個(gè)相關(guān)性模型建立了針對預(yù)訂聚集及合并,以及針對代理的聚集傳播的解決方案。根據(jù)本發(fā)明的方法的優(yōu)點(diǎn)是不需要記住涉及每個(gè)合取DAG節(jié)點(diǎn)的所有各個(gè)預(yù)訂及其虛擬開始時(shí)間。相反,每個(gè)代理的總體向量Vb被用于實(shí)現(xiàn)。
根據(jù)本發(fā)明的方法和系統(tǒng)允許預(yù)訂信息的靈活傳播,即預(yù)訂的增加和清除。通過只使用連接一個(gè)單元到另一個(gè)單元的多個(gè)成束鏈接中的單個(gè)鏈接來傳播預(yù)訂變化信息,圖解這個(gè)優(yōu)點(diǎn)的例子。預(yù)訂信息到達(dá)單元中的一個(gè)代理,并且接著被傳遞到在相同單元內(nèi)操作的所有代理。由于單元間通信通常比單元內(nèi)通信更昂貴,所以這個(gè)方法被用來最小化單元間通信。然而,根據(jù)本發(fā)明的方法的效用不取決于這個(gè)特性。
在與代理相關(guān)的Vb滿足與預(yù)訂信息一起傳送的約束向量的情況下,每個(gè)代理處理在預(yù)訂信息中指示的變化。如果未滿足約束并且與代理相關(guān)的Vb對于接受預(yù)訂信息中傳送的變化不夠新,則代理可以啟動更新序列以使得其Vb符合約束向量。在一個(gè)實(shí)施例中,每個(gè)代理維護(hù)最近傳播的預(yù)訂變化信息的高速緩存。當(dāng)傳播的預(yù)訂消息被丟失或響應(yīng)其它系統(tǒng)故障時(shí),高速緩存中存儲的預(yù)訂信息被用于重建Vb,而不是不得不啟動完全預(yù)訂狀態(tài)更新。
再次參考圖1,消息被多個(gè)發(fā)布者101a,101b,101c中的一或多個(gè)通過其相關(guān)的PB 102發(fā)布。每個(gè)發(fā)布消息被分配流中一個(gè)發(fā)布結(jié)束點(diǎn)(稱作pubend)的位置,并且最好被記錄到PB內(nèi)的永久存儲器中。在PB下行傳遞發(fā)布消息到一或多個(gè)SB之前,它把Vm分配給消息。最好是,當(dāng)每個(gè)發(fā)布消息第一次通過系統(tǒng)傳遞時(shí),PB單調(diào)分配非降低Vm給流中的發(fā)布消息。對于給定的第一和第二發(fā)布消息,如果第二消息在數(shù)據(jù)流中在第一發(fā)布消息之后,則分配給第二發(fā)布消息的Vm在元素方面大于或等于分配給第一發(fā)布消息的Vm。在一個(gè)實(shí)施例中,根據(jù)當(dāng)前維護(hù)在PB處的預(yù)訂信息,PB單調(diào)分配非降低Vm給每個(gè)發(fā)布消息。
與每個(gè)發(fā)布消息相關(guān)的Vm包含這樣的預(yù)訂組,即當(dāng)它通過發(fā)布/預(yù)訂系統(tǒng)中的代理進(jìn)行路由時(shí),發(fā)布消息應(yīng)當(dāng)與其匹配。在發(fā)布消息包含與發(fā)布消息相關(guān)的Vm中含有的所有預(yù)訂的當(dāng)前預(yù)訂信息的情況下,代理可以有選擇地路由并且過濾發(fā)布消息。例如,IB 109a,109b,109c,109d未直接或間接通過覆蓋過濾符有選擇地路由或過濾發(fā)布消息,其中它們未維護(hù)這些被發(fā)布消息的所有相關(guān)預(yù)訂。通過比較與代理相關(guān)的Vb和分配給發(fā)布消息的Vm,測試該Vb的充分性。如果對于代理下游的SB,代理的Vb元素的值不小于分配給發(fā)布消息的Vm的值,則代理可以在沒有一個(gè)由該代理維護(hù)的預(yù)訂匹配于發(fā)布消息的情況下過濾或消除發(fā)布消息??蛇x地,如果代理的Vb元素小于分配給發(fā)布消息的Vm的元素,則采取保守路由方案,并且路由發(fā)布消息到所有下游代理。
根據(jù)本發(fā)明的系統(tǒng)和方法還被用于建立發(fā)布消息流中的起始點(diǎn),以響應(yīng)傳播的預(yù)訂而傳送發(fā)布消息。作為預(yù)訂的入口點(diǎn),每個(gè)SB維護(hù)每個(gè)其相連用戶的最完整并且最新的預(yù)訂信息。在一個(gè)實(shí)施例中,SB通過比較與預(yù)訂相關(guān)的虛擬開始時(shí)間和與發(fā)布消息相關(guān)的Vm中相應(yīng)預(yù)訂元素的虛擬開始時(shí)間,確定該預(yù)訂的傳送起始點(diǎn)。如果Vm元素等于或大于與預(yù)訂相關(guān)的虛擬開始時(shí)間,即如果與Vm元素相關(guān)的時(shí)間與涉及預(yù)訂的虛擬開始時(shí)間并行或在其之后,則開始基于預(yù)訂的傳送。如果系統(tǒng)只規(guī)定第一次發(fā)送的消息而不是重發(fā)消息的Vm的單調(diào)性,則只有第一次的消息被用于確定這個(gè)傳送起始點(diǎn)。在一個(gè)實(shí)施例中,分配給每次預(yù)訂的虛擬開始時(shí)間被用作傳送的起始點(diǎn)。對于與用戶相關(guān)的SB,當(dāng)它接收第一數(shù)據(jù)消息并且第一數(shù)據(jù)消息的與該SB的元素相關(guān)的Vm等于或大于預(yù)訂的虛擬開始時(shí)間時(shí),該SB開始傳送發(fā)布消息。根據(jù)本發(fā)明的這個(gè)方法和系統(tǒng)保證無間隙、按順序傳送每個(gè)預(yù)訂的發(fā)布消息,其中發(fā)布消息被分配非降低Vm,并且路由代理未過濾它們未維護(hù)其所有預(yù)訂的信息的發(fā)布消息,直到在發(fā)布消息Vm中指定的時(shí)間。在這里完整將其引為參考的美國專利申請10/177,474中可找到在基于內(nèi)容的發(fā)布/預(yù)訂系統(tǒng)中的無間隙傳送和持久預(yù)訂的附加討論。
參考圖7,圖解了通過根據(jù)本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)進(jìn)行預(yù)訂傳播的方法的一個(gè)實(shí)施例。例如第一用戶105a(圖1)的用戶向發(fā)布/預(yù)訂系統(tǒng)10提交新預(yù)訂410,并且這個(gè)新預(yù)訂由例如SB1106a(圖1)的與用戶相關(guān)的SB 420接收。在一個(gè)實(shí)施例中,每個(gè)預(yù)訂例如通過執(zhí)行布爾表達(dá)式內(nèi)容過濾符的DNF被表示成合取過濾符的析取。因此,每個(gè)預(yù)訂能夠被稱為合取組。與提交新預(yù)訂的用戶相關(guān)的SB維護(hù)時(shí)鐘,DAG和Vb421。SB聚集合取和其現(xiàn)有的DAG,并且基于這個(gè)聚集430向新預(yù)訂分配虛擬開始時(shí)間。為了聚集包含在新預(yù)訂中的合取,在431選擇來自預(yù)訂的未處理或未聚集的合取。這個(gè)合取接著被分析以確定它是否被DAG 432中的任何現(xiàn)有合取覆蓋。如果合取被覆蓋,則涉及這個(gè)合取的虛擬開始時(shí)間被設(shè)置成DAG中其直接父節(jié)點(diǎn)的所有虛擬開始時(shí)間的最小值433。被覆蓋合取被加入DAG中,但不包含在傳播之列。如果合取未被覆蓋,則新合取被加入DAG以作為新的根,并且被分配等于由SB維護(hù)的時(shí)鐘的當(dāng)前值的單調(diào)非降低取值的虛擬開始時(shí)間434。SB進(jìn)行檢查以確定新預(yù)訂是否包含任何未處理的合取435。如果未處理的合取仍然存在,則選擇另一個(gè)合取并且重復(fù)處理。如果未處理的合取不存在,則SB向整個(gè)預(yù)訂分配等于與合取相關(guān)的虛擬開始時(shí)間的最大值的虛擬開始時(shí)間436,遞增其時(shí)鐘437并且向適當(dāng)?shù)挠脩魣?bào)告預(yù)訂的虛擬開始時(shí)間440。
SB接著根據(jù)預(yù)定條件確定是否向SB上游的其它代理傳播所聚集的預(yù)訂信息450。最好是,SB傳播涉及其聚集的DAG的變化的預(yù)訂信息。如果增加或消除預(yù)訂未導(dǎo)致DAG中根節(jié)點(diǎn)的變化,則不傳播信息給上游代理。如果確定傳播,則SB傳播包含要增加或消除的合取的標(biāo)識及其虛擬時(shí)鐘時(shí)間的必要預(yù)訂信息到一或多個(gè)上游代理460。每個(gè)上游代理,即IB,維護(hù)DAG和Vb。在一個(gè)實(shí)施例中,當(dāng)預(yù)訂信息從SB傳播到IB時(shí),新預(yù)訂信息被聚集到現(xiàn)有DAG中。預(yù)訂信息被上行傳播,直到它最終傳送到與要加入到或從DAG刪除的任何合取的組中的發(fā)布消息相關(guān)的PB 470。PB還維護(hù)DAG和Vb471,并且能夠把新預(yù)訂信息聚集到其現(xiàn)有DAG中。
參考圖8,圖解了通過根據(jù)本發(fā)明的發(fā)布/預(yù)訂系統(tǒng)發(fā)布消息的一個(gè)實(shí)施例。發(fā)布者向系統(tǒng)提交數(shù)據(jù)消息505,并且該消息被其相關(guān)PB接收。PB維護(hù)DAG中的預(yù)訂信息和Vb511。PB把Vm分配給新發(fā)布消息520。在一個(gè)實(shí)施例中,PB在固定存儲器中維護(hù)預(yù)先分配的Vm以保證分配給新消息的Vm值是單調(diào)非降序的。在另一個(gè)實(shí)施例中,PB使用其DAG和Vb分配Vm。在這個(gè)實(shí)施例中,分配給數(shù)據(jù)消息的Vm值的單調(diào)性未被保證,但是SB將檢查單調(diào)性并且發(fā)送否定確認(rèn)以檢索具有足夠大的Vm的數(shù)據(jù)消息。接著通過系統(tǒng)中的代理路由發(fā)布消息521。在一個(gè)實(shí)施例中,PB使用其DAG中的合取產(chǎn)生發(fā)布消息的次轉(zhuǎn)發(fā)段路由目的地列表,并且相應(yīng)地路由消息。在每個(gè)代理處,PB檢查Vm是否在元素方面小于或等于代理的Vb530。如果兩個(gè)條件都滿足,則代理能夠基于在代理處維護(hù)的預(yù)訂來匹配,過濾和傳遞所發(fā)布消息540。如果這個(gè)條件未被滿足,則代理傳遞消息到所有其下游代理550。盡管針對單個(gè)代理進(jìn)行圖解,但是針對發(fā)布消息所路由經(jīng)過的網(wǎng)絡(luò)樹中的每個(gè)代理順序并且并行地執(zhí)行Vb和Vm的比較。最終,發(fā)布消息被路由到一或多個(gè)SB 560。SB維護(hù)合取DAG和Vb561。此Vb僅包含針對SB自身的一個(gè)元素,但是維護(hù)其相連用戶的最新和詳細(xì)的預(yù)訂信息。SB產(chǎn)生匹配于發(fā)布數(shù)據(jù)消息的預(yù)訂的列表,并且針對每個(gè)新預(yù)訂,即SB不傳送其任何數(shù)據(jù)消息的預(yù)訂檢查是否開始傳送它的數(shù)據(jù)消息。SB通過比較SB的數(shù)據(jù)消息的Vm元素和預(yù)訂的虛擬開始時(shí)間而這樣做570。如果數(shù)據(jù)消息的Vm元素不小于新預(yù)訂的虛擬開始時(shí)間,則SB判定這是預(yù)訂的傳送起始點(diǎn),并且SB把數(shù)據(jù)消息傳送到適當(dāng)用戶580。對于其傳送已經(jīng)開始的用戶并且當(dāng)單調(diào)的非降低Vm被分配時(shí),由于虛擬開始時(shí)間的比較已經(jīng)被滿足,SB傳送消息到用戶。如果使用非單調(diào)的Vm分配,則SB執(zhí)行每個(gè)數(shù)據(jù)消息的單調(diào)性檢查以保證流中的較后消息具有不小于相同流中較早消息的此SB的Vm元素。如果所發(fā)布消息的虛擬開始時(shí)間不大于或等于與預(yù)訂相關(guān)的虛擬開始時(shí)間,則SB向PB發(fā)出否定確認(rèn),并且請求以新Vm重發(fā)所發(fā)布消息。
Vm能夠單調(diào)或非單調(diào)地被分配給消息。把Vm單調(diào)地分配給發(fā)布消息要求PB保持它曾經(jīng)分配的最高Vm,如前所討論的。此方案的優(yōu)點(diǎn)是僅需要把Vm分配給發(fā)布消息,并且一旦開始針對預(yù)訂進(jìn)行傳送,每個(gè)SB不需要檢查后續(xù)Vm。非單調(diào)的Vm分配不要求在PB處最大Vm的保護(hù)。然而,后續(xù)發(fā)布消息可以具有低于前一消息(SB1,3)的Vm,(SB1,2),即位于發(fā)布消息流中較前的位置。如果后續(xù)發(fā)布消息在它到達(dá)SB1之前被轉(zhuǎn)換為表示靜音的數(shù)據(jù)消息,則由于SB已經(jīng)開始針對虛擬開始時(shí)間等于3的預(yù)訂的傳送,所以后續(xù)發(fā)布消息可能不被接受。因此,除發(fā)布消息之外還需要向表示靜音的數(shù)據(jù)消息分配Vm。在單調(diào)實(shí)施例中,算法Vm只被分配給發(fā)布消息,因?yàn)槠渥鳛楦S數(shù)據(jù)消息的靜音記號(ticks)的下界的指示。不具有足夠大的Vm的靜音記號被拒絕,并且對這些發(fā)布消息發(fā)送否定確認(rèn)。否定確認(rèn)消息包含指示可接受的靜音的最小Vm的Vm。例如,上述例子中的否定確認(rèn)將具有Vm={SB1,3},因此具有Vm={SB1,2}的靜音記號的IB不能響應(yīng)那些否定確認(rèn)。IB處的否定確認(rèn)合并還考慮Vm。
在一個(gè)實(shí)施例中,除PB之外的代理能夠改變分配給發(fā)布消息的Vm。在IB處改變Vm的動機(jī)是,當(dāng)在IB處聚集預(yù)訂時(shí),更新能夠被完全聚集到現(xiàn)有預(yù)訂中,導(dǎo)致實(shí)際上為空的更新。因此,這個(gè)實(shí)際上為空的更新能夠繼續(xù)被傳播直到它到達(dá)PB,或可以停止此空更新的傳播。最好是,實(shí)際上為空的更新被傳播,直到它到達(dá)PB。空的遞增更新傳送最近的Vm和Vb信息到PB。如果空更新被停止,則PB沒有看見空更新,并且由于把預(yù)訂狀態(tài)從vv1改變到vv2的所有遞增預(yù)訂更新為空,所以IB記錄具有Vm=vv1的消息應(yīng)被自動轉(zhuǎn)變到具有Vm=vv2的消息的事實(shí),其中vv2>vv1。在相同單元中的另一個(gè)代理可能沒有接收直到vv2的所有更新,并且因此不會對Vm進(jìn)行相同改變。此可以導(dǎo)致非單調(diào)的Vm。
雖然顯然這里公開的本發(fā)明的示例性實(shí)施例滿足本發(fā)明的目的,然而可以理解,本領(lǐng)域的技術(shù)人員可以設(shè)計(jì)許多修改和其它實(shí)施例。另外,來自任何實(shí)施例的特性和/或要素可以單獨(dú)或結(jié)合其它實(shí)施例來使用。因此,應(yīng)當(dāng)理解,所附權(quán)利要求書旨在覆蓋在本發(fā)明的實(shí)質(zhì)和范圍內(nèi)所得到的所有這種修改和實(shí)施例。
權(quán)利要求
1.一種通過網(wǎng)絡(luò)傳播對發(fā)布的消息的預(yù)訂的方法,該方法包括關(guān)聯(lián)所發(fā)布消息的消息向量,消息向量包括一組對所發(fā)布消息的消息預(yù)訂以及每個(gè)消息預(yù)訂的關(guān)聯(lián)消息向量虛擬開始時(shí)間;使代理向量與網(wǎng)絡(luò)中的代理相關(guān)聯(lián),代理向量包括一組對所發(fā)布消息的代理預(yù)訂以及每個(gè)代理預(yù)訂的關(guān)聯(lián)代理向量虛擬開始時(shí)間;比較消息向量中的消息預(yù)訂和代理向量中的代理預(yù)訂;以及基于比較通過網(wǎng)絡(luò)路由所發(fā)布消息。
2.如權(quán)利要求1所述的方法,其中路由所發(fā)布消息的步驟包括當(dāng)每個(gè)消息預(yù)訂匹配代理預(yù)訂組中的代理預(yù)訂之一時(shí),基于一或多個(gè)代理預(yù)訂路由所發(fā)布消息。
3.如權(quán)利要求1所述的方法,其中路由所發(fā)布消息的步驟包括在消息預(yù)訂的比較指示包含在消息預(yù)訂組中的至少一個(gè)消息預(yù)訂未被包含在代理預(yù)訂組中時(shí),路由所發(fā)布消息到所有下游代理以及用戶。
4.如權(quán)利要求1所述的方法,其中比較消息以及代理預(yù)訂的步驟包括確認(rèn)與每個(gè)代理向量相關(guān)的代理向量虛擬開始時(shí)間遲于或等于與匹配該代理預(yù)訂的消息預(yù)訂相關(guān)的消息向量虛擬開始時(shí)間。
5.如權(quán)利要求1所述的方法,還包括確認(rèn)代理向量虛擬開始時(shí)間早于包含在與該代理預(yù)訂組相關(guān)的代理中的時(shí)鐘的當(dāng)前值。
6.如權(quán)利要求1所述的方法,還包括定義每個(gè)消息預(yù)訂以及每個(gè)代理預(yù)訂為多個(gè)邏輯合取,每個(gè)邏輯合取定義一組所發(fā)布的消息;以及聚集所述邏輯合取。
7.如權(quán)利要求6所述的方法,其中聚集邏輯合取的步驟包括在與代理預(yù)訂組相關(guān)的代理處聚集與代理預(yù)訂組相關(guān)的邏輯合取。
8.如權(quán)利要求6所述的方法,其中聚集邏輯合取的步驟包括在網(wǎng)絡(luò)中的所有代理處聚集邏輯合取。
9.如權(quán)利要求6所述的方法,其中聚集邏輯合取的步驟包括在與代理預(yù)訂組相關(guān)的代理處維護(hù)表示與代理預(yù)訂組相關(guān)的邏輯合取的有向非循環(huán)圖。
10.如權(quán)利要求9所述的方法,其中維護(hù)有向非循環(huán)圖的步驟包括識別邏輯合取中的未覆蓋的合取,其中與每個(gè)未覆蓋的合取相關(guān)的所發(fā)布消息組不是邏輯合取所定義的任何其它所發(fā)布消息組的子集;以及識別邏輯合取中的被覆蓋合取,其中與每個(gè)覆蓋合取相關(guān)的所發(fā)布消息組是未覆蓋的合取之一所定義的所發(fā)布消息之一的子集。
11.如權(quán)利要求9所述的方法,還包括通過網(wǎng)絡(luò)中的一或多個(gè)其它代理傳播有向非循環(huán)圖。
12.如權(quán)利要求11所述的方法,其中傳播有向非循環(huán)圖的步驟包括基于預(yù)定時(shí)間間隔進(jìn)行傳播。
13.如權(quán)利要求11所述的方法,其中傳播有向非循環(huán)圖的步驟包括響應(yīng)有向非循環(huán)圖中的變化而進(jìn)行傳播。
14.如權(quán)利要求10所述的方法,還包括向每個(gè)未覆蓋的合取分配未覆蓋合取虛擬開始時(shí)間,當(dāng)未覆蓋的合取被加入有向非循環(huán)圖時(shí),未覆蓋合取虛擬開始時(shí)間等于與代理相關(guān)的時(shí)鐘的當(dāng)前值;以及向每個(gè)被覆蓋的合取分配覆蓋合取虛擬開始時(shí)間,覆蓋合取虛擬開始時(shí)間等于與其覆蓋合取相關(guān)的未覆蓋合取虛擬開始時(shí)間。
15.如權(quán)利要求14所述的方法,還包括設(shè)置代理向量虛擬開始時(shí)間等于包含在代理向量中的邏輯合取的覆蓋以及未覆蓋合取虛擬開始時(shí)間的最大值。
16.如權(quán)利要求14所述的方法,還包括通過網(wǎng)絡(luò)中的一或多個(gè)其它代理傳播有向非循環(huán)圖;以及在傳播有向非循環(huán)圖之后推進(jìn)與代理相關(guān)的時(shí)鐘。
17.如權(quán)利要求16所述的方法,還包括保證時(shí)鐘的單調(diào)性;以及維護(hù)時(shí)鐘作為整數(shù)計(jì)數(shù)器。
18.如權(quán)利要求9所述的方法,其中維護(hù)有向非循環(huán)圖的步驟還包括向代理預(yù)訂組增加新預(yù)訂;以及消除對代理預(yù)訂組的到期預(yù)訂。
19.如權(quán)利要求9所述的方法,還包括省略來自有向非循環(huán)圖的傳遞弧。
20.如權(quán)利要求13所述的方法,其中傳播有向非循環(huán)圖的步驟還包括識別能夠與任何代理預(yù)訂關(guān)聯(lián)的最高向量代理虛擬開始時(shí)間以便處理有向非循環(huán)圖中的所傳播變化;以及在約束向量中傳播最高向量虛擬開始時(shí)間。
21.如權(quán)利要求20所述的方法,還包括確認(rèn)與接收有向非循環(huán)圖中的所傳播變化的代理相關(guān)的代理向量中的每個(gè)代理預(yù)訂滿足約束向量;在滿足約束向量的情況下,基于所傳播變化更新代理向量;以及在不滿足約束向量的情況下,基于約束向量更新代理向量。
22.一種包含計(jì)算機(jī)可執(zhí)行代碼的計(jì)算機(jī)可讀介質(zhì),在計(jì)算機(jī)讀取時(shí),該計(jì)算機(jī)可執(zhí)行代碼使得計(jì)算機(jī)執(zhí)行通過網(wǎng)絡(luò)傳播對所發(fā)布消息的預(yù)訂的方法,該方法包括關(guān)聯(lián)所發(fā)布消息的消息向量,消息向量包括一組對所發(fā)布消息的消息預(yù)訂以及每個(gè)消息預(yù)訂的關(guān)聯(lián)消息向量虛擬開始時(shí)間;使代理向量與網(wǎng)絡(luò)中的代理相關(guān)聯(lián),代理向量包括一組對所發(fā)布消息的代理預(yù)訂以及每個(gè)代理預(yù)訂的關(guān)聯(lián)代理向量虛擬開始時(shí)間;比較消息向量中的消息預(yù)訂和代理向量中的代理預(yù)訂;以及基于比較通過網(wǎng)絡(luò)路由所發(fā)布消息。
23.如權(quán)利要求22所述的計(jì)算機(jī)可讀介質(zhì),其中比較消息以及代理預(yù)訂的步驟包括確認(rèn)與每個(gè)代理向量相關(guān)的代理向量虛擬開始時(shí)間遲于或等于與匹配該代理預(yù)訂的消息預(yù)訂相關(guān)的消息向量虛擬開始時(shí)間。
24.如權(quán)利要求22所述的計(jì)算機(jī)可讀介質(zhì),還包括定義每個(gè)消息預(yù)訂以及每個(gè)代理預(yù)訂為多個(gè)邏輯合取,每個(gè)邏輯合取定義一組所發(fā)布的消息;以及聚集所述邏輯合取。
25.如權(quán)利要求24所述的計(jì)算機(jī)可讀介質(zhì),其中聚集邏輯合取的步驟包括在與代理預(yù)訂組相關(guān)的代理處維護(hù)表示與代理預(yù)訂組相關(guān)的邏輯合取的有向非循環(huán)圖。
26.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中維護(hù)有向非循環(huán)圖的步驟包括識別邏輯合取中的未覆蓋的合取,其中與每個(gè)未覆蓋的合取相關(guān)的所發(fā)布消息組不是邏輯合取所定義的任何其它所發(fā)布消息組的子集;以及識別邏輯合取中的被覆蓋合取,其中與每個(gè)覆蓋合取相關(guān)的所發(fā)布消息組是未覆蓋的合取之一所定義的所發(fā)布消息之一的子集。
27.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),還包括通過網(wǎng)絡(luò)中的一或多個(gè)其它代理響應(yīng)有向非循環(huán)圖中的變化傳播有向非循環(huán)圖。
28.如權(quán)利要求26所述的方法,還包括向每個(gè)未覆蓋的合取分配未覆蓋合取虛擬開始時(shí)間,當(dāng)未覆蓋的合取被加入有向非循環(huán)圖時(shí),未覆蓋合取虛擬開始時(shí)間等于與代理相關(guān)的時(shí)鐘的當(dāng)前值;以及向每個(gè)被覆蓋的合取分配覆蓋合取虛擬開始時(shí)間,覆蓋合取虛擬開始時(shí)間等于與其覆蓋合取相關(guān)的未覆蓋合取虛擬開始時(shí)間。
29.如權(quán)利要求28所述的計(jì)算機(jī)可讀介質(zhì),還包括設(shè)置代理向量虛擬開始時(shí)間等于包含在代理向量中的邏輯合取的覆蓋以及未覆蓋合取虛擬開始時(shí)間的最大值。
30.如權(quán)利要求27所述的計(jì)算機(jī)可讀介質(zhì),其中傳播有向非循環(huán)圖的步驟還包括識別能夠與任何代理預(yù)訂關(guān)聯(lián)的最高向量代理虛擬開始時(shí)間以便處理有向非循環(huán)圖中的所傳播變化;以及在約束向量中傳播最高向量虛擬開始時(shí)間。
31.如權(quán)利要求30所述的計(jì)算機(jī)可讀介質(zhì),還包括確認(rèn)與接收有向非循環(huán)圖中的所傳播變化的代理相關(guān)的代理向量中的每個(gè)代理預(yù)訂滿足約束向量;在滿足約束向量的情況下,基于所傳播變化更新代理向量;以及在不滿足約束向量的情況下,基于約束向量更新代理向量。
全文摘要
本發(fā)明涉及包含多個(gè)代理,多個(gè)用戶以及包含發(fā)布者連接代理、中間代理以及用戶連接代理的多個(gè)代理的發(fā)布/預(yù)訂系統(tǒng)。用戶通過相關(guān)的預(yù)訂代理把預(yù)訂引入系統(tǒng)。新預(yù)訂被聚集,分配虛擬開始時(shí)間以及通過系統(tǒng)傳播到發(fā)布者。每個(gè)代理以有向非循環(huán)圖以及代理向量的形式維護(hù)預(yù)訂信息。發(fā)布者通過其相關(guān)的發(fā)布者連接代理經(jīng)由系統(tǒng)發(fā)布消息。每個(gè)消息被分配了關(guān)聯(lián)預(yù)訂到該消息的消息向量?;谠诿總€(gè)代理處執(zhí)行的消息代理和向量代理的比較,通過代理路由所發(fā)布消息到用戶。
文檔編號H04L12/00GK1761194SQ20051011356
公開日2006年4月19日 申請日期2005年10月13日 優(yōu)先權(quán)日2004年10月14日
發(fā)明者趙圓圓, 丹尼爾·查爾斯·斯圖爾曼, 蘇馬爾·布霍拉 申請人:國際商業(yè)機(jī)器公司