多節(jié)點間資源交換的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開一種多節(jié)點間資源交換的方法,用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中。所述方法包括:偵測分布式集群中是否有新節(jié)點加入;偵測各個節(jié)點中是否有資源變動;如果分布式集群中有新節(jié)點加入或資源變動,則觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換;以及根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。本發(fā)明還提供一種多節(jié)點間資源交換的系統(tǒng)。
【專利說明】多節(jié)點間資源交換的方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及計算機網(wǎng)絡的分布式系統(tǒng)領域,尤其涉及一種用于分布式系統(tǒng)多節(jié)點間資源交換的方法及系統(tǒng)。
【背景技術】
[0002]分布式系統(tǒng)通常由成千上萬個節(jié)點所組成,每個節(jié)點上都會保存不同的信息資源,如何使這些節(jié)點可以互相獲取其它節(jié)點上的資源,即實現(xiàn)節(jié)點間的資源交換的功能,成為了一個重要的問題。
[0003]目前,大家普遍采用通過在每個節(jié)點的配置文件中指定所有其它節(jié)點的方式來構建集群,然后在此集群中完成簡單的資源交換工作。但通過這種方式實現(xiàn)的資源交換機制存在以下幾個不足之處:
1、集群配置繁鎖:對于集群中的每一個節(jié)點,其配置文件中必須指定除本節(jié)點以外的所有節(jié)點,因此,當集群中的節(jié)點成員需要發(fā)生變動時,必須手動修改所有節(jié)點的配置文件。
[0004]2、無法動態(tài)添加或刪除節(jié)點:當對集群添加或刪除節(jié)點時,必須將原先集群中的全部節(jié)點關閉,并更新所有節(jié)點的配置文件,再重新啟動所有節(jié)點,才能實現(xiàn)向集群添加節(jié)點或刪除節(jié)點的目的。
[0005]3、節(jié)點無法定制資源:當某個節(jié)點向其它節(jié)點獲取資源時,必須獲取這個節(jié)點上的所有資源,并將這些資源全部記錄到本節(jié)點中,但實際上該節(jié)點可能僅需要某種特定類型的資源,這不僅浪費帶寬資源,而且浪費存儲資源。
【發(fā)明內(nèi)容】
[0006]為了解決上述問題,本發(fā)明提供一種多節(jié)點間資源交換的方法以及系統(tǒng),其能夠解決上述技術問題。
[0007]本發(fā)明實施例提供一種多節(jié)點間資源交換的方法,用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中。所述方法包括:偵測分布式集群中是否有新節(jié)點加入;偵測各個節(jié)點中是否有資源變動;如果分布式集群中有新節(jié)點加入或資源變動,則觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換;以及根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
[0008]優(yōu)選的,所述偵測分布式集群中是否有新節(jié)點加入的步驟是根據(jù)所述節(jié)點的申請加入行為或邀請加入行為來進行的,且所述方法還包括:如果分布式集群中無新節(jié)點加入,則進一步偵測各個節(jié)點中是否有資源變動。。
[0009]優(yōu)選的,所述方法進一步包括步驟:偵測分布式集群中是否有節(jié)點退出集群;如果是,則集群中的其余節(jié)點刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源。
[0010]優(yōu)選的,所述偵測各個節(jié)點中是否有資源變動的步驟是根據(jù)集群中有節(jié)點退出集群的行為來進行的,且所述偵測分布式集群中是否有節(jié)點退出集群的步驟是通過心跳機制來偵測節(jié)點退出集群的行為的。
[0011]優(yōu)選的,所述根據(jù)第一節(jié)點與第二節(jié)點的本地資源以及所需資源類型進行資源交換的步驟包括:第一節(jié)點向第二節(jié)點請求資源交換,并發(fā)送第一節(jié)點的節(jié)點名以及第一節(jié)點的所需資源類型;第一節(jié)點接收第二節(jié)點的應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源;第一節(jié)點記錄所述在第二節(jié)點上找到的第一節(jié)點的所需資源,并根據(jù)第二節(jié)點的所需資源類型在第一節(jié)點的本地資源中查找相符的資源;以及第一節(jié)點向第二節(jié)點發(fā)送應答信息,所述應答信息包括第一節(jié)點的節(jié)點名以及在第一節(jié)點上找到的第二節(jié)點的所需資源。
[0012]優(yōu)選的,所述根據(jù)第一節(jié)點與第二節(jié)點的節(jié)點名以及所需資源類型進行資源交換的步驟還包括:第二節(jié)點接收第一節(jié)點的請求信息,并根據(jù)第一節(jié)點的所需資源類型在第二節(jié)點的本地資源中查找相符的資源;第二節(jié)點向第一節(jié)點發(fā)送應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源;以及第二節(jié)點接收第一節(jié)點的應答信息,并將在第一節(jié)點上找到的第二節(jié)點的所需資源記錄到找到的資源中。
[0013]本發(fā)明另一實施例提供一種多節(jié)點間資源交換的方法,用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中。所述方法包括:新節(jié)點加入集群;節(jié)點退出集群,使得資源發(fā)生變動;根據(jù)所述新節(jié)點加入所述集群或資源變動的行為,觸發(fā)第一節(jié)點以及第二節(jié)點之間的資源交換;以及根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
[0014]本發(fā)明又一實施例提供一種多節(jié)點間資源交換的系統(tǒng),用于一分布式集群,所述分布式集群包括至少兩個節(jié)點,且每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中。所述多節(jié)點間資源交換的系統(tǒng)包括:第一偵測模塊,用于偵測分布式集群中是否有新節(jié)點加入;第二偵測模塊,用于偵測各個節(jié)點中是否有資源變動;觸發(fā)模塊,用于根據(jù)分布式集群中有新節(jié)點加入或資源變動的行為,觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換;以及執(zhí)行模塊,用于根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
[0015]優(yōu)選的,所述第二偵測模塊進一步用于偵測分布式集群中是否有節(jié)點退出集群,如果是,則集群中的其余節(jié)點都刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源。
[0016]優(yōu)選的,所述執(zhí)行模塊進一步包括:第一請求單元,用于向第二節(jié)點請求資源交換,并發(fā)送第一節(jié)點的節(jié)點名以及第一節(jié)點的所需資源類型;第一接收單元,用于接收第一節(jié)點的請求信息,并根據(jù)第一節(jié)點的所需資源類型在第二節(jié)點的本地資源中查找相符的資源;第一發(fā)送單元,用于向第一節(jié)點發(fā)送應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源;第二接收單元,用于接收第一發(fā)送單元發(fā)送的應答信息,并記錄在第二節(jié)點上找到的第一節(jié)點的所需資源,并根據(jù)第二節(jié)點的所需資源類型在第一節(jié)點的本地資源中查找相符的資源;第二發(fā)送單元,用于向第二節(jié)點發(fā)送應答信息,所述應答信息包括第一節(jié)點的節(jié)點名以及在第一節(jié)點上找到的第二節(jié)點的所需資源;以及記錄單元,用于接收第二發(fā)送單元發(fā)送的應答信息,并將在第一節(jié)點上找到的第二節(jié)點的所需資源記錄到找到的資源中。[0017]在本發(fā)明的上述實施例中,當集群中的節(jié)點成員需要發(fā)生變動時,該多節(jié)點間資源交換的方法以及系統(tǒng)無需手動修改所有節(jié)點的配置文件,而僅僅由該集群系統(tǒng)自動修改內(nèi)存記錄即可。當對集群添加或刪除節(jié)點時,也無需將原先集群中的全部節(jié)點關閉再重新啟動,即可實現(xiàn)向集群添加節(jié)點或刪除節(jié)點的目的。此外,當某個節(jié)點向其它節(jié)點獲取資源時,可根據(jù)特定類型的資源進行交換,因此節(jié)省了帶寬。
【專利附圖】
【附圖說明】
[0018]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0019]圖1為本發(fā)明實施例提供的多節(jié)點間資源交換的方法的流程圖;
圖2為應用于圖1的多節(jié)點間資源交換方法的節(jié)點資源數(shù)據(jù)結構;
圖3為兩節(jié)點資源交換過程示意圖;
圖4為本發(fā)明實施例提供的多節(jié)點間資源交換的系統(tǒng)的功能模塊圖。
【具體實施方式】
[0020]下面結合附圖和【具體實施方式】對本發(fā)明的技術方案作進一步更詳細的描述。顯然,所描述的實施例僅僅是本發(fā)明的一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應屬于本發(fā)明保護的范圍。
[0021]請參閱圖1,本發(fā)明提供的多節(jié)點間資源交換的方法用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點??梢岳斫?,第一節(jié)點以及第二節(jié)點可以分別是至少兩個節(jié)點,可根據(jù)用戶的具體需求確定節(jié)點的數(shù)量。多節(jié)點間資源交換的方法包括以下步驟:
步驟SlOl:偵測分布式集群中是否有新節(jié)點加入,如果無新節(jié)點加入,則偵測分布式集群中是否有節(jié)點退出集群。如果有新節(jié)點加入,則觸發(fā)節(jié)點間的資源交換。具體的,新節(jié)點加入集群的方式可分為申請模式和邀請模式。申請模式是指欲加入集群的節(jié)點主動向集群中的任意一節(jié)點發(fā)送加入集群的請求,集群中的任意一節(jié)點在收到該請求后,一對一通知集群中的其它節(jié)點有新節(jié)點欲加入集群,以及告知其它節(jié)點新節(jié)點的節(jié)點名,最后該任意一節(jié)點將集群中現(xiàn)有的節(jié)點成員告知欲加入集群的節(jié)點,如此,新節(jié)點就成功加入了集群。由于每個節(jié)點均會記錄集群中除本節(jié)點以外的所有節(jié)點的信息,該信息僅僅指節(jié)點的節(jié)點名,即ip地址。而邀請模式是指由集群中任意一節(jié)點向欲加入集群的節(jié)點發(fā)送加入集群的邀請,欲加入集群的節(jié)點接收邀請,并向發(fā)送邀請的節(jié)點返回應答,發(fā)送邀請的節(jié)點在收到應答后,執(zhí)行加入集群的相應操作。本實施方式中,該相應操作與申請模式中節(jié)點收到加入集群請求后的操作相同。不管節(jié)點采用哪種模式加入集群,集群中的每個節(jié)點都可偵測到新節(jié)點加入集群的行為,使每個節(jié)點均保持最新的集群成員信息。因此,本步驟能夠根據(jù)節(jié)點的申請加入行為或邀請加入行為來偵測分布式集群中是否有新節(jié)點加入。
[0022]步驟S103:偵測分布式集群中是否有節(jié)點退出集群,如果有節(jié)點退出集群,則執(zhí)行步驟S105:集群中的其余節(jié)點都刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源。如果沒有節(jié)點退出集群,則執(zhí)行步驟S107:保持原節(jié)點資源不變。具體的,當集群中的某個節(jié)點退出集群時,集群中的其它節(jié)點均可依靠心跳機制來檢測到該節(jié)點退出集群的行為,并更新本節(jié)點所持有的集群節(jié)點成員的信息,原因是:對于集群中的每個節(jié)點來說,都是依靠維持與其它節(jié)點的心跳來保持聯(lián)系,當有節(jié)點退出集群,該節(jié)點與其它節(jié)點間的心跳就消失了,因此可以偵測到該節(jié)點退出集群的行為。至于心跳機制的實現(xiàn)方式有多種多樣,可以是維持長連接,也可以是定時匯報等等,不以此為限。此外,本步驟可在步驟SlOl之前或之后執(zhí)行,或者是同步進行。
[0023]由于每個節(jié)點找到的資源將以Node-Key-Value的數(shù)據(jù)結構存儲在內(nèi)存中,當節(jié)點偵測到某節(jié)點退出集群時,會遍歷本節(jié)點上所有從其它節(jié)點上找到的資源,將其中所有屬于該節(jié)點的資源(即Node為該節(jié)點的節(jié)點名的資源)全部刪除即可。如此,不管是有新節(jié)點加入集群,還是有節(jié)點退出集群,都可以使集群中的每個節(jié)點保持最新的資源。
[0024]通過對節(jié)點加入集群和節(jié)點退出集群這兩種行為的監(jiān)測,即可確保集群中的每一個節(jié)點均持有正確的集群節(jié)點成員信息。而在這過程中,每個節(jié)點所維護的其它節(jié)點成員的信息是存儲在內(nèi)存中,而非配置文件中,因此不用將所有集群中正常運行的節(jié)點停機,來手動修改配置文件,只需要對新節(jié)點進行簡單的配置,然后啟動該節(jié)點,即可完成動態(tài)添加新節(jié)點和移除節(jié)點(即新節(jié)點加入和節(jié)點退出)的操作。
[0025]步驟S109:偵測各個節(jié)點中是否有資源變動。本實施例中,此步驟是在確定分布式集群中無新節(jié)點加入之后才進行的。更具體的,此步驟是根據(jù)集群中有節(jié)點退出集群的行為來偵測各個節(jié)點中是否有資源變動的,當集群中有節(jié)點退出集群時,由于集群中的其余節(jié)點都刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源,因此資源發(fā)生了變動,當無節(jié)點退出集群時,則認為無資源變動,并返回步驟S103。
[0026]如果分布式集群中有新節(jié)點加入或資源變動,則執(zhí)行步驟Slll:觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換。
[0027]步驟S113:根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。具體的,請參閱圖2,分布式集群中的每個節(jié)點在本節(jié)點上記錄三種信息:本節(jié)點擁有的資源、本節(jié)點需要的資源類型和從其它節(jié)點上找到的本節(jié)點所需要的資源(簡稱找到的資源)。其中,在本實施例中,本節(jié)點擁有的資源中記錄KeyN-ValueN,表示該節(jié)點擁有類型為KeyN的資源,該資源的內(nèi)容為ValueN ;本節(jié)點需要的資源類型中記錄KeyN,表示該節(jié)點需要從其它節(jié)點上獲取類型為KeyN的資源;找到的資源中記錄NodeX-KeyN-ValueM,表示從節(jié)點名為NodeX的節(jié)點上找到類型為KeyN的資源,該資源的內(nèi)容為 ValueM。
[0028]下面就通過詳細介紹兩節(jié)點間的資源交換過程,來了解參與此過程的兩個節(jié)點的資源交換操作,以更好地理解分布式集群節(jié)點間的資源交換。
[0029]請參閱圖3,為了便于介紹,將參與資源交換的兩節(jié)點分別命名為節(jié)點I和節(jié)點2,圖3即表示節(jié)點I與節(jié)點2進行資源交換的過程。假設當前節(jié)點I本地擁有的資源為Keyl-Valuel和Key2_Value2,而節(jié)點I需要的資源是類型為Keyl、Key3和Key4的資源;節(jié)點2本地所擁有的資源有Key3_Value3和Key4_Value4,而節(jié)點2需要的資源類型為Key2和Key5。節(jié)點I和節(jié)點2當前均未有找到的資源。[0030]本實施例中,假設是節(jié)點I向節(jié)點2發(fā)起資源交換的請求,這個過程包括如下六個步驟:
步驟1:節(jié)點I向節(jié)點2發(fā)送資源交換請求{Nodel,WantRKl},其中Nodel為節(jié)點I的節(jié)點名,WantRKl為節(jié)點I所需要的資源類型,在本實施例中,節(jié)點I所需要的資源類型即是 Keyl、Key3 和 Key4。
[0031]步驟2:節(jié)點2收到節(jié)點I發(fā)送的請求信息,并從中獲取節(jié)點I所需要的資源類型的信息,然后根據(jù)此信息,在本節(jié)點所擁有的資源中進行查找。在本實施例中,由于節(jié)點2上并沒有類型為Keyl的資源,所以節(jié)點2查找到的符合節(jié)點I要求的資源為Key3-ValUe3和 Key4_Value4。
[0032]步驟3:節(jié)點2向節(jié)點I發(fā)送應答信息{Node2,WantRK2, FoundRl},其中Node2為節(jié)點2的節(jié)點名,WantRK2為節(jié)點2所需要的資源類型:Key2和Key5,F(xiàn)oundRl為節(jié)點2上找到的節(jié)點I所需要的資源,即是Key3_Value3和Key4_Value4。
[0033]步驟4:節(jié)點I收到節(jié)點2發(fā)送的應答信息{Node2,WantRK2, FoundRl}后,先將信息中的FoundRl以NodeX-KeyN-ValueM的形式記錄到找到的資源中。本實施例中,以Node2-Key3_Value3和Node2-Key4_Value4的形式進行記錄。然后,根據(jù)信息中的WantRK2進行與步驟2相同的操作,最后,節(jié)點I從本節(jié)點擁有的資源中查找出的符合節(jié)點2要求的資源為 Key2_Value2。
[0034]步驟5:節(jié)點I向節(jié)點2發(fā)送應答信息{Nodel,F(xiàn)oundR2},其中Nodel為節(jié)點I的節(jié)點名,F(xiàn)oundR2為節(jié)點I上找到的節(jié)點2所需要的資源,即是Key2_Value2。
[0035]步驟6:節(jié)點2收到節(jié)點I發(fā)送的應答信息{Node I,F(xiàn)oundR2}后,將信息中的FoundR2以NodeX-KeyN-ValueM的形式記錄到找到的資源中。本實施例中,是以Nodel-Key2-Value2的形式進行記錄。
[0036]如此,即完成了一次兩節(jié)點間的資源交換過程。在資源交換的過程中,每個節(jié)點上記錄的本地擁有的資源與所需要的資源類型的記錄是始終不變的,而改變的只有找到的資源的記錄。在上面這個例子中,節(jié)點I和節(jié)點2在完成資源交換后,兩個節(jié)點中找到的資源的記錄均發(fā)生了改變,即:節(jié)點I為Node2-Key3_Value3和Node2-Key4_Value4,節(jié)點2為Nodel-Key2-Value20
[0037]請參閱圖4,本發(fā)明還提供一種多節(jié)點間資源交換的系統(tǒng)100,其用于上述的包括至少兩個節(jié)點的分布式集群。所述多節(jié)點間資源交換的系統(tǒng)100包括第一偵測模塊10、第二偵測模塊20、觸發(fā)模塊30以及執(zhí)行模塊40。
[0038]第一偵測模塊10用于偵測分布式集群中是否有新節(jié)點加入。具體的,所述第一偵測模塊10根據(jù)節(jié)點申請加入集群的行為或集群中的節(jié)點邀請新節(jié)點加入集群中的行為,來偵測分布式集群中是否有新節(jié)點加入。
[0039]第二偵測模塊20用于偵測各個節(jié)點中是否有資源變動。本實施例中,第二偵測模塊20還偵測分布式集群中是否有節(jié)點退出集群,以根據(jù)集群中有節(jié)點退出集群的行為來偵測各個節(jié)點中是否有資源變動的。即,當集群中有節(jié)點退出集群時,由于集群中的其余節(jié)點都將刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源,因此資源發(fā)生了變動,當無節(jié)點退出集群時,則認為無資源變動。
[0040]觸發(fā)模塊30與第一偵測模塊10、第二偵測模塊20連接,用于根據(jù)分布式集群中有新節(jié)點加入或資源變動的行為,觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換。
[0041]執(zhí)行模塊40用于根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。具體的,請返回參閱圖2,分布式集群中的每個節(jié)點在本節(jié)點上記錄三種信息:本節(jié)點擁有的資源、本節(jié)點需要的資源類型和從其它節(jié)點上找到的本節(jié)點所需要的資源(簡稱找到的資源)。其中,在本實施例中,本節(jié)點擁有的資源中記錄為KeyN-ValueN,表示該節(jié)點擁有類型為KeyN的資源,該資源的內(nèi)容為ValueN ;本節(jié)點需要的資源類型中記錄為KeyN,表示該節(jié)點需要從其它節(jié)點上獲取類型為KeyN的資源;找到的資源中記錄為NodeX-KeyN-ValueM,表示從節(jié)點名為NodeX的節(jié)點上找到類型為KeyN的資源,該資源的內(nèi)容為ValueM。
[0042]具體的,執(zhí)行模塊40進一步包括第一請求單元41、第一接收單元42、第一發(fā)送單元43、第二接收單元44、第二發(fā)送單元45以及記錄單元46。第一請求單元41用于向第二節(jié)點請求資源交換,并發(fā)送第一節(jié)點的節(jié)點名以及第一節(jié)點的所需資源類型。第一接收單元42用于接收第一節(jié)點的請求信息,并根據(jù)請求信息在第二節(jié)點中查找本地資源。第一發(fā)送單元43用于向第一節(jié)點發(fā)送應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源類型。第二接收單元44用于接收第一發(fā)送單元發(fā)送的應答信息,并記錄在第二節(jié)點上找到的第一節(jié)點的所需資源類型,并根據(jù)第二節(jié)點的所需資源類型在第一節(jié)點的本地資源中查找相符的資源。第二發(fā)送單元45用于向第二節(jié)點發(fā)送應答信息,所述應答信息包括第一節(jié)點的節(jié)點名以及在第一節(jié)點上找到的第二節(jié)點的所需資源類型。記錄單元46用于接收第二發(fā)送單元發(fā)送的應答信息,并將在第一節(jié)點上找到的第二節(jié)點的所需資源類型記錄到找到的資源中。
[0043]下面就通過詳細介紹執(zhí)行模塊40進行資源交換的操作,以更好地理解分布式集群節(jié)點間的資源交換。
[0044]請參閱圖3,為了便于介紹,將參與資源交換的兩節(jié)點分別命名為節(jié)點I和節(jié)點2,圖4即表示節(jié)點I與節(jié)點2進行資源交換的過程。假設當前節(jié)點I本地擁有的資源為Keyl-Valuel和Key2_Value2,而節(jié)點I需要的資源是類型為Keyl、Key3和Key4的資源;節(jié)點2本地所擁有的資源有Key3_Value3和Key4_Value4,而節(jié)點2需要的資源類型為Key2和Key5。節(jié)點I和節(jié)點2當前均未有找到的資源。
[0045]本實施例中,假設是節(jié)點I向節(jié)點2發(fā)起資源交換的請求,這個過程包括如下六個步驟:
步驟1:節(jié)點I向節(jié)點2發(fā)送資源交換請求{Nodel, WantRKl},其中Nodel為節(jié)點I的節(jié)點名,WantRKl為節(jié)點I所需要的資源類型,在本實施例中,節(jié)點I所需要的資源類型即是 Keyl、Key3 和 Key4。
[0046]步驟2:節(jié)點2收到節(jié)點I發(fā)送的請求信息,并從中獲取節(jié)點I所需要的資源類型的信息,然后根據(jù)此信息,在本節(jié)點所擁有的資源中進行查找。在本實施例中,由于節(jié)點2上并沒有類型為Keyl的資源,所以節(jié)點2查找到的符合節(jié)點I要求的資源為Key3-ValUe3和 Key4_Value4。
[0047]步驟3:節(jié)點2向節(jié)點I發(fā)送應答信息{Node2,WantRK2, FoundRl},其中Node2為節(jié)點2的節(jié)點名,WantRK2為節(jié)點2所需要的資源類型:Key2和Key5,F(xiàn)oundRl為節(jié)點2上找到的節(jié)點I所需要的資源,即是Key3_Value3和Key4_Value4。[0048]步驟4:節(jié)點I收到節(jié)點2發(fā)送的應答信息{Node2,WantRK2, FoundRl}后,先將信息中的FoundRl以NodeX-KeyN-ValueM的形式記錄到找到的資源中。本實施例中,以Node2-Key3_Value3和Node2-Key4_Value4的形式進行記錄。然后,根據(jù)信息中的WantRK2進行與步驟2相同的操作,最后,節(jié)點I從本節(jié)點擁有的資源中查找出的符合節(jié)點2要求的資源為 Key2_Value2。
[0049]步驟5:節(jié)點I向節(jié)點2發(fā)送應答信息{Nodel, FoundR2},其中Nodel為節(jié)點I的節(jié)點名,F(xiàn)oundR2為節(jié)點I上找到的節(jié)點2所需要的資源,即是Key2_Value2。
[0050]步驟6:節(jié)點2收到節(jié)點I發(fā)送的應答信息{Node I,F(xiàn)oundR2}后,將信息中的FoundR2以NodeX-KeyN-ValueM的形式記錄到找到的資源中。本實施例中,是以Nodel-Key2-Value2的形式進行記錄。
[0051]如此,即完成了一次兩節(jié)點間的資源交換過程。在資源交換的過程中,每個節(jié)點上記錄的本地擁有的資源與所需要的資源類型的記錄是始終不變的,而改變的只有找到的資源的記錄。在上面這個例子中,節(jié)點I和節(jié)點2在完成資源交換后,兩個節(jié)點中找到的資源的記錄均發(fā)生了改變,即:節(jié)點I為Node2-Key3_Value3和Node2-Key4_Value4,節(jié)點2為Nodel-Key2-Value20
[0052]可以理解,集群節(jié)點間的資源交換是由多次兩節(jié)點間的資源交換所組成的,當某節(jié)點發(fā)起集群節(jié)點間資源交換的請求時,該節(jié)點需要依次與除本節(jié)點以外的所有節(jié)點均進行一次兩節(jié)點間的資源交換,至到與最后一個節(jié)點完成資源交換為止。另外,值得一提的是,對于某個節(jié)點來說,其它不同節(jié)點上所擁有的相同資源(即類型相同,內(nèi)容也相同的資源),也均屬于不同的資源。所以,即使某節(jié)點已經(jīng)從某個節(jié)點上獲取到了所有所需要類型的資源,但它仍然需要與其余節(jié)點進行資源交換,只有這樣才能保證該節(jié)點能夠獲取到集群中所有它所需要的資源。
[0053]當集群中的節(jié)點成員需要發(fā)生變動時,本發(fā)明的多節(jié)點間資源交換的方法以及系統(tǒng)無需手動修改所有節(jié)點的配置文件,而僅僅由該集群系統(tǒng)自動修改內(nèi)存記錄即可。而當對集群添加或刪除節(jié)點時,也無需將原先集群中的全部節(jié)點關閉再重新啟動,即可實現(xiàn)向集群添加節(jié)點或刪除節(jié)點的目的。此外,當某個節(jié)點向其它節(jié)點獲取資源時,可根據(jù)特定類型的資源進行交換,因此節(jié)省了帶寬。
[0054]需要說明的是,通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的硬件平臺的方式來實現(xiàn),當然也可以全部通過硬件來實施?;谶@樣的理解,本發(fā)明的技術方案對【背景技術】做出貢獻的全部或者部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
[0055]以上所揭露的僅為本發(fā)明實施例中的較佳實施例而已,當然不能以此來限定本發(fā)明之權利范圍,因此依本發(fā)明權利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【權利要求】
1.一種多節(jié)點間資源交換的方法,用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點,其特征在于,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中,所述方法包括: 偵測分布式集群中是否有新節(jié)點加入; 偵測各個節(jié)點中是否有資源變動; 如果分布式集群中有新節(jié)點加入或資源變動,則觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換;以及 根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
2.如權利要求1所述的多節(jié)點間資源交換的方法,其特征在于,所述偵測分布式集群中是否有新節(jié)點加入的步驟是根據(jù)所述節(jié)點的申請加入行為或邀請加入行為來進行的,且所述方法還包括:如果分布式集群中無新節(jié)點加入,則進一步偵測各個節(jié)點中是否有資源變動。
3.如權利要求1所述的多節(jié)點間資源交換的方法,其特征在于,進一步包括步驟: 偵測分布式集群中是否有節(jié)點退出集群; 如果是,則集群中的其余節(jié)點刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源。
4.如權利要求3所述的多節(jié)點間資源交換的方法,其特征在于,所述偵測各個節(jié)點中是否有資源變動的步驟是根 據(jù)集群中有節(jié)點退出集群的行為來進行的,且所述偵測分布式集群中是否有節(jié)點退出集群的步驟是通過心跳機制來偵測節(jié)點退出集群的行為的。
5.如權利要求1所述的多節(jié)點間資源交換的方法,其特征在于,所述根據(jù)第一節(jié)點與第二節(jié)點的本地資源以及所需資源類型進行資源交換的步驟包括: 第一節(jié)點向第二節(jié)點請求資源交換,并發(fā)送第一節(jié)點的節(jié)點名以及第一節(jié)點的所需資源類型; 第一節(jié)點接收第二節(jié)點的應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源; 第一節(jié)點記錄所述在第二節(jié)點上找到的第一節(jié)點的所需資源,并根據(jù)第二節(jié)點的所需資源類型在第一節(jié)點的本地資源中查找相符的資源;以及 第一節(jié)點向第二節(jié)點發(fā)送應答信息,所述應答信息包括第一節(jié)點的節(jié)點名以及在第一節(jié)點上找到的第二節(jié)點的所需資源。
6.如權利要求5所述的多節(jié)點間資源交換的方法,其特征在于,所述根據(jù)第一節(jié)點與第二節(jié)點的節(jié)點名以及所需資源類型進行資源交換的步驟還包括: 第二節(jié)點接收第一節(jié)點的請求信息,并根據(jù)第一節(jié)點的所需資源類型在第二節(jié)點的本地資源中查找相符的資源; 第二節(jié)點向第一節(jié)點發(fā)送應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源;以及 第二節(jié)點接收第一節(jié)點的應答信息,并將在第一節(jié)點上找到的第二節(jié)點的所需資源記錄到找到的資源中。
7.一種多節(jié)點間資源交換的方法,用于一分布式集群,所述分布式集群至少包括第一節(jié)點以及第二節(jié)點,其特征在于,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中,所述方法包括:新節(jié)點加入集群; 節(jié)點退出集群,使得資源發(fā)生變動; 根據(jù)所述新節(jié)點加入所述集群或資源變動的行為,觸發(fā)第一節(jié)點以及第二節(jié)點之間的資源交換;以及 根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
8.一種多節(jié)點間資源交換的系統(tǒng),用于一分布式集群,所述分布式集群包括至少兩個節(jié)點,其特征在于,每個節(jié)點所維護的其它節(jié)點成員的信息存儲在內(nèi)存中,所述多節(jié)點間資源交換的系統(tǒng)包括: 第一偵測模塊,用于偵測分布式集群中是否有新節(jié)點加入; 第二偵測模塊,用于偵測各個節(jié)點中是否有資源變動; 觸發(fā)模塊,用于根據(jù)分布式集群中有新節(jié)點加入或資源變動的行為,觸發(fā)第一節(jié)點與第二節(jié)點之間的資源交換;以及 執(zhí)行模塊,用于根據(jù)第一節(jié)點與第二節(jié)點的本地資源、所需資源類型以及找到的資源進行資源交換。
9.如權利要求8所述的多節(jié)點間資源交換的系統(tǒng),其特征在于,所述第二偵測模塊進一步用于偵測分布式集群中是否有節(jié)點退出集群,如果是,則集群中的其余節(jié)點都刪除本節(jié)點上所有屬于所述離開集群的節(jié)點的資源。
10.如權利要求8所述的多節(jié)點間資源交換的系統(tǒng),其特征在于,所述執(zhí)行模塊進一步包括: 第一請求單元,用于向第二節(jié)點請求資源交換,并發(fā)送第一節(jié)點的節(jié)點名以及第一節(jié)點的所需資源類型; 第一接收單元,用于接收第一節(jié)點的請求信息,并根據(jù)第一節(jié)點的所需資源類型在第二節(jié)點的本地資源中查找相符的資源; 第一發(fā)送單元,用于向第一節(jié)點發(fā)送應答信息,所述應答信息包括第二節(jié)點的節(jié)點名、第二節(jié)點的所需資源類型以及在第二節(jié)點上找到的第一節(jié)點的所需資源; 第二接收單元,用于接收第一發(fā)送單元發(fā)送的應答信息,并記錄在第二節(jié)點上找到的第一節(jié)點的所需資源,并根據(jù)第二節(jié)點的所需資源類型在第一節(jié)點的本地資源中查找相符的資源; 第二發(fā)送單元,用于向第二節(jié)點發(fā)送應答信息,所述應答信息包括第一節(jié)點的節(jié)點名以及在第一節(jié)點上找到的第二節(jié)點的所需資源;以及 記錄單元,用于接收第二發(fā)送單元發(fā)送的應答信息,并將在第一節(jié)點上找到的第二節(jié)點的所需資源記錄到找到的資源中。
【文檔編號】H04L29/08GK103618798SQ201310640996
【公開日】2014年3月5日 申請日期:2013年12月4日 優(yōu)先權日:2013年12月4日
【發(fā)明者】陳彬, 倪濤, 郭家棟 申請人:中安消技術有限公司