本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種容量擴(kuò)展方法及裝置。
背景技術(shù):
云計(jì)算(Cloud Computing)是網(wǎng)格計(jì)算(Grid Computing)、分布式計(jì)算(Distributed Computing)、并行計(jì)算(Parallel Computing)、效用計(jì)算(Utility Computing)網(wǎng)絡(luò)存儲(chǔ)(Network Storage Technologies)、虛擬化(Virtualization)、負(fù)載均衡(Load Balance)等傳統(tǒng)計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。它旨在通過(guò)網(wǎng)絡(luò)把多個(gè)成本相對(duì)較低的計(jì)算實(shí)體整合成一個(gè)具有強(qiáng)大計(jì)算能力的系統(tǒng)。分布式存儲(chǔ)是云計(jì)算范疇中的一個(gè)領(lǐng)域,其作用是提供海量數(shù)據(jù)的分布式存儲(chǔ)服務(wù)以及高速讀寫(xiě)訪(fǎng)問(wèn)的能力。
分布式存儲(chǔ)系統(tǒng)是由若干服務(wù)器節(jié)點(diǎn)(以下簡(jiǎn)稱(chēng)“節(jié)點(diǎn)”)和客戶(hù)端互相連接構(gòu)成的。所述數(shù)據(jù)由鍵(Key)和值(Value)構(gòu)成,Key相當(dāng)于數(shù)據(jù)的索引,Value是Key所代表的數(shù)據(jù)內(nèi)容。邏輯上Key和Value是一對(duì)一的關(guān)系。為方便管理數(shù)據(jù),將數(shù)據(jù)按不同應(yīng)用劃分為不同的空間,每個(gè)空間劃分為多個(gè)分片,然后將數(shù)據(jù)按分片放入節(jié)點(diǎn)進(jìn)行存儲(chǔ)和管理,節(jié)點(diǎn)和分片是一對(duì)多的關(guān)系。為實(shí)現(xiàn)分片間數(shù)據(jù)的均衡分布,將key通過(guò)一定算法(MD5等)生成key的Hash值,通過(guò)一定的算法計(jì)算該hash值對(duì)應(yīng)的分片ID(如對(duì)hash值按分片總數(shù)取模),從而將數(shù)據(jù)均勻分布在空間的各個(gè)分片上,這樣只要按節(jié)點(diǎn)存儲(chǔ)能力調(diào)整其上分片的個(gè)數(shù)即可充分利用系統(tǒng)資源。
在分布式存儲(chǔ)系統(tǒng)中,一個(gè)常見(jiàn)的問(wèn)題是隨著應(yīng)用規(guī)模的擴(kuò)大原有存儲(chǔ)系統(tǒng)無(wú)法承擔(dān)更多的應(yīng)用數(shù)據(jù),最簡(jiǎn)單的方法就是向分布式存儲(chǔ)系統(tǒng)中增加節(jié)點(diǎn),而問(wèn)題的關(guān)鍵在于如何在不影響系統(tǒng)正常工作的前提下讓新增加的節(jié)點(diǎn)承擔(dān)起數(shù)據(jù)存儲(chǔ)服務(wù)。如果系統(tǒng)中分片的數(shù)量遠(yuǎn)大于節(jié)點(diǎn)個(gè)數(shù)則可以將部分分片通過(guò)遷移的方式調(diào)整到新的節(jié)點(diǎn)上使新節(jié)點(diǎn)承擔(dān)起數(shù)據(jù)存儲(chǔ)服務(wù),而如果分片數(shù)較少呢?在分片數(shù)僅比節(jié)點(diǎn)多一些的情況下,遷移分片至新節(jié)點(diǎn)雖然能讓新節(jié)點(diǎn)承擔(dān)起數(shù)據(jù)存儲(chǔ)服務(wù),但很難根據(jù)節(jié)點(diǎn)能力調(diào)整節(jié)點(diǎn)負(fù)荷,容易導(dǎo)致節(jié)點(diǎn)間負(fù)荷不均;更嚴(yán)重的情況是分片數(shù)小于系統(tǒng)當(dāng)前節(jié)點(diǎn)數(shù),同一個(gè)分片只能在一個(gè)節(jié)點(diǎn)上,這樣就導(dǎo)致部分節(jié)點(diǎn)沒(méi)有分片,嚴(yán)重浪費(fèi)資源。
針對(duì)上述問(wèn)題,相關(guān)技術(shù)方案中,數(shù)據(jù)遷移一般采用以下解決方法:
通過(guò)預(yù)估將來(lái)系統(tǒng)的規(guī)模,按將來(lái)的規(guī)模對(duì)初始分片數(shù)進(jìn)行配置;當(dāng)前系統(tǒng)可能只有三個(gè)節(jié)點(diǎn),但是預(yù)計(jì)將來(lái)可能擴(kuò)容為1000個(gè)節(jié)點(diǎn)的大型分布式系統(tǒng),故現(xiàn)在就將分片數(shù)配置為10000個(gè)或者更多,從而使新節(jié)點(diǎn)的加入只需要通過(guò)遷移分片就可以簡(jiǎn)單完成。這種方案的問(wèn)題在于分片本身是有額外開(kāi)銷(xiāo)的,節(jié)點(diǎn)每多一個(gè)分片就會(huì)多一份開(kāi)銷(xiāo),原來(lái)1G數(shù)據(jù)存儲(chǔ)的額外開(kāi)銷(xiāo)可能是10M,而現(xiàn)在因?yàn)閱蝹€(gè)節(jié)點(diǎn)分片多了則可能變成100M 甚至更多,需要等到預(yù)估的將來(lái)才能降至10M;原來(lái)新增加一個(gè)節(jié)點(diǎn)可能只需要遷移10個(gè)分片,而現(xiàn)在則是1000個(gè)甚至更多,雖然數(shù)據(jù)量上來(lái)看可能相差不多,但流程上增加了100倍,出問(wèn)題的概率也增加了100倍。
隨著技術(shù)的發(fā)展,目前方案1還出現(xiàn)了一種演進(jìn)版本,即輕量級(jí)的分片。分片的開(kāi)銷(xiāo)低了,同樣規(guī)模的分布式系統(tǒng)就可以有更多的分片,但分片的開(kāi)銷(xiāo)并不會(huì)憑空消失,如原來(lái)需要分片管理的資源分配現(xiàn)在分片不管理了交給了節(jié)點(diǎn),因?yàn)榉秶鷶U(kuò)大了,分配資源可能遭遇更大的鎖沖突。
針對(duì)相關(guān)技術(shù)中,在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,尚未提出有效地解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種容量擴(kuò)展方法及裝置,以至少解決相關(guān)技術(shù)中在擴(kuò)容過(guò)程中,需要預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種容量擴(kuò)展方法,包括:獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);根據(jù)所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);在所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布所述擴(kuò)展后的分片數(shù)據(jù),以使所述新增服務(wù)器節(jié)點(diǎn)和所述初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。
可選地,根據(jù)所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù)包括:判斷所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量;若所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量小于所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,則在所述初始服務(wù)器節(jié)點(diǎn)中按照所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到所述擴(kuò)展后的分片數(shù)據(jù)。
可選地,所述在所述初始服務(wù)器節(jié)點(diǎn)中按照所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展包括:對(duì)所述初始服務(wù)器節(jié)點(diǎn)中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(i*X,i*X+X-1),其中,所述i為0到所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量之間的任意一個(gè)自然數(shù);建立與擴(kuò)展后的所述分片號(hào)集合中每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到用于訪(fǎng)問(wèn)擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。
可選地,在所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布所述擴(kuò)展后的分片數(shù)據(jù)包括:根據(jù)最小遷移路徑生成遷移列表,其中,所述遷移列表中至少包括待遷移的分片數(shù)據(jù), 以及所述待遷移的分片數(shù)據(jù)在遷移前的源服務(wù)器節(jié)點(diǎn)地址和在遷移后的目標(biāo)服務(wù)器節(jié)點(diǎn)地址;將所述待遷移的分片數(shù)據(jù)按照所述遷移列表由所述源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至所述目標(biāo)服務(wù)器節(jié)點(diǎn)。
可選地,在將所述待遷移的分片數(shù)據(jù)按照所述遷移列表由所述源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至所述目標(biāo)服務(wù)器節(jié)點(diǎn)時(shí),還包括:接收客戶(hù)端發(fā)送的操作請(qǐng)求,其中,所述操作請(qǐng)求用于對(duì)所述待遷移的分片數(shù)據(jù)執(zhí)行預(yù)定操作;響應(yīng)所述操作請(qǐng)求對(duì)所述初始服務(wù)器中的分片數(shù)據(jù)執(zhí)行所述預(yù)定操作,并將所述預(yù)定操作的操作記錄保存到Redo日志中,其中,所述操作記錄用于對(duì)遷移后的所述服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)執(zhí)行所述預(yù)定操作。
可選地,在將所述待遷移的分片數(shù)據(jù)按照所述遷移列表由所述源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至所述目標(biāo)服務(wù)器節(jié)點(diǎn)時(shí),還包括:若已完成所述遷移的分片數(shù)據(jù)的分片數(shù)量大于等于預(yù)定閾值,則鎖定所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),其中,在鎖定所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)之后,所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)將拒絕執(zhí)行所述操作。
根據(jù)本發(fā)明的另一方面,提供了一種容量擴(kuò)展裝置,包括:獲取模塊,用于獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);第一處理模塊,用于根據(jù)所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);第二處理模塊,用于在所述當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布所述擴(kuò)展后的分片數(shù)據(jù),以使所述新增服務(wù)器節(jié)點(diǎn)和所述初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。
可選地,所述第一處理模塊包括:判斷單元,用于判斷所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量;處理單元,用于在所述初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量小于所述服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量時(shí),在所述初始服務(wù)器節(jié)點(diǎn)中按照所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到所述擴(kuò)展后的分片數(shù)據(jù)。
可選地,所述處理單元包括:第一處理子單元,用于對(duì)所述初始服務(wù)器節(jié)點(diǎn)中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(i*X,i*X+X-1),其中,所述i為0到所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量之間的任意一個(gè)自然數(shù);創(chuàng)建子單元,用于建立與擴(kuò)展后的所述分片號(hào)集合中每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到用于訪(fǎng)問(wèn)擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。
可選地,所述第二處理模塊包括:獲取單元,用于根據(jù)最小遷移路徑生成遷移列表,其中,所述遷移列表中至少包括待遷移的分片數(shù)據(jù),以及所述待遷移的分片數(shù)據(jù)在遷移前的源服務(wù)器節(jié)點(diǎn)地址和在遷移后的目標(biāo)服務(wù)器節(jié)點(diǎn)地址;遷移單元,用于將所述待遷移的分片數(shù)據(jù)按照所述遷移列表由所述源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至所述目標(biāo)服務(wù)器節(jié)點(diǎn)。
可選地,所述遷移單元包括:接收子單元,用于接收客戶(hù)端發(fā)送的操作請(qǐng)求,其中, 所述操作請(qǐng)求用于對(duì)所述待遷移的分片數(shù)據(jù)執(zhí)行預(yù)定操作;第二處理子單元,用于響應(yīng)所述操作請(qǐng)求對(duì)所述初始服務(wù)器中的分片數(shù)據(jù)執(zhí)行所述預(yù)定操作,并將所述預(yù)定操作的操作記錄保存到Redo日志中,其中,所述操作記錄用于對(duì)遷移后的所述服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)執(zhí)行所述預(yù)定操作。
可選地,所述遷移單元還用于在已完成所述遷移的分片數(shù)據(jù)的分片數(shù)量大于等于預(yù)定閾值時(shí),鎖定所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),其中,在鎖定所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)之后,所述初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)將拒絕執(zhí)行所述操作。
通過(guò)本發(fā)明,獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。也就是說(shuō),可以根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù),并在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以滿(mǎn)足服務(wù)器節(jié)點(diǎn)的擴(kuò)容需求,解決了相關(guān)技術(shù)在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,進(jìn)而達(dá)到了減小分片開(kāi)銷(xiāo)的效果,
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展方法的流程圖;
圖2是根據(jù)本發(fā)明實(shí)施例的由服務(wù)器節(jié)點(diǎn)和客戶(hù)端構(gòu)成的分布式存儲(chǔ)系統(tǒng)架構(gòu)示意圖;
圖3是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)擴(kuò)容操作流程圖;
圖4是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖;
圖5是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(一);
圖6是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(二);
圖7是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(三);
圖8是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(四)。
具體實(shí)施方式
下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。
實(shí)施例1
在本實(shí)施例中提供了一種容量擴(kuò)展方法,圖1是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟S102,獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);
步驟S104,根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);
步驟S106,在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。
可選地,在本實(shí)施例中,上述容量擴(kuò)展方法包括但并不限于應(yīng)用于云計(jì)算分布式存儲(chǔ)系統(tǒng)中進(jìn)行系統(tǒng)擴(kuò)容的過(guò)程中。在該應(yīng)用場(chǎng)景下,獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。也就是說(shuō),可以根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù),并在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以滿(mǎn)足服務(wù)器節(jié)點(diǎn)的擴(kuò)容需求,解決了相關(guān)技術(shù)在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,進(jìn)而達(dá)到了減小分片開(kāi)銷(xiāo)的效果。
需要說(shuō)明的是,根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù)。其中,分裂擴(kuò)展可以包括但不限于:將初始服務(wù)器節(jié)點(diǎn)中的原有分片按照預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,得到擴(kuò)展后的分片數(shù)據(jù)。以使擴(kuò)展后的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足包含新增服務(wù)器節(jié)點(diǎn)的服務(wù)器節(jié)點(diǎn)的擴(kuò)容需要。
可選地,在本實(shí)施例中,在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展的方法包括但并不限于:對(duì)初始服務(wù)器中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合。例如,假設(shè)原有8個(gè)分片數(shù)據(jù),則可以按照預(yù)定倍數(shù)X進(jìn)行分裂,則擴(kuò)展后的分片數(shù)據(jù)為8X,使分裂 后的分片數(shù)量滿(mǎn)足系統(tǒng)擴(kuò)容需要。在此,假設(shè)將上述8個(gè)分片數(shù)據(jù)中分片號(hào)i=1的分片數(shù)據(jù),按照預(yù)定倍數(shù)8倍(即X=8)進(jìn)行分裂擴(kuò)展,那么原分片號(hào)為0的分片數(shù)據(jù)在分裂擴(kuò)展后,所得到的擴(kuò)展后的分片號(hào)集合中的分片號(hào)為(0~7),原分片號(hào)為1的分片數(shù)據(jù)在分裂擴(kuò)展后,所得到的擴(kuò)展后的分片號(hào)集合中的分片號(hào)為(8~15),依次類(lèi)推,將得到與8個(gè)分片數(shù)據(jù)分別對(duì)應(yīng)的擴(kuò)展后的分片號(hào)集合。
需要說(shuō)明的是,本實(shí)施例中涉及的預(yù)定條件包括但并不限于:每一服務(wù)器節(jié)點(diǎn)的分片負(fù)載是否均衡。
可選地,本實(shí)施例中,在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布該擴(kuò)展后的分片數(shù)據(jù)的方法包括但并不限于:根據(jù)最小遷移路徑生成遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至該目標(biāo)服務(wù)器節(jié)點(diǎn)。
下面結(jié)合具體示例,對(duì)本實(shí)施例作舉例說(shuō)明。
本發(fā)明主要包括以下步驟,其中,需要說(shuō)明的是,在以下示例中,新增服務(wù)器節(jié)點(diǎn)以新節(jié)點(diǎn)為例,初始服務(wù)器節(jié)點(diǎn)以原有節(jié)點(diǎn)為例:
前置步驟:客戶(hù)端與分布式存儲(chǔ)系統(tǒng)中多個(gè)服務(wù)器節(jié)點(diǎn)(假設(shè)服務(wù)器節(jié)點(diǎn)A用節(jié)點(diǎn)A表示、服務(wù)器節(jié)點(diǎn)B用節(jié)點(diǎn)B表示、服務(wù)器節(jié)點(diǎn)C用節(jié)點(diǎn)C表示)建立連接,服務(wù)器節(jié)點(diǎn)間互相建立連接并且運(yùn)行正常,客戶(hù)端連續(xù)不斷地發(fā)起不同的請(qǐng)求至服務(wù)器節(jié)點(diǎn);為應(yīng)對(duì)應(yīng)用規(guī)模的增大,現(xiàn)新增N個(gè)服務(wù)器節(jié)點(diǎn)(假設(shè)服務(wù)器節(jié)點(diǎn)X用節(jié)點(diǎn)X表示、服務(wù)器節(jié)點(diǎn)Y用節(jié)點(diǎn)Y表示、服務(wù)器節(jié)點(diǎn)Z用節(jié)點(diǎn)Z表示),新節(jié)點(diǎn)已完成和原有節(jié)點(diǎn)、客戶(hù)端的建鏈工作,而數(shù)據(jù)目前仍然在原節(jié)點(diǎn)上。
步驟S11:判斷當(dāng)前系統(tǒng)中分片數(shù)是否滿(mǎn)足擴(kuò)容的需要(由特定算法實(shí)現(xiàn),保證重分布后各節(jié)點(diǎn)上分片數(shù)達(dá)到合理數(shù)量),如分片數(shù)不足則執(zhí)行步驟S12,否則執(zhí)行步驟S14;
步驟S12:將分片總數(shù)按倍數(shù)進(jìn)行分裂(如原先有8個(gè)分片則分裂為16、24……8X),使分裂后的總數(shù)滿(mǎn)足系統(tǒng)擴(kuò)容需要。假設(shè)分裂為8X個(gè)分片,分裂前的路由用R1表示僅含有8個(gè)分片的路由信息,分裂后的路由R2則含有8X個(gè)分片的路由信息,原分片i對(duì)應(yīng)新的分片(iX)~(iX+X-1),原分片均勻分散在8X中;該步驟不執(zhí)行數(shù)據(jù)分裂,僅相對(duì)于對(duì)原有分片生成了X個(gè)連接,每個(gè)連接創(chuàng)建一個(gè)過(guò)濾器使其僅連接原分片的1/X數(shù)據(jù)。
步驟S13:在步驟S12中將路由R1分裂為了路由R2,但是因?yàn)橄到y(tǒng)是分布式環(huán)境,節(jié)點(diǎn)和客戶(hù)端之間路由同步需要一定的時(shí)間,為了保證在該過(guò)程中保證服務(wù)仍然可用,將服務(wù)端原有路由R1仍然保留,因?yàn)椴襟ES12中的分裂并非真正的分裂,數(shù)據(jù)仍然還是舊的分布方式。故通過(guò)路由R1仍然可以訪(fǎng)問(wèn)到正確的存儲(chǔ)地址,所以在允許R1正常使用的情況下,步驟S12的分裂對(duì)系統(tǒng)可用性是沒(méi)有影響的,在當(dāng)前步驟中監(jiān)控路由R2 的同步情況,當(dāng)R2在分布式系統(tǒng)中完成同步時(shí)使路由R1不可用,完成新舊路由的切換;
步驟S14:現(xiàn)在分片數(shù)足以滿(mǎn)足系統(tǒng)擴(kuò)容需要,按分片重新計(jì)算節(jié)點(diǎn)間的數(shù)據(jù)分布產(chǎn)生遷移列表,使分片數(shù)據(jù)從原節(jié)點(diǎn)上遷移至新節(jié)點(diǎn)上。按以下步驟分別執(zhí)行遷移列表中的遷移任務(wù):
步驟S15:執(zhí)行遷移任務(wù),將分片數(shù)據(jù)從源節(jié)點(diǎn)遷移至目的節(jié)點(diǎn),遷移過(guò)程中記錄Redo日志,當(dāng)遷移快結(jié)束時(shí)使分片不可用,完成遷移后恢復(fù),在分片數(shù)據(jù)不可用的短暫時(shí)間內(nèi)服務(wù)端收到服務(wù)請(qǐng)求后退回客戶(hù)端重試(分布式系統(tǒng)多副本機(jī)制也可以容忍單點(diǎn)故障),因不可用時(shí)間在毫秒ms級(jí)故通過(guò)重試即可完成服務(wù)對(duì)應(yīng)用沒(méi)有影響。
上述步驟S11至步驟S15為系統(tǒng)節(jié)點(diǎn)間數(shù)據(jù)遷移的場(chǎng)景。
進(jìn)一步地,上述步驟中涉及到的Redo日志是用于記錄對(duì)數(shù)據(jù)進(jìn)行的操作,用于重做相關(guān)的操作,本實(shí)施例中用于記錄遷移過(guò)程中外部請(qǐng)求對(duì)數(shù)據(jù)的操作,方便在遷移結(jié)束后根據(jù)記錄重新操作相應(yīng)數(shù)據(jù),從而保證數(shù)據(jù)的一致性。
上述步驟S13、S15體現(xiàn)了本發(fā)明實(shí)施例中數(shù)據(jù)遷移對(duì)系統(tǒng)正常工作的無(wú)影響。相對(duì)于相關(guān)技術(shù)中預(yù)先設(shè)置大量分片實(shí)現(xiàn)擴(kuò)容的方式,本發(fā)明實(shí)施例中分片數(shù)在合理范圍內(nèi)開(kāi)銷(xiāo)很小,體現(xiàn)了本發(fā)明實(shí)施例的技術(shù)優(yōu)勢(shì);相對(duì)于現(xiàn)有技術(shù)中通過(guò)擴(kuò)展Hash范圍,然后通過(guò)查表的方式獲取分片數(shù)據(jù)路由,導(dǎo)致了路由時(shí)間復(fù)雜度大的問(wèn)題。而實(shí)施例中路由仍然可以通過(guò)簡(jiǎn)單計(jì)算獲取,時(shí)間復(fù)雜度在O(1),體現(xiàn)了本實(shí)施例的性能優(yōu)勢(shì)。
進(jìn)一步地,步驟S15中,雖然節(jié)點(diǎn)在遷移的最后階段停止了對(duì)客戶(hù)端關(guān)于被遷移數(shù)據(jù)的服務(wù),但因?yàn)橄到y(tǒng)是分布式的設(shè)計(jì)時(shí)就考慮了某個(gè)節(jié)點(diǎn)不工作的情況(多副本機(jī)制、請(qǐng)求重試機(jī)制等),且停止服務(wù)的時(shí)間很短故系統(tǒng)的正常工作不會(huì)受到影響。對(duì)客戶(hù)端來(lái)說(shuō)本次遷移完全是透明的。
通過(guò)本實(shí)施例,提出了一種高可用而可靠的分布式存儲(chǔ)系統(tǒng)中擴(kuò)容的方案,解決了相關(guān)技術(shù)在擴(kuò)容過(guò)程中,需要預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,進(jìn)一步解決了相關(guān)技術(shù)中通過(guò)擴(kuò)展Hash范圍,然后通過(guò)查表的方式獲取分片數(shù)據(jù)路由,導(dǎo)致路由時(shí)間復(fù)雜度大的問(wèn)題。
在一個(gè)可選的實(shí)施方式中,根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù)包括以下步驟:
步驟S21,判斷初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量;
步驟S22,若初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量小于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,則在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù)。
可選地,在本實(shí)施例中,判斷初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量的方法包括但并不限于:用初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量除以服務(wù)器節(jié)點(diǎn)總量(其中服務(wù)器節(jié)點(diǎn)總量包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn)),若得到的計(jì)算結(jié)果過(guò)小,則需對(duì)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量進(jìn)行分裂擴(kuò)展,以滿(mǎn)足各個(gè)服務(wù)器節(jié)點(diǎn)都有分片數(shù)據(jù),進(jìn)而克服現(xiàn)有技術(shù)中只有部分服務(wù)器節(jié)點(diǎn)中有分片數(shù)據(jù),部分服務(wù)器節(jié)點(diǎn)中沒(méi)有分片數(shù)據(jù),所造成的分片數(shù)據(jù)分布不均衡的問(wèn)題。此外,若得到的計(jì)算結(jié)果大于預(yù)定閾值,則可直接對(duì)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)進(jìn)行容量擴(kuò)展,以使新增服務(wù)器節(jié)點(diǎn)與初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)分布均衡。
通過(guò)上述步驟,根據(jù)判斷初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,如果否,則在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù),進(jìn)一步解決了在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題。
在一個(gè)可選的實(shí)施方式中,在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展可以通過(guò)以下步驟實(shí)現(xiàn):
步驟S31,對(duì)初始服務(wù)器節(jié)點(diǎn)中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(i*X,i*X+X-1);
步驟S32,建立與擴(kuò)展后的該分片號(hào)集合中每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到用于訪(fǎng)問(wèn)擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。
可選地,在本實(shí)施例中,具體是通過(guò)在擴(kuò)容過(guò)程中,對(duì)初始服務(wù)器中分片號(hào)為i的分片數(shù)據(jù)按照該預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合,并通過(guò)建立與擴(kuò)展后的分片號(hào)集合中的每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到與擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。而不同于相關(guān)技術(shù)中,通過(guò)預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,而是根據(jù)服務(wù)器節(jié)點(diǎn)和分片總量之間的關(guān)系,分裂當(dāng)前分片數(shù)據(jù)得到擴(kuò)展后的分片數(shù)據(jù)集合。
需要說(shuō)明的是,上述步驟S21中涉及到的i為0到初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量之間的任意一個(gè)自然數(shù)。
例如,假設(shè)i為1,預(yù)定倍數(shù)X為8,那么對(duì)初始服務(wù)器中分片號(hào)為1的分片數(shù)據(jù)按照預(yù)定倍數(shù)8進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(8,15)。進(jìn)一步地,在本實(shí)施例中,并不是執(zhí)行真正意義上的數(shù)據(jù)分裂,僅相對(duì)于對(duì)原有分片生成了多個(gè)連接,每個(gè)連接創(chuàng)建一個(gè)過(guò)濾器和指針,使其僅連接原分片的1/8數(shù)據(jù)。
通過(guò)上述步驟,建立擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接,而不是執(zhí)行數(shù)據(jù)分裂,進(jìn)而使得在遷移過(guò)程中,數(shù)據(jù)可以仍然使用原有路由,避免數(shù)據(jù)中斷。
在一個(gè)可選的實(shí)施方式中,在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù) 據(jù)包括以下步驟:
步驟S41,根據(jù)最小遷移路徑生成遷移列表;
步驟S42,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至目標(biāo)服務(wù)器節(jié)點(diǎn)。
可選地,在本實(shí)施例中,具體是根據(jù)最小遷移路徑生成的遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至目標(biāo)服務(wù)器節(jié)點(diǎn)。
需要說(shuō)明的是,上述步驟中涉及到的遷移列表中至少包括待遷移的分片數(shù)據(jù),以及待遷移的分片數(shù)據(jù)在遷移前的源服務(wù)器節(jié)點(diǎn)地址和在遷移后的目標(biāo)服務(wù)器節(jié)點(diǎn)地址。
通過(guò)上述步驟,根據(jù)最小遷移路徑生成的遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至目標(biāo)服務(wù)器節(jié)點(diǎn),進(jìn)一步解決了相關(guān)技術(shù)在擴(kuò)容過(guò)程中,需要預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題。
在一個(gè)可選的實(shí)施方式中,在將待遷移的分片數(shù)據(jù)按照遷移列表由該源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至該目標(biāo)服務(wù)器節(jié)點(diǎn)時(shí),還包括以下步驟:
步驟S51,接收客戶(hù)端發(fā)送的操作請(qǐng)求,其中,操作請(qǐng)求用于對(duì)待遷移的分片數(shù)據(jù)執(zhí)行預(yù)定操作;
步驟S52,響應(yīng)操作請(qǐng)求對(duì)初始服務(wù)器中的分片數(shù)據(jù)執(zhí)行操作該預(yù)定操作,并將預(yù)定操作的操作記錄保存到Redo日志中,其中,操作記錄用于對(duì)遷移后的服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)執(zhí)行該預(yù)定操作。
通過(guò)上述步驟,將操作記錄保存到重做(Redo)日志中,方便在遷移結(jié)束后根據(jù)記錄重新操作相應(yīng)數(shù)據(jù),從而保證了數(shù)據(jù)的一致性。
在一個(gè)可選的實(shí)施方式中,在將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至該目標(biāo)服務(wù)器節(jié)點(diǎn)時(shí),還包括以下步驟:
步驟S61,若已完成遷移的分片數(shù)據(jù)的分片數(shù)量大于等于預(yù)定閾值,則鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),其中,在鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)之后,該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)將拒絕執(zhí)行該操作。
需要說(shuō)明的是,在本實(shí)施例中,上述預(yù)定閾值可以是已完成遷移的分片數(shù)據(jù)的分片數(shù)量占總分片數(shù)量的比值大于等于80%??梢愿鶕?jù)實(shí)際遷移過(guò)程設(shè)置,并不做限定。
可選地,在本實(shí)施例中,首先得判斷已完成遷移的分片數(shù)據(jù)的分片數(shù)量是否大于等于預(yù)定閾值,如果大于,則鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),使得初始服務(wù)器中的分片數(shù)據(jù)為不可用狀態(tài);如果小于預(yù)定閾值,則可以繼續(xù)訪(fǎng)問(wèn)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)。
通過(guò)上述步驟,解決了相關(guān)技術(shù)中在擴(kuò)容時(shí),造成數(shù)據(jù)訪(fǎng)問(wèn)中斷的問(wèn)題,使得系統(tǒng)擴(kuò)容對(duì)整個(gè)系統(tǒng)的持續(xù)穩(wěn)定工作無(wú)影響,對(duì)客戶(hù)端完全透明,達(dá)到了擴(kuò)容速度快、效率高、開(kāi)銷(xiāo)小的效果。
下面結(jié)合具體示例,對(duì)本實(shí)施例作舉例說(shuō)明。
本實(shí)施例可以是在云計(jì)算領(lǐng)域分布式存儲(chǔ)系統(tǒng)中,解決系統(tǒng)擴(kuò)容問(wèn)題。具體地,本發(fā)明提出了一系列措施,使得系統(tǒng)擴(kuò)容對(duì)整個(gè)系統(tǒng)的持續(xù)穩(wěn)定工作無(wú)影響,進(jìn)而達(dá)到對(duì)客戶(hù)端完全透明,且擴(kuò)容速度快、效率高、開(kāi)銷(xiāo)小的效果。
圖2是根據(jù)本發(fā)明實(shí)施例的由服務(wù)器節(jié)點(diǎn)和客戶(hù)端構(gòu)成的分布式存儲(chǔ)系統(tǒng)架構(gòu)示意圖。如圖2所示,包括服務(wù)器節(jié)點(diǎn)22至服務(wù)器節(jié)點(diǎn)24,和客戶(hù)端25和客戶(hù)端26。其中,擴(kuò)容包括新增服務(wù)器節(jié)點(diǎn)需要完成和原服務(wù)器節(jié)點(diǎn)及客戶(hù)端之間的連接、數(shù)據(jù)重分布兩個(gè)部分,連接建立過(guò)程相對(duì)簡(jiǎn)單,本發(fā)明不做詳細(xì)描述。節(jié)點(diǎn)間的數(shù)據(jù)分布以分片為最小分布單元,擴(kuò)容后需要將一部分分片遷移至新節(jié)點(diǎn)以保證系統(tǒng)中各節(jié)點(diǎn)負(fù)荷均衡。
在圖2所示系統(tǒng)架構(gòu)下,下面結(jié)合圖3對(duì)本實(shí)施例作進(jìn)一步說(shuō)明。圖3是根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)系統(tǒng)擴(kuò)容操作流程圖。其中,需要說(shuō)明的是,在以下示例中,初始服務(wù)器節(jié)點(diǎn)以原節(jié)點(diǎn)為例,新增服務(wù)器節(jié)點(diǎn)以新節(jié)點(diǎn)為例,Redo日志即為重做日志。其中,包括如下步驟:
前置步驟:客戶(hù)端31持續(xù)發(fā)起請(qǐng)求,整個(gè)存儲(chǔ)系統(tǒng)32正常工作中,新節(jié)點(diǎn)34已完成和原節(jié)點(diǎn)33、客戶(hù)端31的鏈路連接。
步驟S301,計(jì)算當(dāng)前的存儲(chǔ)系統(tǒng)32中分片數(shù)量是否滿(mǎn)足擴(kuò)容需要,是否能保證擴(kuò)容后各個(gè)節(jié)點(diǎn)有足夠的分片以保證負(fù)載均衡,如分片數(shù)量不足則執(zhí)行步驟S302,分裂分片;如分片數(shù)量足夠則直接跳至步驟S306;
步驟S302,計(jì)算分片分裂倍數(shù),計(jì)算需要將分片數(shù)量分裂為多少倍才能滿(mǎn)足擴(kuò)容需要,假設(shè)為X倍(X>1);
步驟S303,將原有路由R1分裂為R2,使分片數(shù)擴(kuò)大X倍,其中原有分片i分裂為分片iX~(iX+X-1),分裂后新分片對(duì)應(yīng)的存儲(chǔ)位置不變,新分片在節(jié)點(diǎn)中由過(guò)濾器及指向原有分片的指針組成,相當(dāng)于原分片部分?jǐn)?shù)據(jù)(1/X)的連接,分片的大多數(shù)服務(wù)由原分片處理。
步驟S304,同步路由至客戶(hù)端;
步驟S305,檢查新路由是否同步完成,在分裂及同步過(guò)程中因數(shù)據(jù)存儲(chǔ)位置等沒(méi)有改變,原路由仍然可用,客戶(hù)端31仍然可以通過(guò)原路由R1訪(fǎng)問(wèn)服務(wù)執(zhí)行讀寫(xiě)請(qǐng)求,存儲(chǔ)系統(tǒng)32可用性不受影響;
步驟S306,當(dāng)分裂和同步執(zhí)行完成后,使舊路由R1對(duì)客戶(hù)端31不可用,客戶(hù)端 31只能通過(guò)新路由R2訪(fǎng)問(wèn)服務(wù)執(zhí)行讀寫(xiě)請(qǐng)求,因客戶(hù)端31已完成路由R2的同步,故存儲(chǔ)系統(tǒng)32可用性也不受影響;
步驟S307,計(jì)算生成遷移列表,列表中的每一項(xiàng)表示一個(gè)分片的遷移路徑,在圖3中具體是從原節(jié)點(diǎn)33遷移至新節(jié)點(diǎn)34,使存儲(chǔ)系統(tǒng)32通過(guò)執(zhí)行遷移列表中的遷移任務(wù)完成整個(gè)存儲(chǔ)系統(tǒng)32的數(shù)據(jù)重分布;
步驟S308,執(zhí)行遷移任務(wù),原節(jié)點(diǎn)33將該分片中的數(shù)據(jù)發(fā)送至新節(jié)點(diǎn)34(通過(guò)過(guò)濾器可以將非本分片的數(shù)據(jù)過(guò)濾掉);
步驟S309,新節(jié)點(diǎn)34保存數(shù)據(jù)。在遷移數(shù)據(jù)過(guò)程中因原節(jié)點(diǎn)33仍然在提供數(shù)據(jù)讀寫(xiě)服務(wù),故在原節(jié)點(diǎn)33分片上記錄Redo日志;
步驟S310,原節(jié)點(diǎn)33在發(fā)送完數(shù)據(jù)后發(fā)送Redo日志;
步驟S311,新節(jié)點(diǎn)34收到Redo日志后執(zhí)行數(shù)據(jù)重建;在這一過(guò)程中需要保證新節(jié)點(diǎn)34數(shù)據(jù)重建的速度高于源節(jié)點(diǎn)數(shù)據(jù)變更速度;
步驟S312,在原節(jié)點(diǎn)33傳輸Redo日志快結(jié)束時(shí)停止原節(jié)點(diǎn)33分片的服務(wù),發(fā)送最后的Redo日志。新節(jié)點(diǎn)34收到日志后數(shù)據(jù)重建完成后由新節(jié)點(diǎn)34恢復(fù)服務(wù);該分片停止服務(wù)的時(shí)間內(nèi)由多副本機(jī)制及請(qǐng)求重試機(jī)制保證系統(tǒng)的可用性;
步驟S313,完成遷移列表中所有遷移任務(wù),至此整個(gè)存儲(chǔ)系統(tǒng)32擴(kuò)容完成;
步驟S314,啟動(dòng)服務(wù)。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤(pán))中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
實(shí)施例2
在本實(shí)施例中還提供了一種容量擴(kuò)展裝置,該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過(guò)說(shuō)明的不再贅述。如以下所使用的,術(shù)語(yǔ)“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來(lái)實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
圖4是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖,如圖4所示,該裝置包括:
1)獲取模塊42,用于獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服 務(wù)器節(jié)點(diǎn);
2)第一處理模塊44,用于根據(jù)該服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中該初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);
3)第二處理模塊46,用于在該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布該擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。
可選地,在本實(shí)施例中,上述容量擴(kuò)展方法包括但并不限于應(yīng)用于云計(jì)算分布式存儲(chǔ)系統(tǒng)中進(jìn)行系統(tǒng)擴(kuò)容的過(guò)程中。在該應(yīng)用場(chǎng)景下,獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。也就是說(shuō),可以根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù),并在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布擴(kuò)展后的分片數(shù)據(jù),以滿(mǎn)足服務(wù)器節(jié)點(diǎn)的擴(kuò)容需求,解決了相關(guān)技術(shù)在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,進(jìn)而達(dá)到了減小分片開(kāi)銷(xiāo)的效果。
需要說(shuō)明的是,根據(jù)服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù)。其中,分裂擴(kuò)展可以包括但不限于:將初始服務(wù)器節(jié)點(diǎn)中的原有分片按照預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,得到擴(kuò)展后的分片數(shù)據(jù)。以使擴(kuò)展后的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足包含新增服務(wù)器節(jié)點(diǎn)的服務(wù)器節(jié)點(diǎn)的擴(kuò)容需要。
可選地,在本實(shí)施例中,在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展的方法包括但并不限于:對(duì)初始服務(wù)器中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合。例如,假設(shè)原有8個(gè)分片數(shù)據(jù),則可以按照預(yù)定倍數(shù)X進(jìn)行分裂,則擴(kuò)展后的分片數(shù)據(jù)為8X,使分裂后的分片數(shù)量滿(mǎn)足系統(tǒng)擴(kuò)容需要。在此,假設(shè)將上述8個(gè)分片數(shù)據(jù)中分片號(hào)i=1的分片數(shù)據(jù),按照預(yù)定倍數(shù)8倍(即X=8)進(jìn)行分裂擴(kuò)展,那么原分片號(hào)為0的分片數(shù)據(jù)在分裂擴(kuò)展后,所得到的擴(kuò)展后的分片號(hào)集合中的分片號(hào)為(0~7),原分片號(hào)為1的分片數(shù)據(jù)在分裂擴(kuò)展后,所得到的擴(kuò)展后的分片號(hào)集合中的分片號(hào)為(8~15),依次類(lèi)推,將得到與8個(gè)分片數(shù)據(jù)分別對(duì)應(yīng)的擴(kuò)展后的分片號(hào)集合。
需要說(shuō)明的是,本實(shí)施例中涉及的預(yù)定條件包括但并不限于:每一服務(wù)器節(jié)點(diǎn)的分片負(fù)載是否均衡。
可選地,本實(shí)施例中,在當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布該擴(kuò)展后的分片數(shù)據(jù) 的方法包括但并不限于:根據(jù)最小遷移路徑生成遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至該目標(biāo)服務(wù)器節(jié)點(diǎn)。
在一個(gè)可選地實(shí)施方式中,圖5是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(一),如圖5所示,第一處理模塊44包括:
1)判斷單元52,用于判斷該初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于該服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量;
2)處理單元54,用于在該初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量小于該服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量時(shí),在該初始服務(wù)器節(jié)點(diǎn)中按照該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到該擴(kuò)展后的分片數(shù)據(jù)。
可選地,在本實(shí)施例中,判斷初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量的方法包括但并不限于:用初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量除以服務(wù)器節(jié)點(diǎn)總量(其中服務(wù)器節(jié)點(diǎn)總量包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn)),若得到的計(jì)算結(jié)果過(guò)小,則需對(duì)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量進(jìn)行分裂擴(kuò)展,以滿(mǎn)足各個(gè)服務(wù)器節(jié)點(diǎn)都有分片數(shù)據(jù),進(jìn)而克服現(xiàn)有技術(shù)中只有部分服務(wù)器節(jié)點(diǎn)中有分片數(shù)據(jù),部分服務(wù)器節(jié)點(diǎn)中沒(méi)有分片數(shù)據(jù),所造成的分片數(shù)據(jù)分布不均衡的問(wèn)題。此外,若得到的計(jì)算結(jié)果大于預(yù)定閾值,則可直接對(duì)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)進(jìn)行容量擴(kuò)展,以使新增服務(wù)器節(jié)點(diǎn)與初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)分布均衡。
通過(guò)上述裝置,根據(jù)判斷初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量是否大于服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,如果否,則在初始服務(wù)器節(jié)點(diǎn)中按照初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片數(shù)量的預(yù)定倍數(shù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù),進(jìn)一步解決了在系統(tǒng)運(yùn)行初期預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題。
在一個(gè)可選地實(shí)施方式中,圖6是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(二),如圖6所示,處理單元54包括:
1)第一處理子單元62,用于對(duì)該初始服務(wù)器節(jié)點(diǎn)中分片號(hào)為i的分片數(shù)據(jù)按照預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(i*X,i*X+X-1),其中,該i為0到該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量之間的任意一個(gè)自然數(shù);
2)創(chuàng)建子單元64,用于建立與擴(kuò)展后的該分片號(hào)集合中每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到用于訪(fǎng)問(wèn)擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。
可選地,在本實(shí)施例中,具體是通過(guò)在擴(kuò)容過(guò)程中,對(duì)初始服務(wù)器中分片號(hào)為i的分片數(shù)據(jù)按照該預(yù)定倍數(shù)X進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合,并通過(guò)建立與擴(kuò)展后的分片號(hào)集合中的每一個(gè)分片號(hào)對(duì)應(yīng)的過(guò)濾器和指針,以得到與擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接。而不同于相關(guān)技術(shù)中,通過(guò)預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題,而是根據(jù)服務(wù)器節(jié)點(diǎn)和分片總量之間的關(guān)系,分裂當(dāng)前分片數(shù)據(jù)得 到擴(kuò)展后的分片數(shù)據(jù)集合。
需要說(shuō)明的是,上述步驟S21中涉及到的i為0到初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)的分片總量之間的任意一個(gè)自然數(shù)。
例如,假設(shè)i為1,預(yù)定倍數(shù)X為8,那么對(duì)初始服務(wù)器中分片號(hào)為1的分片數(shù)據(jù)按照預(yù)定倍數(shù)8進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片號(hào)集合(8,15)。進(jìn)一步地,在本實(shí)施例中,并不是執(zhí)行真正意義上的數(shù)據(jù)分裂,僅相對(duì)于對(duì)原有分片生成了多個(gè)連接,每個(gè)連接創(chuàng)建一個(gè)過(guò)濾器和指針,使其僅連接原分片的1/8數(shù)據(jù)。
通過(guò)上述裝置,建立擴(kuò)展后的每一個(gè)分片號(hào)對(duì)應(yīng)的分片數(shù)據(jù)的連接,而不是執(zhí)行數(shù)據(jù)分裂,進(jìn)而使得在遷移過(guò)程中,數(shù)據(jù)可以仍然使用原有路由,避免數(shù)據(jù)中斷。
在一個(gè)可選地實(shí)施方式中,圖7是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(三),如圖7所示,第二處理模塊46包括:
1)獲取單元72,用于根據(jù)最小遷移路徑生成遷移列表,其中,該遷移列表中至少包括待遷移的分片數(shù)據(jù),以及該待遷移的分片數(shù)據(jù)在遷移前的源服務(wù)器節(jié)點(diǎn)地址和在遷移后的目標(biāo)服務(wù)器節(jié)點(diǎn)地址;
2)遷移單元74,用于將該待遷移的分片數(shù)據(jù)按照該遷移列表由該源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至該目標(biāo)服務(wù)器節(jié)點(diǎn)。
可選地,在本實(shí)施例中,具體是根據(jù)最小遷移路徑生成的遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至目標(biāo)服務(wù)器節(jié)點(diǎn)。
需要說(shuō)明的是,上述步驟中涉及到的遷移列表中至少包括待遷移的分片數(shù)據(jù),以及待遷移的分片數(shù)據(jù)在遷移前的源服務(wù)器節(jié)點(diǎn)地址和在遷移后的目標(biāo)服務(wù)器節(jié)點(diǎn)地址。
通過(guò)上述裝置,根據(jù)最小遷移路徑生成的遷移列表,將待遷移的分片數(shù)據(jù)按照遷移列表由源服務(wù)器節(jié)點(diǎn)復(fù)制遷移至目標(biāo)服務(wù)器節(jié)點(diǎn),進(jìn)一步解決了相關(guān)技術(shù)在擴(kuò)容過(guò)程中,需要預(yù)先設(shè)置大量分片,導(dǎo)致分片開(kāi)銷(xiāo)太大的問(wèn)題。
在一個(gè)可選地實(shí)施方式中,圖8是根據(jù)本發(fā)明實(shí)施例的容量擴(kuò)展裝置的結(jié)構(gòu)框圖(四),如圖8所示,遷移單元74包括:
1)接收子單元82,用于接收客戶(hù)端發(fā)送的操作請(qǐng)求,其中,該操作請(qǐng)求用于對(duì)該待遷移的分片數(shù)據(jù)執(zhí)行預(yù)定操作;
2)第二處理子單元84,用于響應(yīng)該操作請(qǐng)求對(duì)該初始服務(wù)器中的分片數(shù)據(jù)執(zhí)行該預(yù)定操作,并將該預(yù)定操作的操作記錄保存到Redo日志中,其中,該操作記錄用于對(duì)遷移后的該服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)執(zhí)行該預(yù)定操作。
通過(guò)上述裝置,將操作記錄保存到Redo日志中,方便在遷移結(jié)束后根據(jù)記錄重新 操作相應(yīng)數(shù)據(jù),從而保證了數(shù)據(jù)的一致性。
可選地,在本實(shí)施例中,遷移單元74還用于在已完成該遷移的分片數(shù)據(jù)的分片數(shù)量大于等于預(yù)定閾值時(shí),鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),其中,在鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)之后,該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)將拒絕執(zhí)行該操作。
需要說(shuō)明的是,在本實(shí)施例中,上述預(yù)定閾值可以是已完成遷移的分片數(shù)據(jù)的分片數(shù)量占總分片數(shù)量的比值大于等于80%??梢愿鶕?jù)實(shí)際遷移過(guò)程設(shè)置,并不做限定。
可選地,在本實(shí)施例中,首先得判斷已完成遷移的分片數(shù)據(jù)的分片數(shù)量是否大于等于預(yù)定閾值,如果大于,則鎖定該初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù),使得初始服務(wù)器中的分片數(shù)據(jù)為不可用狀態(tài);如果小于預(yù)定閾值,則可以繼續(xù)訪(fǎng)問(wèn)初始服務(wù)器節(jié)點(diǎn)中的分片數(shù)據(jù)。
通過(guò)上述裝置,解決了相關(guān)技術(shù)中在擴(kuò)容時(shí),造成數(shù)據(jù)訪(fǎng)問(wèn)中斷的問(wèn)題,使得系統(tǒng)擴(kuò)容對(duì)整個(gè)系統(tǒng)的持續(xù)穩(wěn)定工作無(wú)影響,對(duì)客戶(hù)端完全透明,達(dá)到了擴(kuò)容速度快、效率高、開(kāi)銷(xiāo)小的效果。
需要說(shuō)明的是,上述各個(gè)模塊是可以通過(guò)軟件或硬件來(lái)實(shí)現(xiàn)的,對(duì)于后者,可以通過(guò)以下方式實(shí)現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個(gè)處理器中。
實(shí)施例3
本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)。本實(shí)施例的具體應(yīng)用場(chǎng)景可以參考上述實(shí)施例1和實(shí)施例2,在此不贅述??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S1,獲取在增加服務(wù)器節(jié)點(diǎn)后的當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量,其中,該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中包括新增服務(wù)器節(jié)點(diǎn)和初始服務(wù)器節(jié)點(diǎn);
S2,根據(jù)該服務(wù)器節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)量對(duì)該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中該初始服務(wù)器節(jié)點(diǎn)上的分片數(shù)據(jù)進(jìn)行分裂擴(kuò)展,以得到擴(kuò)展后的分片數(shù)據(jù);
S3,在該當(dāng)前分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)中重新分布該擴(kuò)展后的分片數(shù)據(jù),以使該新增服務(wù)器節(jié)點(diǎn)和該初始服務(wù)器節(jié)點(diǎn)中每一個(gè)節(jié)點(diǎn)上的分片數(shù)據(jù)的分片數(shù)量滿(mǎn)足預(yù)定條件。
可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以包括但不限于:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
可選地,在本實(shí)施例中,處理器根據(jù)存儲(chǔ)介質(zhì)中已存儲(chǔ)的程序代碼執(zhí)行上述步驟S1、S2以及S3。
可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例及可選實(shí)施方式中所描述的示例,本實(shí)施例在此不再贅述。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。