數(shù)量的分片。
[0130]如圖5b所示,上述步驟S502可以包括以下步驟:
[0131]在步驟S5021中,根據(jù)改變前后的權(quán)重獲得當前每個服務(wù)器主節(jié)點的分片迀移值。
[0132]在步驟S5022中,對分片迀移值的整數(shù)部分按照由小到大的順序進行排序,并基于排序后的整數(shù)部分和預(yù)設(shè)迀移方式獲得主節(jié)點分片的第一迀移信息,預(yù)設(shè)迀移方式包括首尾迀移方式或順序迀移方式。
[0133]在步驟S5023中,對分片迀移值的小數(shù)部分按照由小到大的順序進行排序,并基于排序后的小數(shù)部分和與整數(shù)部分同樣的迀移方式獲得主節(jié)點分片的第二迀移信息。
[0134]在步驟S5024中,根據(jù)主節(jié)點分片的第一迀移信息和主節(jié)點分片的第二迀移信息獲得每個服務(wù)器主節(jié)點的分片迀移信息。
[0135]下面以引起服務(wù)器的權(quán)重發(fā)生改變的兩種情況為例,對圖5b進行詳細說明:
[0136]針對第一種情況,控制器通過上述步驟S5021-5023獲得當前每個服務(wù)器主節(jié)點的分片迀移信息的過程可以為:
[0137]根據(jù)改變前后的權(quán)重計算出每個服務(wù)器主節(jié)點的分片迀移值,對該分片迀移值的整數(shù)部分按照由小到大的順序進行排序,基于排序后的整數(shù)部分和首尾迀移方式獲得主節(jié)點分片的第一迀移信息,然后,對小數(shù)部分按照由小到大的順序進行排序,并基于排序后的小數(shù)部分和首尾迀移方式獲得主節(jié)點分片的第二迀移信息,由此可以獲得每個服務(wù)器主節(jié)點的分片迀移量和分片迀移路徑。
[0138]假設(shè),計算出的每個服務(wù)器主節(jié)點的分片迀移值如圖6a所示,從圖6a可以看出,服務(wù)器1主節(jié)點的分片迀出值分別為5.5,服務(wù)器2主節(jié)點的分片迀入值分別為2.4,服務(wù)器3主節(jié)點的分片迀入值分別為5.2,服務(wù)器4主節(jié)點的分片迀出值為2.1,并對整數(shù)部分按照由小到大的順序進行排序,然后基于排序后的整數(shù)部分和首尾迀移方式,獲得主節(jié)點分片的第一迀移信息為:由服務(wù)器1的主節(jié)點向服務(wù)器3的主節(jié)點迀入5個分片,由服務(wù)器4的主節(jié)點向服務(wù)器2的主節(jié)點迀入2個分片;然后對小數(shù)部分按照由小到大的順序進行排序,排序后的結(jié)果如圖6b所示;之后根據(jù)圖6b排序結(jié)果和首尾迀移方式,獲得主節(jié)點分片的第二迀移信息為:由服務(wù)器1的主節(jié)點向服務(wù)器2的主節(jié)點迀入1個分片,由服務(wù)器4的主節(jié)點向服務(wù)器3的主節(jié)點迀入1個分片,如圖6c所示;控制器在獲得上述第一迀移信息和第二迀移信息后,向?qū)?yīng)的服務(wù)器主節(jié)點發(fā)送迀移指令,服務(wù)器主節(jié)點在接收到上述迀移指令后迀出或迀入對應(yīng)的分片,使得最終迀入值和迀出值互相抵消,如圖6d所示;通過圖6a-圖6d可以獲得服務(wù)器1主節(jié)點的分片迀出量為6 ;服務(wù)器2主節(jié)點的分片迀入量為3 ;服務(wù)器3主節(jié)點的分片迀入量為6 ;服務(wù)器4主節(jié)點的分片迀出量為3,迀移路徑可參見圖6a和圖6c。
[0139]需要說明的是,在獲得上述第一迀移信息和第二迀移信息的過程中使用了首尾迀移方式,首尾迀移方式來源于首尾凹凸迀移算法,下面示例性地介紹下首尾凹凸迀移算法的核心思想:
[0140]如圖6a所示,可以將迀出值畫在水平線上方(即迀出值代表凸出部分),迀入值畫在水平線下方(即迀入值代表凹進部分),水平線代表數(shù)值為0,其中,凸出部分和凹進部分的大小與對應(yīng)的迀出值和迀入值大小對應(yīng),在對迀出值和迀入值排序過程中,可以將迀出值看作正數(shù),迀入值看作負數(shù);然后對整數(shù)部分按照由小到大的順序進行排序,排序的目的是為了更好地展現(xiàn)迀移需求,對排序后的整數(shù)部分采用首尾迀移,即從具有最大迀出值的服務(wù)器(如圖6a中的服務(wù)器1)主節(jié)點迀出整數(shù)個分片,并將迀出的分片迀入具有最大迀入值的服務(wù)器(如圖6a中的服務(wù)器3)主節(jié)點,依次類推,同樣地,對小數(shù)部分也是按照上述原理進行迀移的,通過該算法,可以保證服務(wù)器節(jié)點間的相互迀移量盡可能地少。
[0141]針對第二種情況,控制器根據(jù)改變前后的權(quán)重計算出當前每個服務(wù)器主節(jié)點的分片迀移信息的過程可以為:
[0142]當新注冊的服務(wù)器為一個時,根據(jù)改變前后的權(quán)重計算出當前每個服務(wù)器主節(jié)點的分片迀移值,對該分片迀移值的整數(shù)部分按照由小到大的順序進行排序,基于排序后的整數(shù)部分和倒序迀移方式獲得主節(jié)點分片的第一迀移信息,然后,對小數(shù)部分按照由小到大的順序進行排序,并基于排序后的小數(shù)部分和倒序迀移方式獲得主節(jié)點分片的第二迀移信息,由此可以獲得每個服務(wù)器主節(jié)點的分片迀移量和分片迀移路徑。
[0143]假設(shè),控制器計算出的包括新注冊服務(wù)器在內(nèi)的每個服務(wù)器主節(jié)點的分片迀移值如圖7a所示,從圖7a可以看出,服務(wù)器1_服務(wù)器4主節(jié)點的分片迀出值分別為3.4,2.9、5.1和1.6,新注冊的服務(wù)器主節(jié)點的分片迀入值為13 ;對整數(shù)部分按照由小到大的順序進行排序后的結(jié)果如圖7a所示,根據(jù)排序結(jié)果和倒序迀移方式(即按照由大到小的順序進行迀移的方式),獲得主節(jié)點分片的第一迀移信息為:由服務(wù)器3的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入5個分片,由服務(wù)器1的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入3個分片,由服務(wù)器2的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入2個分片,由服務(wù)器4的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入1個分片(若此時服務(wù)器按照該迀移信息進行迀移,則新注冊的服務(wù)器主節(jié)點已有11個分片,還差兩個分片);然后,對小數(shù)部分按照由小到大的順序進行排序的結(jié)果如圖7b所示,然后根據(jù)排序結(jié)果和倒序迀移方式,獲得主節(jié)點分片的第二迀移信息為:由服務(wù)器2的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入1個分片,由服務(wù)器4的主節(jié)點向新注冊服務(wù)器的主節(jié)點迀入1個分片,如圖7b所示;控制器在獲得上述第一迀移信息和第二迀移信息后,向?qū)?yīng)的服務(wù)器主節(jié)點發(fā)送迀移指令,服務(wù)器主節(jié)點在接收到上述迀移指令后迀出或迀入對應(yīng)的分片,從而完成主節(jié)點分片的迀移,通過上述過程可以獲得服務(wù)器1主節(jié)點的分片迀出量為3 ;服務(wù)器2主節(jié)點的分片迀出量為3 ;服務(wù)器3主節(jié)點的分片迀出量為5 ;服務(wù)器4主節(jié)點的分片迀出量為2,新注冊服務(wù)器主節(jié)點的分片迀入量為13 ;且服務(wù)器1-4主節(jié)點的分片迀出路徑均為從自己所在的服務(wù)器迀出至新注冊服務(wù)器,新注冊服務(wù)器主節(jié)點的分片迀入路徑為從服務(wù)器1-4迀入至自己所在的服務(wù)器。
[0144]需要說明的是,在獲得上述第一迀移信息和第二迀移信息的過程中首先對分片迀移值的整數(shù)部分和小數(shù)部分按照由小到大的順序進行排序,然后對排序結(jié)果進行倒序迀移的目的是為了首先迀移數(shù)值較大的分片,以使得服務(wù)器節(jié)點間的相互迀移量盡可能地少。
[0145]由此可見,控制器通過上述實施例,獲得主節(jié)點的分片迀移信息后,可以向?qū)?yīng)的服務(wù)器主節(jié)點發(fā)送迀移指令,從而使服務(wù)器可以根據(jù)迀移指令迀移對應(yīng)數(shù)量的分片,以達到保持控制器根據(jù)新的權(quán)重分配的分片數(shù)量的目的。
[0146]在本公開實施例中,在服務(wù)器主節(jié)點間進行分片迀移后,有可能出現(xiàn)同一服務(wù)器中的主節(jié)點和從節(jié)點具有相同的分片的情況,而基于主從節(jié)點分片互斥的原則,同一服務(wù)器中的主從節(jié)點不可以具有相同的分片,因此,需要對從節(jié)點的分片進行迀移。
[0147]圖8a是根據(jù)一示例性實施例示出的另一種從節(jié)點的分片調(diào)度方法的流程圖,如圖8a所示,該方法包括:
[0148]在步驟S801中,獲得所有服務(wù)器的主節(jié)點和從節(jié)點間相同分片的數(shù)量和,并將數(shù)量和作為互斥量進行保存。
[0149]在該實施例中,計算所有服務(wù)器的主節(jié)點和從節(jié)點間相同分片的數(shù)量和,例如,共有3個服務(wù)器,第一個服務(wù)器的主從節(jié)點都具有分片2、3,第一個服務(wù)器的主從節(jié)點都具有分片4,第三個服務(wù)器的主從節(jié)點都具有分片7,則互斥量為4。
[0150]在步驟S802中,計算每個服務(wù)器的主節(jié)點和從節(jié)點的分片數(shù)量差,并根據(jù)分片數(shù)量差和互斥量獲得每個服務(wù)器從節(jié)點的分片迀移信息。
[0151]在該實施例中,首先利用圖6a中采用的首尾迀移方式根據(jù)分片數(shù)量差獲得從節(jié)點分片的第一迀移信息,然后采用首尾迀移方式根據(jù)互斥量獲得從節(jié)點分片的第二迀移信息。
[0152]在步驟S803中,根據(jù)每個服務(wù)器從節(jié)點的分片迀移信息向?qū)?yīng)從節(jié)點發(fā)送迀入或迀出指令,以使對應(yīng)從節(jié)點迀入或迀出對應(yīng)的分片。
[0153]服務(wù)器在接收控制器發(fā)送的迀入或迀出指令后,可以根據(jù)對應(yīng)的指令迀入或迀出對應(yīng)的分片,從而消除互斥的分片,并使主節(jié)點和從節(jié)點的分片數(shù)量盡可能地一致。
[0154]如圖8b所示,上述步驟S802可以包括以下步驟:
[0155]在步驟S8021中,對所有服務(wù)器主從節(jié)點的分片數(shù)量差進行排序,根據(jù)排序結(jié)果和首尾迀移方式獲得從節(jié)點分片的第一迀移信息。
[0156]該實施例中的,主從節(jié)點的分片數(shù)量差為從節(jié)點的分片數(shù)量減去從節(jié)點的分片數(shù)量;例如,服務(wù)器1的從節(jié)點的分片數(shù)量為8,從節(jié)點的分片數(shù)量為6,則服務(wù)器1主從節(jié)點的分片數(shù)量差為2 ;又例如,服務(wù)器2的從節(jié)點的分片數(shù)量為8,從節(jié)點的分片數(shù)量為10,則服務(wù)器2主從節(jié)點的分片數(shù)量差為_2。
[0157]在步驟S8022中,針對根據(jù)從節(jié)點分片的第一迀移信息進行迀移后的服務(wù)器,若仍存在分片數(shù)量差,則按照當前分片數(shù)量差由小到大的順序進行排序,并根據(jù)互斥量和順序迀移方式獲得從節(jié)點分片的第二迀移信息。
[0158]在步驟S8023中,根據(jù)從節(jié)點分片的第一迀移信息和第二迀移信息獲得每個服務(wù)器從節(jié)點的分片迀移信息。
[0159]假設(shè),計算出的每個服務(wù)器主從節(jié)點的分片數(shù)量差如圖9a所示,并對分片數(shù)量差進行排序,并根據(jù)圖9a所示的排序結(jié)果和首尾迀移方式獲得的從節(jié)點分片的第一迀移信息為:由服務(wù)器1向服務(wù)器2和服務(wù)器3分片迀入1個分片,如圖9b所示;然后判斷根據(jù)第一迀移信息進行迀移后的服務(wù)器主從節(jié)點是否仍存在分片數(shù)量差,若仍存在分片數(shù)量差,則按照當前分片數(shù)量差由小到大的順序進行排序,并根據(jù)排序結(jié)果和互斥量順序迀移方式獲得的從節(jié)點分片的第一迀移信息為:將4個互斥分片迀入服務(wù)器3,1個互斥分片迀入服務(wù)器2,如圖9c所示;需要說明的是,選擇互斥分片時也要遵守主從節(jié)點分片互斥的原則。
[0160]由此可見,通過該實施例,可以清除服務(wù)器的主從節(jié)點間互斥的分片,并使主從節(jié)點的分片數(shù)量盡可能地一致。
[0161]圖10是根據(jù)一示例性實施例示出的一種分片調(diào)度裝置的框圖,如圖10所示,該分片調(diào)度裝置包括獲得模塊21和分配通知模塊22,其中:
[0162]獲得模塊21被配置為獲得當前分布式服務(wù)器系統(tǒng)中每個服務(wù)器的權(quán)重;分配通知模塊22被配置為根據(jù)獲得模塊21獲得的權(quán)重為每個服務(wù)器分