本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種分布式系統(tǒng)中命令分發(fā)方法、裝置及系統(tǒng)。
背景技術(shù):
在分布式系統(tǒng)中,為了保證分布式系統(tǒng)的容災(zāi)性,需要保證服務(wù)器集群(即處于分布式系統(tǒng)中的所有服務(wù)器)中每個(gè)服務(wù)器數(shù)據(jù)的一致性。其中,為了保證服務(wù)器集群中每個(gè)服務(wù)器數(shù)據(jù)的一致性,將從服務(wù)器集群中選擇一個(gè)服務(wù)器作為主服務(wù)器,并將其余的服務(wù)器作為從服務(wù)器,主服務(wù)器負(fù)責(zé)接收客戶端發(fā)送的命令,當(dāng)主服務(wù)器接收的命令為寫命令時(shí),主服務(wù)器執(zhí)行這個(gè)命令,并將這個(gè)命令通過異步的方式發(fā)送給所有從服務(wù)器執(zhí)行。當(dāng)主服務(wù)器接收的命令為讀命令時(shí),由于主服務(wù)器中的數(shù)據(jù)包括所有備份數(shù)據(jù),因此,主服務(wù)器將直接執(zhí)行這個(gè)命令。然而,由于讀命令只能在主服務(wù)器上執(zhí)行,將會(huì)導(dǎo)致主服務(wù)器的負(fù)載過高。
技術(shù)實(shí)現(xiàn)要素:
本申請中的術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括一個(gè)或者更多個(gè)該特征。在本發(fā)明的描述中,除非另有說明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。本申請中的術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,a和/或b,可以表示:單獨(dú)存在a,同時(shí)存在a和b,單獨(dú)存在b這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
本發(fā)明實(shí)施例公開了一種分布式系統(tǒng)中命令分發(fā)方法、裝置及系統(tǒng),用 于降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
本實(shí)施例第一方面公開一種命令分發(fā)方法,包括:接收客戶端發(fā)送的攜帶有命令類型的第一命令,當(dāng)?shù)谝幻畹拿铑愋陀糜谥甘镜谝幻顬樽x命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,以及發(fā)送第一命令至目標(biāo)服務(wù)器,以便目標(biāo)服務(wù)器執(zhí)行第一命令,即目標(biāo)服務(wù)器讀取第一命令所要讀取的數(shù)據(jù)并發(fā)送給本端;服務(wù)器集群可以包括分布式系統(tǒng)中的所有服務(wù)器,也可以包括存儲(chǔ)有第一命令所需操作數(shù)據(jù)的服務(wù)器。由于目標(biāo)服務(wù)器是從服務(wù)器集群中按照預(yù)設(shè)規(guī)則選取的一個(gè)服務(wù)器,可以為服務(wù)器集群中的主服務(wù)器,也可以為服務(wù)器集群中的從服務(wù)器,因此,讀命令不一定全部發(fā)送至服務(wù)器集群中的主服務(wù)器執(zhí)行,可以減少服務(wù)器集群中的主服務(wù)器上執(zhí)行的讀命令的數(shù)量,從而可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
在一個(gè)實(shí)施例中,根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器時(shí),可以先從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,之后從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,從而可以保證當(dāng)?shù)谝幻顬樽x命令時(shí),能夠從目標(biāo)服務(wù)器讀取到的數(shù)據(jù)是最新數(shù)據(jù)。第二命令是在第一命令前接收的與第一命令的接收時(shí)間相距最近的寫命令,第一命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同。
在一個(gè)實(shí)施例中,從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器時(shí),可以先將第二命令的索引值與服務(wù)器集群中每個(gè)服務(wù)器最近執(zhí)行完的目標(biāo)寫命令(即執(zhí)行完的時(shí)間與當(dāng)前時(shí)間距離最短的目標(biāo)寫命令)的索引值進(jìn)行比較,之后從服務(wù)器集群中選取最近執(zhí)行完的目標(biāo)寫命令的索引值等于第二命令的索引值的服務(wù)器為候選服務(wù)器,即選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,從而可以保證候選服務(wù)器中第一命令所要讀取的數(shù)據(jù)都為最新的數(shù)據(jù)。其中,一個(gè)命令唯一對應(yīng)一個(gè)索引值。
在一個(gè)實(shí)施例中,當(dāng)在第一命令前接收且與第一命令相鄰的第三命令為讀命令,且第三命令的候選服務(wù)器為服務(wù)器集群時(shí),即在本端處理第三命令時(shí)服務(wù)器集群中每個(gè)服務(wù)器均執(zhí)行完了第一命令前接收的與第三命令的接收 時(shí)間相距最近的寫命令時(shí),直接將服務(wù)器集群確定為第一命令的候選服務(wù)器,以及直接將為第三命令確定的目標(biāo)服務(wù)器作為第一命令的目標(biāo)服務(wù)器,可以減少從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器的處理步驟,因此,當(dāng)有兩個(gè)連續(xù)的讀命令時(shí)可以減少處理步驟,從而可以提高命令處理效率;當(dāng)?shù)谝幻钋敖邮涨遗c第一命令相鄰的第三命令為讀命令,且第三命令的候選服務(wù)器不是服務(wù)器集群時(shí),即在本端處理第三命令時(shí)服務(wù)器集群中只有部分服務(wù)器執(zhí)行完了第三命令前接收的與第三命令的接收時(shí)間相距最近的寫命令時(shí),在為第三命令確定目標(biāo)服務(wù)器或?qū)⒌谌畎l(fā)送給確定的目標(biāo)服務(wù)器的過程中,服務(wù)器集群中可能又有服務(wù)器執(zhí)行完了第三命令前接收的與第三命令的接收時(shí)間相距最近的寫命令,將需要重新為第一命令從服務(wù)器集群中選取所有執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,從而可以增加候選服務(wù)器數(shù)量,以便從新選取的候選服務(wù)器中選擇出負(fù)載最低的服務(wù)器;第一命令與第三命令所需操作數(shù)據(jù)的標(biāo)識相同。
在一個(gè)實(shí)施例中,當(dāng)在第一命令前接收且與第一命令相鄰的第四命令為寫命令時(shí),才從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,以及當(dāng)在第一命令后接收且與第一命令相鄰的第五命令為讀命令時(shí),如果第五命令是在發(fā)送第一命令前接收到的,可以在發(fā)送第一命令至目標(biāo)服務(wù)器的同時(shí),將第五命令也發(fā)送給目標(biāo)服務(wù)器,因此,當(dāng)有兩個(gè)連續(xù)的讀命令時(shí)可以減少處理步驟,從而可以提高命令處理效率;第一命令、第四命令以及第五命令所需操作數(shù)據(jù)的標(biāo)識相同。
在一個(gè)實(shí)施例中,從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器時(shí),可以從候選服務(wù)器中確定負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器,從而可以在保證第一命令讀取到最新數(shù)據(jù)的同時(shí),可以均衡服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載。
在一個(gè)實(shí)施例中,根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器時(shí),可以直接從服務(wù)器集群中選取負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器,可以保證將讀命令分發(fā)給負(fù)載最低的服務(wù)器,以便均衡服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載。
在一個(gè)實(shí)施例中,當(dāng)分布式系統(tǒng)中包括至少兩個(gè)命令分發(fā)裝置時(shí),為了合理利用這些命令分發(fā)裝置,這些命令分發(fā)裝置中每個(gè)裝置分別維護(hù)一部分?jǐn)?shù)據(jù),即負(fù)責(zé)將客戶端發(fā)送的這些數(shù)據(jù)寫入服務(wù)器,同時(shí)從服務(wù)器讀取這些數(shù)據(jù),每個(gè)數(shù)據(jù)對應(yīng)一個(gè)關(guān)鍵值。因此,第一命令還可以攜帶有關(guān)鍵值,判斷第一命令是否屬于本端處理的命令,即判斷第一命令攜帶的關(guān)鍵值是否屬于本端維護(hù)的關(guān)鍵值范圍,也即是判斷第一命令所要操作的數(shù)據(jù)是否屬于本端維護(hù)的數(shù)據(jù),當(dāng)?shù)谝幻顢y帶的關(guān)鍵值屬于本端維護(hù)的關(guān)鍵值范圍時(shí),表明第一命令屬于本端處理的命令,將繼續(xù)執(zhí)行后續(xù)處理,當(dāng)?shù)谝幻顢y帶的關(guān)鍵值不屬于本端維護(hù)的關(guān)鍵值范圍時(shí),表明第一命令不屬于本端處理的命令,可以將第一命令發(fā)送給處理第一命令的命令分發(fā)裝置。
在一個(gè)實(shí)施例中,當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為寫命令時(shí),發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器,以便主服務(wù)器執(zhí)行第一命令以及將第一命令發(fā)送給從服務(wù)器執(zhí)行。
在一個(gè)實(shí)施例中,當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為寫命令時(shí),可以先判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,當(dāng)接收到該返回消息時(shí),才發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器,可以保證第六命令可以讀取到未被第一命令修改的數(shù)據(jù),從而可以保證讀取數(shù)據(jù)的準(zhǔn)確率。該返回消息為執(zhí)行第六命令的服務(wù)器執(zhí)行完成第六命令后返回的消息,第六命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的讀命令,第一命令與第六命令所需操作數(shù)據(jù)的標(biāo)識相同。
在一個(gè)實(shí)施例中,當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為讀命令時(shí),才判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,當(dāng)?shù)谄呙顬閷懨顣r(shí),不需要執(zhí)行該判斷步驟,因此,當(dāng)有兩個(gè)連續(xù)的寫命令時(shí)可以減少處理步驟,從而可以提高命令處理效率。其中,第一命令與第七命令所需操作數(shù)據(jù)的標(biāo)識相同,即它們攜帶的關(guān)鍵值相同。
在一個(gè)實(shí)施例中,主服務(wù)器在執(zhí)行第一命令的同時(shí),還可以判斷它的負(fù)載是否超過預(yù)設(shè)值,當(dāng)負(fù)載超過預(yù)設(shè)值時(shí),表明主服務(wù)器的負(fù)載過高,主服務(wù)器將向本端發(fā)送負(fù)載過高消息,本端接收到主服務(wù)器發(fā)送的負(fù)載過高消息 之后,將響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,并向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,以便選取的服務(wù)器執(zhí)行主服務(wù)器的功能,從而可以根據(jù)服務(wù)器集群中服務(wù)器的負(fù)載將主服務(wù)器由高負(fù)載的服務(wù)器路由到低負(fù)載的服務(wù)器,以便均衡服務(wù)器集群中服務(wù)器的負(fù)載同時(shí)保證主服務(wù)器能夠正常執(zhí)行主服務(wù)器的功能。
在一個(gè)實(shí)施例中,本端可以實(shí)時(shí)或周期性地監(jiān)測主服務(wù)器上的負(fù)載情況,當(dāng)檢測到主服務(wù)器上的負(fù)載超過預(yù)設(shè)值時(shí),將根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,并向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,可以使選取的服務(wù)器執(zhí)行主服務(wù)器的功能。
本發(fā)明實(shí)施例第二方面公開一種命令分發(fā)裝置,該命令分發(fā)裝置包括用于執(zhí)行本發(fā)明實(shí)施例第一方面或第一方面的任一種可能實(shí)現(xiàn)方式所公開的命令分發(fā)方法的單元。
本發(fā)明實(shí)施例第三方面公開一種命令分發(fā)裝置,該命令分發(fā)裝置包括處理器、存儲(chǔ)器、收發(fā)器。其中,存儲(chǔ)器用于存儲(chǔ)一組程序代碼,處理器用于執(zhí)行存儲(chǔ)器存儲(chǔ)的程序代碼,收發(fā)器用于在處理器的控制下與客戶端或服務(wù)器進(jìn)行通信。當(dāng)處理器執(zhí)行存儲(chǔ)器存儲(chǔ)的程序代碼時(shí),可根據(jù)存儲(chǔ)器存儲(chǔ)的程序代碼執(zhí)行本發(fā)明實(shí)施例第一方面或第一方面的任一種可能實(shí)現(xiàn)方式所公開的命令分發(fā)方法。
本發(fā)明實(shí)施例第四方面公開一種可讀存儲(chǔ)介質(zhì),該可讀存儲(chǔ)介質(zhì)存儲(chǔ)了命令分發(fā)裝置用于執(zhí)行本發(fā)明實(shí)施例第一方面或第一方面的任一種可能實(shí)現(xiàn)方式所公開的命令分發(fā)方法的程序代碼。
本發(fā)明實(shí)施例第五方面公開一種命令分發(fā)系統(tǒng),包括客戶端、命令分發(fā)裝置和服務(wù)器集群,命令分發(fā)裝置能夠執(zhí)行本發(fā)明實(shí)施例第一方面或第一方面的任一種可能實(shí)現(xiàn)方式所公開的命令分發(fā)方法;
客戶端,用于向命令分發(fā)裝置發(fā)送命令,并接收命令分發(fā)裝置發(fā)送的數(shù)據(jù)或消息;
服務(wù)器集群,用于接收命令分發(fā)裝置發(fā)送的命令并執(zhí)行。
本發(fā)明實(shí)施例中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例公開的一種命令分發(fā)網(wǎng)絡(luò)架構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例公開的一種命令分發(fā)方法的流程示意圖;
圖3是本發(fā)明實(shí)施例公開的另一種命令分發(fā)方法的流程示意圖;
圖4是本發(fā)明實(shí)施例公開的一種命令分發(fā)裝置的結(jié)構(gòu)示意圖;
圖5是本發(fā)明實(shí)施例公開的另一種命令分發(fā)裝置的結(jié)構(gòu)示意圖;
圖6是本發(fā)明實(shí)施例公開的又一種命令分發(fā)裝置的結(jié)構(gòu)示意圖;
圖7是本發(fā)明實(shí)施例公開的一種命令分發(fā)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例公開了一種命令分發(fā)方法、裝置及系統(tǒng),用于降低服務(wù)器集群中主服務(wù)器上的負(fù)載。以下分別進(jìn)行詳細(xì)說明。
為了更好地理解本發(fā)明實(shí)施例公開的一種命令分發(fā)方法及裝置,下面先對本發(fā)明實(shí)施例使用的網(wǎng)絡(luò)架構(gòu)進(jìn)行描述。請參閱圖1,圖1是本發(fā)明實(shí)施例 公開的一種命令分發(fā)網(wǎng)絡(luò)架構(gòu)示意圖。如圖1所示,該命令分發(fā)網(wǎng)絡(luò)架構(gòu)可以包括至少一個(gè)客戶端101和服務(wù)端102,服務(wù)端102可以包括至少一個(gè)命令分發(fā)裝置1021,以及由至少兩個(gè)服務(wù)器1022組成的服務(wù)器集群。命令分發(fā)裝置1021可以是獨(dú)立的裝置,也可以是設(shè)置在服務(wù)器1022上的裝置,本實(shí)施例不作限定。服務(wù)器集群中的一個(gè)服務(wù)器1022為主服務(wù)器,其余服務(wù)器1022為從服務(wù)器。當(dāng)客戶端101需要在服務(wù)器集群中存儲(chǔ)數(shù)據(jù)時(shí),客戶端101可以將數(shù)據(jù)以寫命令的方式通過網(wǎng)絡(luò)發(fā)送給命令分發(fā)裝置1021,命令分發(fā)裝置1021將接收的寫命令通過網(wǎng)絡(luò)發(fā)送給主服務(wù)器1022,主服務(wù)器1022執(zhí)行接收的寫命令,并將寫命令發(fā)送給所有從服務(wù)器執(zhí)行;當(dāng)客戶端101需要從服務(wù)器集群中讀取數(shù)據(jù)時(shí),客戶端101向命令分發(fā)裝置1021發(fā)送讀命令,命令分發(fā)裝置1021將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將讀命令發(fā)送給這個(gè)服務(wù)器1022,這個(gè)服務(wù)器1022將讀命令所需讀取數(shù)據(jù)發(fā)送給命令分發(fā)裝置1021,命令分發(fā)裝置1021將讀取的數(shù)據(jù)發(fā)送給該客戶端101。其中,服務(wù)器集群中的主服務(wù)器不是一成不變的,當(dāng)主服務(wù)器的負(fù)載大于預(yù)設(shè)值時(shí),可以將從服務(wù)器中負(fù)載最低的服務(wù)器設(shè)置為主服務(wù)器,將原先的主服務(wù)器設(shè)置為從服務(wù)器。其中,當(dāng)包括至少兩個(gè)命令分發(fā)裝置1021時(shí),命令分發(fā)裝置1021間可以通過網(wǎng)絡(luò)進(jìn)行通信,每個(gè)命令分發(fā)裝置1021維護(hù)一個(gè)關(guān)鍵(key)值范圍,當(dāng)接收的讀或?qū)懨畹年P(guān)鍵值處于這個(gè)key值范圍時(shí),將由該命令分發(fā)裝置1021將該命令發(fā)送給服務(wù)器1022,當(dāng)接收的讀或?qū)懨畹拿钪挡辉谶@個(gè)key值范圍時(shí),將這個(gè)命令發(fā)送至該命令值所屬范圍對應(yīng)的命令分發(fā)裝置1021,由對應(yīng)的命令分發(fā)裝置1021進(jìn)行處理。其中,圖1中只示意出了只包括一個(gè)命令分發(fā)裝置1021和一個(gè)客戶端101的情況。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖2,圖2是本發(fā)明實(shí)施例公開的一種命令分發(fā)方法的流程示意圖。其中,本發(fā)明實(shí)施例是從命令分發(fā)裝置1021的角度來描述的。如圖2所示,該命令分發(fā)方法可以包括以下步驟。
201、接收客戶端發(fā)送的攜帶有命令類型的第一命令。
202、當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為讀命令時(shí),根據(jù)預(yù) 設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,并發(fā)送第一命令至目標(biāo)服務(wù)器。
本實(shí)施例中,當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為讀命令之后,將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,并發(fā)送第一命令至目標(biāo)服務(wù)器,可見,當(dāng)?shù)谝幻顬樽x命令時(shí),不一定發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低主服務(wù)器的負(fù)載。
作為一種可能的實(shí)施方式,根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器時(shí),可以先從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,即從服務(wù)器集群中選取執(zhí)行完在第一命令前接收的所有寫命令(這些寫命令與第一命令攜帶的關(guān)鍵值相同,即與第一命令所需操作數(shù)據(jù)的標(biāo)識相同)的服務(wù)器為候選服務(wù)器,保證第一命令讀取候選服務(wù)器中的數(shù)據(jù)時(shí),這些寫命令已完成了對所操作數(shù)據(jù)的修改,保證第一命令可以讀取到最新數(shù)據(jù)。之后從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,可以是從候選服務(wù)器中任選一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,也可以是從候選服務(wù)器中確定負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器,可以保證第一命令在讀取到最新數(shù)據(jù)的同時(shí)均衡服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載。第二命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的寫命令,第一命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同,即第一命令和第二命令攜帶的關(guān)鍵值相同。由于索引值與命令一一對應(yīng),因此,在從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器時(shí),可以將第二命令的索引值與服務(wù)器集群中每個(gè)服務(wù)器最近執(zhí)行完的目標(biāo)寫命令的索引值進(jìn)行比較,并從服務(wù)器集群中選取最近執(zhí)行完的目標(biāo)寫命令的索引值等于第二命令的索引值的服務(wù)器為候選服務(wù)器,即選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,目標(biāo)寫命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同。其中,服務(wù)器執(zhí)行所需操作數(shù)據(jù)的標(biāo)識相同的寫命令時(shí),是按照寫命令的索引值從高到低依次執(zhí)行寫命令的。
本實(shí)施例中,在命令分發(fā)裝置中,一個(gè)數(shù)據(jù)對應(yīng)一個(gè)等待隊(duì)列,即一個(gè)關(guān)鍵值對應(yīng)一個(gè)等待隊(duì)列,命令分發(fā)裝置接收到第一命令時(shí),當(dāng)?shù)谝幻顬樽x命令時(shí),如果第一命令攜帶的關(guān)鍵值對應(yīng)等待隊(duì)列中存在第二命令,或該 等待隊(duì)列無等待命令但未接收到用于指示第二命令執(zhí)行完成的返回消息,將第一命令放入該等待隊(duì)列進(jìn)行等待,直到接收到用于指示第二命令執(zhí)行完成的返回消息時(shí),第一命令將出等待隊(duì)列,并按照上述方式處理第一命令,如果第一命令攜帶的關(guān)鍵值對應(yīng)等待隊(duì)列中不存在第二命令且接收到用于指示第二命令執(zhí)行完成的返回消息,將直接按照上述方式處理第一命令,不需要進(jìn)入等待隊(duì)列進(jìn)行等待。其中,數(shù)據(jù)的關(guān)鍵值是預(yù)先設(shè)置的,例如:假設(shè)有10個(gè)數(shù)據(jù),可以為這10個(gè)數(shù)據(jù)依次設(shè)置關(guān)鍵值為1、2、……、10。
作為一種可能的實(shí)施方式,當(dāng)在第一命令前接收且與第一命令相鄰的第三命令為讀命令,且在確定第三命令的候選服務(wù)器時(shí),若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量相同,表明本端處理第三命令時(shí)服務(wù)器集群中每個(gè)服務(wù)器均執(zhí)行完了第一命令前接收的與第三命令的接收時(shí)間相距最近的寫命令,則確定服務(wù)器集群為第一命令的候選服務(wù)器,同時(shí)將為第三命令確定的目標(biāo)服務(wù)器作為第一命令的目標(biāo)服務(wù)器,可以減少為第一命令從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器的處理步驟,因此,當(dāng)有兩個(gè)連續(xù)的讀命令時(shí)可以減少處理步驟,從而可以提高命令處理效率;若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量不相同,表明在本端處理第三命令時(shí)服務(wù)器集群中只有部分服務(wù)器執(zhí)行完了第三命令前接收的與第三命令的接收時(shí)間相距最近的寫命令,在為第三命令確定目標(biāo)服務(wù)器或?qū)⒌谌畎l(fā)送給確定的目標(biāo)服務(wù)器的過程中,服務(wù)器集群中可能又有服務(wù)器執(zhí)行完了第三命令前接收的與第三命令的接收時(shí)間相距最近的寫命令,將需要重新為第一命令從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器;第一命令、第二命令與第三命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,當(dāng)在第一命令前接收且與第一命令相鄰的第四命令為寫命令時(shí),才從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器。以及從候選服務(wù)器確定目標(biāo)服務(wù)器之后,當(dāng)?shù)谝幻詈蠼邮涨遗c第一命令相鄰的第五命令為讀命令時(shí),如果第五命令是在發(fā)送第一命令前接收到的,可以在發(fā)送第一命令至目標(biāo)服務(wù)器的同時(shí),將第五命令也發(fā)送給目標(biāo)服務(wù)器,以便存在兩個(gè)連續(xù)的讀命令時(shí)可以減少處理步驟,從而可以提高命 令處理效率。
其中,第一命令、第四命令以及第五命令所需操作數(shù)據(jù)的標(biāo)識相同。
203、當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為寫命令時(shí),發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器。
本實(shí)施例中,當(dāng)?shù)谝幻畹拿铑愋陀糜谥甘镜谝幻顬閷懨顣r(shí),將第一命令發(fā)送給服務(wù)器集群中的主服務(wù)器,主服務(wù)器執(zhí)行第一命令并將第一命令發(fā)送至所有從服務(wù)器執(zhí)行。
在圖2所描述的命令分發(fā)方法中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖3,圖3是本發(fā)明實(shí)施例公開的另一種命令分發(fā)方法的流程示意圖。其中,本發(fā)明實(shí)施例是從命令分發(fā)裝置1021的角度來描述的。如圖3所示,該命令分發(fā)方法可以包括以下步驟。
其中,步驟301-302與前面實(shí)施例中的步驟201-202相同,本發(fā)明實(shí)施例此處不作贅述。
303、當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為寫命令時(shí),判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,當(dāng)接收到該返回消息時(shí),執(zhí)行步驟304,當(dāng)未接收到該返回消息時(shí),將等待。
本實(shí)施例中,當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為寫命令時(shí),可以先判斷是否接收到用于指示第一命令前接收且與第一命令的接收時(shí)間相距最近的讀命令(即第六命令)執(zhí)行完成的返回消息,當(dāng)接收到該返回消息時(shí),表明第一命令的執(zhí)行不會(huì)影響第六命令讀取的數(shù)據(jù)的準(zhǔn)確性,將執(zhí)行步驟304,當(dāng)未接收到該返回消息時(shí),表明第一命令的執(zhí)行影響第六命令讀取的數(shù)據(jù)的準(zhǔn)確性,將等待,直到接收到該返回消息之后才執(zhí)行步驟304。該返回消息為執(zhí)行第六命令的服務(wù)器執(zhí)行完成第六命令后返回的消息,第六命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的讀命令,第一命令與 第六命令所需操作數(shù)據(jù)的標(biāo)識相同。
本實(shí)施例中,當(dāng)?shù)谝幻顬閷懨顣r(shí),如果第一命令攜帶的關(guān)鍵值對應(yīng)等待隊(duì)列中存在第六寫命令,或該等待隊(duì)列無等待命令但未接收到用于指示第六命令執(zhí)行完成的返回消息,將第一命令放入對應(yīng)的等待隊(duì)列進(jìn)行等待,直到接收到用于指示第六命令執(zhí)行完成的返回消息時(shí),第一命令將出等待隊(duì)列,并執(zhí)行步驟304,如果第一命令攜帶的關(guān)鍵值對應(yīng)等待隊(duì)列中不存在第六命令且接收到用于指示第六命令執(zhí)行完成的返回消息,將直接執(zhí)行步驟304,不需要進(jìn)入等待隊(duì)列進(jìn)行等待。
304、發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器。
作為一種可能實(shí)施方式,當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為寫命令時(shí),不需要執(zhí)行步驟303,將直接執(zhí)行步驟304;當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為讀命令時(shí),此時(shí)第七命令即第六命令,需要先執(zhí)行步驟303,直到接收到用于指示第六命令執(zhí)行完成的返回消息之后,才能執(zhí)行步驟304。其中,第一命令與第七命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,當(dāng)在執(zhí)行步驟304之前接收到第八命令時(shí),將第一命令和第八命令發(fā)送給服務(wù)器集群的主服務(wù)器。第八命令是在第一命令后接收且與第一命令相鄰的寫命令,且第八命令與第一命令所需操作數(shù)據(jù)的標(biāo)識相同。
305、接收主服務(wù)器發(fā)送的負(fù)載過高消息,并響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,以及向選取的服務(wù)器發(fā)送主服務(wù)器建立命令。
本實(shí)施例中,當(dāng)?shù)谝幻顬閷懨钪螅瑢懨畎l(fā)送給主服務(wù)器之后,主服務(wù)器在執(zhí)行第一命令時(shí),可以判斷主服務(wù)器的負(fù)載是否超過預(yù)設(shè)值,當(dāng)主服務(wù)器的負(fù)載超過預(yù)設(shè)值時(shí),將向本端發(fā)送負(fù)載過高消息,本端接收到主服務(wù)器發(fā)送的負(fù)載過高消息之后,將響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,以及向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,可以使選取的服務(wù)器執(zhí)行主服務(wù)器的功能。負(fù)載信息可以是中央處理器(centralprocessingunit,cpu)信息、輸入 輸出(input-output,io)信息、網(wǎng)絡(luò)信息等。
作為一種可能的實(shí)施方式,命令分發(fā)裝置也可以實(shí)時(shí)或周期性地監(jiān)測主服務(wù)器上的負(fù)載情況,當(dāng)檢測到主服務(wù)器上的負(fù)載超過預(yù)設(shè)值時(shí),將根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,并向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,可以使選取的服務(wù)器執(zhí)行主服務(wù)器的功能。
在圖3所描述的命令分發(fā)方法中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
在一個(gè)實(shí)施例中,當(dāng)分布式系統(tǒng)包括至少兩個(gè)命令分發(fā)裝置時(shí),為了合理利用這些命令分發(fā)裝置,這些命令分發(fā)裝置中每個(gè)裝置分別維護(hù)一部分?jǐn)?shù)據(jù),即負(fù)責(zé)將客戶端發(fā)送的這些數(shù)據(jù)寫入服務(wù)器,同時(shí)從服務(wù)器讀取這些數(shù)據(jù),每個(gè)數(shù)據(jù)對應(yīng)一個(gè)關(guān)鍵值。命令分發(fā)裝置接收到客戶端發(fā)送的第一命令之后,先判斷第一命令是否屬于該命令分發(fā)裝置處理的命令(即判斷第一命令攜帶的關(guān)鍵值是否屬于該命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍),當(dāng)屬于該命令分發(fā)裝置處理的命令時(shí),執(zhí)行步驟302或303,當(dāng)不屬于本端處理的命令時(shí),表明第一命令不屬于本端處理的命令,根據(jù)存儲(chǔ)的除本端之外的每個(gè)命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍和第一命令攜帶的關(guān)鍵值確定用于處理第一命令的命令分發(fā)裝置,并將第一命令發(fā)送至確定的命令分發(fā)裝置。
本實(shí)施例中,可以預(yù)先將其它命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍進(jìn)行存儲(chǔ),當(dāng)判斷出第一命令不屬于本端處理的命令時(shí),將獲取存儲(chǔ)的其它命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍,并將第一命令的關(guān)鍵值與這些命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍分別進(jìn)行比較,從這些命令分發(fā)裝置中選取第一命令的命令值所屬關(guān)鍵值范圍對應(yīng)的命令分發(fā)裝置。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖4,圖4是本發(fā)明實(shí)施例公開 的一種命令分發(fā)裝置的結(jié)構(gòu)示意圖。如圖4所示,該命令分發(fā)裝置可以包括:
通信單元401,用于接收客戶端發(fā)送的攜帶有命令類型的第一命令;
選取單元402,用于當(dāng)通信單元401接收的第一命令攜帶的命令類型用于指示第一命令為讀命令時(shí),根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,服務(wù)器集群可以包括分布式系統(tǒng)中的所有服務(wù)器或存儲(chǔ)有第一命令所需操作數(shù)據(jù)的服務(wù)器;
通信單元401,還用于發(fā)送第一命令至選取單元402選取的目標(biāo)服務(wù)器,以觸發(fā)目標(biāo)服務(wù)器執(zhí)行第一命令。
在圖4所描述的命令分發(fā)裝置中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖5,圖5是本發(fā)明實(shí)施例公開的另一種命令分發(fā)裝置的結(jié)構(gòu)示意圖。其中,圖5所示的命令分發(fā)裝置是由圖4所示的命令分發(fā)裝置進(jìn)行優(yōu)化得到的,其中:
選取單元402可以包括:
選取子單元4021,用于從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,第二命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的寫命令,第一命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
確定子單元4022,用于從選取子單元4021選取的候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器。
具體地,通信單元401接收客戶端發(fā)送的攜帶有命令類型的第一命令后,將觸發(fā)選取子單元4021從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器。
作為一種可能的實(shí)施方式,選取子單元4021可以包括:
將第二命令的索引值與服務(wù)器集群中每個(gè)服務(wù)器最近執(zhí)行完的目標(biāo)寫命令的索引值進(jìn)行比較,目標(biāo)寫命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
從服務(wù)器集群中選取最近執(zhí)行完的目標(biāo)寫命令的索引值等于第二命令的索引值的服務(wù)器為候選服務(wù)器。
作為一種可能的實(shí)施方式,選取子單元4021,具體用于:
當(dāng)在通信單元401接收的第一命令前接收且與第一命令相鄰的第三命令為讀命令,且在確定第三命令的候選服務(wù)器時(shí),若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量相同,確定服務(wù)器集群為第一命令的候選服務(wù)器,若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量不相同,從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為第一命令的候選服務(wù)器;
第一命令與第三命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,選取子單元4021,具體用于當(dāng)在第一命令前接收且與第一命令相鄰的第四命令為寫命令時(shí),從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器;
通信單元401發(fā)送第一命令至目標(biāo)服務(wù)器包括:
當(dāng)在第一命令后接收且與第一命令相鄰的第五命令為讀命令時(shí),發(fā)送第一命令和第五命令至目標(biāo)服務(wù)器;
其中,第一命令、第四命令以及第五命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,確定子單元4022,具體用于從候選服務(wù)器中確定負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,選取單元402,具體用于從服務(wù)器集群中選取負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,通信單元401,還用于當(dāng)命令類型用于指示第一命令為寫命令時(shí),發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器,以觸發(fā)主服務(wù)器執(zhí)行第一命令。
作為一種可能的實(shí)施方式,該命令分發(fā)裝置還可以包括:
判斷單元403,用于判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,當(dāng)判斷單元404的判斷結(jié)果為是時(shí),觸發(fā)通信單元401執(zhí)行發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器的步驟,該返回消息為執(zhí)行第六命令的服務(wù)器執(zhí)行完成第六命令后返回的消息,第六命令是在第一命令前接收且與第一命令 的接收時(shí)間相距最近的讀命令,第一命令與第六命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,判斷單元404,具體用于當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為讀命令時(shí),判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息;
其中,第一命令與第七命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,通信單元401,還用于在發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器后,接收主服務(wù)器發(fā)送的負(fù)載過高消息;
選取單元402,還用于響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器;
通信單元401,還用于向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,主服務(wù)器建立命令用于指示選取的服務(wù)器執(zhí)行主服務(wù)器的功能。
作為一種可能的實(shí)施方式,第一命令還攜帶有關(guān)鍵值,當(dāng)分布式系統(tǒng)包括至少兩個(gè)命令分發(fā)裝置時(shí),判斷單元404,還用于判斷第一命令攜帶的關(guān)鍵值是否屬于該命令分發(fā)裝置維護(hù)的關(guān)鍵值范圍,若是,則觸發(fā)通信單元401執(zhí)行當(dāng)?shù)谝幻顢y帶的命令類型用于指示第一命令為讀命令時(shí),根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,或者執(zhí)行當(dāng)?shù)谝幻畹拿铑愋陀糜谥甘镜谝幻顬閷懨顣r(shí),發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器。
在圖5所描述的命令分發(fā)裝置中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖6,圖6是本發(fā)明實(shí)施例公開的又一種命令分發(fā)裝置的結(jié)構(gòu)示意圖。如圖6所示,該命令分發(fā)裝置可以包括:處理器601、存儲(chǔ)器602、收發(fā)器603。其中:
收發(fā)器603,用于接收客戶端發(fā)送的攜帶有命令類型的第一命令并發(fā)送至 處理器601;
處理器601用于調(diào)用存儲(chǔ)器602中存儲(chǔ)的程序代碼執(zhí)行以下操作:
當(dāng)?shù)谝幻畹拿铑愋陀糜谥甘镜谝幻顬樽x命令時(shí),根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,服務(wù)器集群包括分布式系統(tǒng)中的所有服務(wù)器或存儲(chǔ)有第一命令所需操作數(shù)據(jù)的服務(wù)器;
收發(fā)器603,還用于發(fā)送第一命令至目標(biāo)服務(wù)器,以觸發(fā)目標(biāo)服務(wù)器執(zhí)行第一命令。
作為一種可能的實(shí)施方式,處理器601根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,第二命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的寫命令,第一命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,處理器601從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器包括:
將第二命令的索引值與服務(wù)器集群中每個(gè)服務(wù)器最近執(zhí)行完的目標(biāo)寫命令的索引值進(jìn)行比較,目標(biāo)寫命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
從服務(wù)器集群中選取最近執(zhí)行完的目標(biāo)寫命令的索引值等于第二命令的索引值的服務(wù)器為候選服務(wù)器。
作為一種可能的實(shí)施方式,處理器601從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第三命令為讀命令,且在確定第三命令的候選服務(wù)器時(shí),若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量相同,則確定服務(wù)器集群為第一命令的候選服務(wù)器,若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量不相同,則從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為第一命令的候選服務(wù)器;
第一命令與第三命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,處理器601從服務(wù)器集群中選取執(zhí)行完第二命 令的服務(wù)器為候選服務(wù)器包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第四命令為寫命令時(shí),從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器;
發(fā)送器603發(fā)送第一命令至目標(biāo)服務(wù)器包括:
當(dāng)在第一命令后接收且與第一命令相鄰的第五命令為讀命令時(shí),發(fā)送第一命令和第五命令至目標(biāo)服務(wù)器;
其中,第一命令、第四命令以及第五命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,處理器601從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從候選服務(wù)器中確定負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,處理器601根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從服務(wù)器集群中選取負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,處理器601還用于調(diào)用存儲(chǔ)器602中存儲(chǔ)的程序代碼執(zhí)行以下操作:
當(dāng)?shù)谝幻畹拿铑愋陀糜谥甘镜谝幻顬閷懨顣r(shí),發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器,以觸發(fā)主服務(wù)器執(zhí)行第一命令。
作為一種可能的實(shí)施方式,處理器601還用于調(diào)用存儲(chǔ)器602中存儲(chǔ)的程序代碼執(zhí)行以下操作:
判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,該返回消息為執(zhí)行第六命令的服務(wù)器執(zhí)行完成第六命令后返回的消息,第六命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的讀命令,第一命令與第六命令所需操作數(shù)據(jù)的標(biāo)識相同;
當(dāng)接收到用于指示第六命令執(zhí)行完成的返回消息時(shí),觸發(fā)收發(fā)器603執(zhí)行發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器的步驟。
作為一種可能的實(shí)施方式,處理器601判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為讀命令時(shí),判斷是 否接收到用于指示第六命令執(zhí)行完成的返回消息;
其中,第一命令與第七命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,收發(fā)器603發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器之后,收發(fā)器603,還用于接收主服務(wù)器發(fā)送的負(fù)載過高消息;
處理器601還用于調(diào)用存儲(chǔ)器602存儲(chǔ)的程序代碼執(zhí)行以下操作:
響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器;
收發(fā)器603,還用于向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,主服務(wù)器建立命令用于指示選取的服務(wù)器執(zhí)行主服務(wù)器的功能。
在圖6所描述的命令分發(fā)裝置中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù)器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
基于圖1所示的命令分發(fā)網(wǎng)絡(luò)架構(gòu),請參閱圖7,圖7是本發(fā)明實(shí)施例公開的一種分布式系統(tǒng)中命令分發(fā)系統(tǒng)的結(jié)構(gòu)示意圖。如圖7所示,該命令分發(fā)系統(tǒng)包括客戶端701、命令分發(fā)裝置702和服務(wù)器集群703,服務(wù)器集群703包括至少兩個(gè)服務(wù)器,其中,一個(gè)服務(wù)器為主服務(wù)器,其余服務(wù)器為從服務(wù)器,其中:
客戶端701,用于向命令分發(fā)裝置702發(fā)送攜帶有命令類型的第一命令;
命令分發(fā)裝置702,用于接收第一命令,當(dāng)命令類型用于指示第一命令為讀命令時(shí),根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群703中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器,以及發(fā)送第一命令至目標(biāo)服務(wù)器,服務(wù)器集群包括分布式系統(tǒng)中的所有服務(wù)器或存儲(chǔ)有第一命令所需操作數(shù)據(jù)的服務(wù)器;
目標(biāo)服務(wù)器,用于接收第一命令并執(zhí)行第一命令。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器,第二命令 是在第一命令前接收且與第一命令的接收時(shí)間相距最近的寫命令,第一命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器包括:
將第二命令的索引值與服務(wù)器集群中每個(gè)服務(wù)器最近執(zhí)行完的目標(biāo)寫命令的索引值進(jìn)行比較,目標(biāo)寫命令與第二命令所需操作數(shù)據(jù)的標(biāo)識相同;
從服務(wù)器集群中選取最近執(zhí)行完的目標(biāo)寫命令的索引值等于第二命令的索引值的服務(wù)器為候選服務(wù)器。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第三命令為讀命令,且在確定第三命令的候選服務(wù)器時(shí),若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量相同,則確定服務(wù)器集群為第一命令的候選服務(wù)器,若確定的候選服務(wù)器數(shù)量與服務(wù)器集群數(shù)量不相同,則從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為第一命令的候選服務(wù)器;
第一命令與第三命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第四命令為寫命令時(shí),從服務(wù)器集群中選取執(zhí)行完第二命令的服務(wù)器為候選服務(wù)器;
命令分發(fā)裝置702發(fā)送第一命令至目標(biāo)服務(wù)器包括:
當(dāng)在第一命令后接收且與第一命令相鄰的第五命令為讀命令時(shí),發(fā)送第一命令和第五命令至目標(biāo)服務(wù)器;
其中,第一命令、第四命令以及第五命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702從候選服務(wù)器中確定一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從候選服務(wù)器中確定負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器作為目標(biāo)服務(wù)器包括:
從服務(wù)器集群中選取負(fù)載最低的服務(wù)器作為目標(biāo)服務(wù)器。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702,還用于當(dāng)命令類型用于指示第一命令為寫命令時(shí),發(fā)送第一命令至服務(wù)器集群703中的主服務(wù)器;
主服務(wù)器,用于接收第一命令,執(zhí)行第一命令,以及將第一命令發(fā)送至服務(wù)器集群703中除主服務(wù)器之外的從服務(wù)器;
從服務(wù)器,用于接收第一命令并執(zhí)行。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702,還用于判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息,當(dāng)接收到用于指示第六命令執(zhí)行完成的返回消息時(shí),執(zhí)行發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器的步驟,該返回消息為執(zhí)行第六命令的服務(wù)器執(zhí)行完成第六命令后返回的消息,第六命令是在第一命令前接收且與第一命令的接收時(shí)間相距最近的讀命令,第一命令與第六命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息包括:
當(dāng)在第一命令前接收且與第一命令相鄰的第七命令為讀命令時(shí),判斷是否接收到用于指示第六命令執(zhí)行完成的返回消息;
其中,第一命令與第七命令所需操作數(shù)據(jù)的標(biāo)識相同。
作為一種可能的實(shí)施方式,命令分發(fā)裝置702,還用于在發(fā)送第一命令至服務(wù)器集群中的主服務(wù)器之后,接收主服務(wù)器發(fā)送的負(fù)載過高消息,響應(yīng)負(fù)載過高消息,根據(jù)服務(wù)器集群中每個(gè)服務(wù)器的負(fù)載信息,從服務(wù)器集群中選取負(fù)載最低的服務(wù)器,并向選取的服務(wù)器發(fā)送主服務(wù)器建立命令,主服務(wù)器建立命令用于指示選取的服務(wù)器執(zhí)行主服務(wù)器的功能;
選取的服務(wù)器,用于接收主服務(wù)器建立命令,執(zhí)行主服務(wù)器的功能。
在圖7所描述的命令分發(fā)系統(tǒng)中,當(dāng)客戶端發(fā)送的命令為讀命令時(shí),命令分發(fā)裝置將根據(jù)預(yù)設(shè)規(guī)則從服務(wù)器集群中選取一個(gè)服務(wù)器,并將這個(gè)命令發(fā)送給這個(gè)服務(wù)器執(zhí)行,而不是直接將這個(gè)命令發(fā)送給服務(wù)器集群中的主服務(wù) 器執(zhí)行,可以降低服務(wù)器集群中主服務(wù)器上的負(fù)載。
在一個(gè)實(shí)施例中,一種可讀存儲(chǔ)介質(zhì),該可讀存儲(chǔ)介質(zhì)存儲(chǔ)了命令分發(fā)裝置用于執(zhí)行本發(fā)明實(shí)施例圖2和圖3所對應(yīng)的命令分發(fā)方法的程序代碼。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤或光盤等。
以上對本發(fā)明實(shí)施例公開的分布式系統(tǒng)中命令分發(fā)方法、裝置及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。