基于策略的儲(chǔ)存結(jié)構(gòu)分布的制作方法
【專(zhuān)利說(shuō)明】基于策略的儲(chǔ)存結(jié)構(gòu)分布
[0001]本申請(qǐng)是2010年4月16日遞交的申請(qǐng)?zhí)枮?01080026694.6、發(fā)明名稱(chēng)為“基于策略的儲(chǔ)存結(jié)構(gòu)分布”的發(fā)明專(zhuān)利申請(qǐng)的分案申請(qǐng)。
[0002]背景
技術(shù)領(lǐng)域
[0003]所公開(kāi)的實(shí)施方案一般地涉及分布儲(chǔ)存結(jié)構(gòu),并且更具體地,涉及跨多個(gè)服務(wù)器分布基于策略的儲(chǔ)存結(jié)構(gòu)。
【背景技術(shù)】
[0004]數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)行構(gòu)成,其中每行被劃分為列或字段。一般地,一個(gè)字段被指定為關(guān)鍵字字段(key field)。在數(shù)據(jù)庫(kù)結(jié)構(gòu)中,每個(gè)關(guān)鍵字應(yīng)當(dāng)是唯一的。當(dāng)使用者插入新數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)可以自動(dòng)產(chǎn)生關(guān)鍵字,但使用者也可以產(chǎn)生關(guān)鍵字并且使所述關(guān)鍵字與所插入的數(shù)據(jù)一起被包括。如果使用者試圖針對(duì)已在使用中的關(guān)鍵字增加數(shù)據(jù),則導(dǎo)致錯(cuò)誤。例如,新數(shù)據(jù)會(huì)重寫(xiě)(overwrite)已經(jīng)與該關(guān)鍵字相關(guān)聯(lián)的數(shù)據(jù)。
[0005]利用傳統(tǒng)方法,由手動(dòng)或手工完成在一組服務(wù)器上的數(shù)據(jù)庫(kù)中的數(shù)據(jù)分布。例如,在銀行業(yè)背景下,數(shù)據(jù)庫(kù)可以包括銀行數(shù)據(jù)、待決(pending)交易以及其他銀行業(yè)信息。銀行的客戶(hù)(customer)擁有銀行賬戶(hù),銀行賬戶(hù)具有銀行賬戶(hù)號(hào)碼。在任何時(shí)候,可以對(duì)每個(gè)賬戶(hù)進(jìn)行多種操作。每個(gè)數(shù)據(jù)片(Piece of data)、每個(gè)要被執(zhí)行的交易或者每個(gè)待決操作與賬戶(hù)號(hào)碼(關(guān)鍵字)相關(guān)聯(lián)。如果這些操作使用賬戶(hù)號(hào)碼作為關(guān)鍵字來(lái)以普通數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)行儲(chǔ)存,在任何一次,僅有一條信息可以與該賬戶(hù)號(hào)碼相關(guān)聯(lián)。因?yàn)樵跀?shù)據(jù)庫(kù)中,每個(gè)關(guān)鍵字僅允許一個(gè)輸入(entry),所以當(dāng)針對(duì)同一賬戶(hù)號(hào)碼的多個(gè)交易都是待決的時(shí)候,則會(huì)出現(xiàn)問(wèn)題和導(dǎo)致錯(cuò)誤。
[0006]如果對(duì)一賬戶(hù)有多于一個(gè)操作正被執(zhí)行,則將會(huì)保持針對(duì)該賬戶(hù)號(hào)碼的一隊(duì)列。在大量賬戶(hù)的情況下,單個(gè)服務(wù)器可能無(wú)法處理針對(duì)每個(gè)賬戶(hù)的所有數(shù)據(jù)和隊(duì)列。結(jié)果,賬戶(hù)和賬戶(hù)隊(duì)列應(yīng)當(dāng)被分布在一組服務(wù)器上。這樣的任務(wù)是困難的,并且難于管理。增加或移去服務(wù)器只會(huì)增加管理的復(fù)雜度,因?yàn)殛?duì)列和數(shù)據(jù)應(yīng)當(dāng)在所述服務(wù)器組上被重新平衡。這會(huì)達(dá)到成千上萬(wàn)個(gè)需要在一組消息服務(wù)器上被手動(dòng)平衡或歸位(home)的隊(duì)列。
[0007]在包括每個(gè)關(guān)鍵字具有潛在的多個(gè)輸入、交易或操作的大型數(shù)據(jù)庫(kù)的任何背景(銀行業(yè)或其他)下,可以針對(duì)每個(gè)具有多個(gè)輸入的關(guān)鍵字創(chuàng)建隊(duì)列。由于這樣的系統(tǒng)難于手動(dòng)地調(diào)度這樣大量的隊(duì)列,所以其難于管理。所述調(diào)度不是自動(dòng)的并且是低效的。此夕卜,當(dāng)服務(wù)器進(jìn)入或離開(kāi)服務(wù)器群時(shí),會(huì)引入更大的復(fù)雜性,因?yàn)楣芾碚邉t必須在一組新的服務(wù)器上重新計(jì)算和重新分布數(shù)據(jù)和待決交易。
【發(fā)明內(nèi)容】
[0008]本公開(kāi)涉及這樣的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)允許每個(gè)關(guān)鍵字多個(gè)輸入。在實(shí)施方案中,數(shù)據(jù)結(jié)構(gòu)可以類(lèi)似于小隊(duì)列的表或微型隊(duì)列的表,在所述微型隊(duì)列中每個(gè)微型隊(duì)列輸入具有相同的關(guān)鍵字。
[0009]本公開(kāi)還涉及通過(guò)將特定關(guān)鍵字值映射到特定節(jié)點(diǎn)或服務(wù)器群,在一組服務(wù)器上對(duì)隊(duì)列進(jìn)行自動(dòng)分布。在實(shí)施方案中,一致性哈希(consistent hashing)被用來(lái)確定隊(duì)列在所述服務(wù)器組上的分布。
[0010]本公開(kāi)還涉及對(duì)一組服務(wù)器自動(dòng)且高效地增加或移除節(jié)點(diǎn)。在實(shí)施方案中,一致性哈希可以被用來(lái)對(duì)一組服務(wù)器增加或移除節(jié)點(diǎn)。
[0011 ] 本公開(kāi)還涉及實(shí)施分布式容錯(cuò)儲(chǔ)存架構(gòu)。在實(shí)施方案中,一致性哈??梢员挥脕?lái)提供并行分布式容錯(cuò)。
[0012]本公開(kāi)還涉及一種位于一個(gè)或更多個(gè)計(jì)算設(shè)備的系統(tǒng)上的數(shù)據(jù)儲(chǔ)存器,所述數(shù)據(jù)儲(chǔ)存器包括可執(zhí)行代碼,所述可執(zhí)行代碼執(zhí)行下列步驟:接收多個(gè)數(shù)據(jù)輸入,所述多個(gè)數(shù)據(jù)輸入包括:第一數(shù)據(jù)輸入,所述第一數(shù)據(jù)輸入具有一個(gè)或更多個(gè)字段,其中至少一個(gè)字段為關(guān)鍵字字段,并且其中所述第一數(shù)據(jù)輸入在所述關(guān)鍵字字段中具有第一關(guān)鍵字值;第二數(shù)據(jù)輸入,所述第二數(shù)據(jù)輸入具有一個(gè)或更多個(gè)字段,其中至少一個(gè)字段為關(guān)鍵字字段,并且其中所述第二數(shù)據(jù)輸入在所述關(guān)鍵字字段中具有所述第一關(guān)鍵字值;以及將所述多個(gè)數(shù)據(jù)輸入儲(chǔ)存在所述數(shù)據(jù)儲(chǔ)存器中的空間內(nèi)。
[0013]其中,所述空間包括:數(shù)據(jù)庫(kù)和表中的一個(gè);以及基于策略的儲(chǔ)存結(jié)構(gòu)。
[0014]其中,所述第一數(shù)據(jù)輸入和所述第二數(shù)據(jù)輸入共同地包括基于策略的儲(chǔ)存結(jié)構(gòu)。
[0015]其中,所述基于策略的儲(chǔ)存結(jié)構(gòu)為微隊(duì)列。
[0016]其中,所述基于策略的儲(chǔ)存結(jié)構(gòu)可操作來(lái)實(shí)現(xiàn)隊(duì)列語(yǔ)義。
[0017]其中,所述隊(duì)列語(yǔ)義包括以下內(nèi)容中的至少一個(gè):歸類(lèi)、排序、先入先出以及后入先出隊(duì)列語(yǔ)義。
[0018]其中,所述空間包括至少一個(gè)基于策略的儲(chǔ)存結(jié)構(gòu),其中所述至少一個(gè)基于策略的儲(chǔ)存結(jié)構(gòu)包括:所述第一數(shù)據(jù)輸入;所述第二數(shù)據(jù)輸入;以及所述多個(gè)數(shù)據(jù)輸入中的任何相關(guān)數(shù)據(jù)輸入,其中所述相關(guān)數(shù)據(jù)輸入具有一個(gè)或更多個(gè)字段,其中至少一個(gè)字段為所述關(guān)鍵字字段,并且其中所述任何相關(guān)數(shù)據(jù)輸入在所述關(guān)鍵字字段中具有所述第一關(guān)鍵字值。
[0019]其中,所述數(shù)據(jù)儲(chǔ)存器還包括第二基于策略的儲(chǔ)存結(jié)構(gòu),所述第二基于策略的儲(chǔ)存結(jié)構(gòu)包括:所述多個(gè)數(shù)據(jù)輸入的第三數(shù)據(jù)輸入,其中所述第三數(shù)據(jù)輸入具有一個(gè)或更多個(gè)字段,其中至少一個(gè)字段為所述關(guān)鍵字字段,并且其中所述第三數(shù)據(jù)輸入在所述關(guān)鍵字字段中具有第二關(guān)鍵字值;以及所述多個(gè)數(shù)據(jù)輸入的第四數(shù)據(jù)輸入,其中所述第四數(shù)據(jù)輸入具有一個(gè)或更多個(gè)字段,其中至少一個(gè)字段為所述關(guān)鍵字字段,并且其中所述第四數(shù)據(jù)輸入在所述關(guān)鍵字字段中具有第二關(guān)鍵字字段。
[0020]其中,所述基于策略的儲(chǔ)存結(jié)構(gòu)為微隊(duì)列。
[0021]其中,所述基于策略的儲(chǔ)存結(jié)構(gòu)包括隊(duì)列、鏈表、數(shù)組、堆棧、樹(shù)和圖中的一個(gè)。
[0022]其中,所述多個(gè)數(shù)據(jù)輸入通過(guò)指定所述關(guān)鍵字值是可存取的。
[0023]其中,所述多個(gè)數(shù)據(jù)輸入的具有特定關(guān)鍵字值的數(shù)據(jù)輸入包括微隊(duì)列,并且其中所述微隊(duì)列通過(guò)指定所述特定關(guān)鍵字值是可存取的。
[0024]其中,所述多個(gè)數(shù)據(jù)輸入包括操作或交易數(shù)據(jù)。
[0025]本公開(kāi)還涉及一種用于在安裝于一個(gè)或更多個(gè)計(jì)算設(shè)備上的一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)上分布基于策略的數(shù)據(jù)結(jié)構(gòu)的方法,所述方法包括:確定來(lái)自一空間的至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu),所述確定步驟包括:識(shí)別所述空間中的至少一個(gè)數(shù)據(jù)輸入;確定所述至少一個(gè)數(shù)據(jù)輸入的關(guān)鍵字值;將所述至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)映射到所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)中的節(jié)點(diǎn)、節(jié)點(diǎn)群、服務(wù)器和服務(wù)器群中的一個(gè),所述映射步驟包括使用考慮所述關(guān)鍵字值的分布算法。
[0026]其中,所述映射所述至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)的步驟包括在所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)上分布至少一個(gè)微隊(duì)列的操作。
[0027]其中,所述映射步驟包括使用一致性哈希算法。
[0028]其中,所述映射步驟包括:使用一致性哈希算法將所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)中的節(jié)點(diǎn)映射到一刻度;使用所述一致性哈希算法將所述至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)映射到所述刻度;將所述至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)分配給最靠近節(jié)點(diǎn),所述最靠近節(jié)點(diǎn)是在所述刻度上最靠近所述基于策略的數(shù)據(jù)結(jié)構(gòu)被映射的節(jié)點(diǎn)。
[0029]其中,所述使用一致性哈希算法將所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)中的節(jié)點(diǎn)映射到一刻度的步驟導(dǎo)致節(jié)點(diǎn)的基本上均勻分布。
[0030]其中,所述使用一致性哈希算法將所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)中的節(jié)點(diǎn)映射到一刻度的步驟導(dǎo)致節(jié)點(diǎn)的基本上非均勻分布。
[0031]其中,所述確定所述空間中的至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)的步驟包括通過(guò)基于每個(gè)數(shù)據(jù)輸入的關(guān)鍵字值對(duì)所述空間中的數(shù)據(jù)輸入進(jìn)行分組來(lái)確定多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu),并且其中所述映射所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)的步驟包括:使用一致性哈希算法將所述一個(gè)或更多個(gè)服務(wù)器的系統(tǒng)中的節(jié)點(diǎn)映射到一刻度;使用所述一致性哈希算法將所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)映射到所述刻度,其中所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)中的每個(gè)包括一組具有相同關(guān)鍵字值的數(shù)據(jù)輸入,并且其中所述將所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)映射到所述刻度的步驟包括將所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)中的每個(gè)的所述關(guān)鍵字值映射到所述刻度;以及通過(guò)將所述基于策略的數(shù)據(jù)結(jié)構(gòu)中的每個(gè)分配到在所述刻度上最靠近所述基于策略的數(shù)據(jù)結(jié)構(gòu)被映射的節(jié)點(diǎn),將所述多個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)分配給所述映射的節(jié)點(diǎn)。
[0032]其中,所述映射所述至少一個(gè)基于策略的數(shù)據(jù)結(jié)構(gòu)的步驟導(dǎo)致基于策略的數(shù)據(jù)結(jié)構(gòu)在一組節(jié)點(diǎn)或服務(wù)器上的基本上均勻分布。
[0033]本公開(kāi)還涉及一種對(duì)計(jì)算節(jié)點(diǎn)集合增加節(jié)點(diǎn)的方法,所述方法包括:將新節(jié)點(diǎn)加入所述計(jì)算節(jié)點(diǎn)集合作為依附節(jié)點(diǎn);在所述依附節(jié)點(diǎn)處接收來(lái)自所述計(jì)算節(jié)點(diǎn)集合中其他主動(dòng)節(jié)點(diǎn)的信息;以及此后,將所述依附節(jié)點(diǎn)升級(jí)為所述計(jì)算節(jié)點(diǎn)集合中的主動(dòng)節(jié)點(diǎn)。
[0034]其中,所述加入所述新節(jié)點(diǎn)作為依附節(jié)點(diǎn)的步驟包括所述依附節(jié)點(diǎn)與所述計(jì)算節(jié)點(diǎn)集合中的所述其他主動(dòng)節(jié)點(diǎn)相互作用。
[0035]其中,所述加入所述新節(jié)點(diǎn)作為依附節(jié)點(diǎn)的步驟包括所述依附節(jié)點(diǎn)獲得所述計(jì)算節(jié)點(diǎn)集合中的所述其他主動(dòng)節(jié)點(diǎn)的關(guān)鍵字空間。
[0036]其中,所述接收信息的步驟包括接收與一旦所述新節(jié)點(diǎn)成為主動(dòng)節(jié)點(diǎn)時(shí)所述新節(jié)點(diǎn)將擁有的關(guān)鍵字值相關(guān)聯(lián)的關(guān)鍵字值的拷貝。
[0037]其中,所述接收信息的步驟包括協(xié)調(diào)所述依附節(jié)點(diǎn)與所述計(jì)算節(jié)點(diǎn)集合中的所述其他主動(dòng)節(jié)點(diǎn)之間的數(shù)據(jù)。
[0038]其中,所述接收信息的步驟包括所述依附節(jié)點(diǎn)監(jiān)控更新的關(guān)鍵字值。
[0039]其中,接收信息的步驟還包括使用一致性哈希算法計(jì)算關(guān)鍵字值在包括所述新節(jié)點(diǎn)的計(jì)算節(jié)點(diǎn)集合上的分布。
[0040]本公開(kāi)還涉及一種從計(jì)算節(jié)點(diǎn)集合移除要離開(kāi)的節(jié)點(diǎn)的方法,所述方法包括:所述要離開(kāi)的節(jié)點(diǎn)發(fā)信號(hào)通知所述計(jì)算節(jié)