本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別是涉及一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法及裝置。
背景技術(shù):
大數(shù)據(jù)時代,海量數(shù)據(jù)的存儲是一項關(guān)鍵技術(shù)。隨著數(shù)據(jù)規(guī)模的增加,單個存儲結(jié)點的qps(querypersecond,每秒查詢率)過大,無法承受訪問的壓力時,就需要采用分布式存儲的解決方案,使用數(shù)據(jù)分片技術(shù),將數(shù)據(jù)分發(fā)到不同的存儲結(jié)點,以消除訪問請求的熱點,從而實現(xiàn)負載均衡。其中,訪問請求的熱點,指qps過大的數(shù)據(jù)分片對應(yīng)的存儲結(jié)點,而存儲結(jié)點指存儲服務(wù)器,可以是物理服務(wù)器,也可以是虛擬服務(wù)器。
其中,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫以及大數(shù)據(jù)時代興起的各類nosql(notonlysql,非關(guān)系型數(shù)據(jù)庫)數(shù)據(jù)庫,都已廣泛應(yīng)用數(shù)據(jù)分片技術(shù),構(gòu)成分布式存儲系統(tǒng),并且由于分布式存儲系統(tǒng)采用了可擴展的系統(tǒng)結(jié)構(gòu),利用多臺存儲服務(wù)器來分擔(dān)存儲負荷、位置服務(wù)器來定位存儲信息,不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴展,能夠隨著數(shù)據(jù)量、qps的增加,動態(tài)地擴展存儲結(jié)點;例如hbase,一個分布式的、面向列的開源數(shù)據(jù)庫,應(yīng)用數(shù)據(jù)分片技術(shù),會將一個數(shù)據(jù)表的數(shù)據(jù)劃分為若干region(hbase數(shù)據(jù)存儲和管理的基本單位),即若干個數(shù)據(jù)分片,并將region分配到集群的各個結(jié)點上,而當(dāng)一個region的大小超過設(shè)定的閾值時,則會自動根據(jù)該region的rowkey(行鍵)范圍對半分裂為兩個子region,而分裂后的兩個子region將會分配在不同的存儲結(jié)點上。
目前,大部分的數(shù)據(jù)分片技術(shù),都是采用基于索引的分裂策略。例如hbase,假設(shè)數(shù)據(jù)量基于主鍵索引有一定分布規(guī)律,那么,可以根據(jù)主鍵索引進行分裂,分裂后,將數(shù)據(jù)量均勻的劃分到兩個子region中;其中,主鍵索引為針對主鍵建立的唯一索引,它是對數(shù)據(jù)庫表中主鍵對應(yīng)列的值進行排序的一種結(jié)構(gòu)。舉例而言,數(shù)據(jù)表a中,索引鍵值小于或等于k1的數(shù)據(jù)總量與大于k1的數(shù)據(jù)總量相等,那么,便可以確定k1為分裂點,將索引鍵值小于或等于k1的數(shù)據(jù)劃分為一個子region,大于k1的數(shù)據(jù)確定為另一個子region。
然而,在實際應(yīng)用中,對于數(shù)據(jù)的訪問并不均勻,也就是說,即使基于索引的分裂策略能保證數(shù)據(jù)量的均勻劃分,但請求的訪問仍然可能集中在部分的數(shù)據(jù)上,即,數(shù)據(jù)分片上數(shù)據(jù)量的分布,與訪問請求的分布可能并不一致,從而使得基于索引的分裂策略失效,無法解決熱點問題,導(dǎo)致訪問請求的負載不均衡。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例的目的在于提供一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法及裝置,以實現(xiàn)訪問請求的負載均衡。具體技術(shù)方案如下:
第一方面,本發(fā)明實施例提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,所述方法包括:
監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;
將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,對所述目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;
判斷所述目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;
若是,確定所述采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);
根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一所述預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;
根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行分裂。
可選地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,還包括:當(dāng)監(jiān)測到所述目標數(shù)據(jù)分片的qps大于所述第一預(yù)設(shè)閾值,且不大于所述第二預(yù)設(shè)閾值的第一狀態(tài)時,記錄所述第一狀態(tài)對應(yīng)的第一持續(xù)時間;
當(dāng)所述第一持續(xù)時間大于第三預(yù)設(shè)閾值時,執(zhí)行所述確定所述采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)的步驟。
可選地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,還包括:
當(dāng)監(jiān)測到所述目標數(shù)據(jù)分片的qps小于所述第一預(yù)設(shè)閾值時,判斷已記錄的所述第一持續(xù)時間是否大于第四預(yù)設(shè)閾值;
如果是,則執(zhí)行所述確定所述采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)的步驟。
可選地,所述根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行分裂的步驟,包括:
根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片;
針對每一所述邏輯子數(shù)據(jù)分片,判斷該邏輯子數(shù)據(jù)分片的qps是否大于所述第一預(yù)設(shè)閾值;
若該邏輯子數(shù)據(jù)分片的qps大于所述第一預(yù)設(shè)閾值,以該邏輯子數(shù)據(jù)分片來更新所述目標數(shù)據(jù)分片,返回執(zhí)行所述對所述目標數(shù)據(jù)分片的訪問請求進行采樣的步驟;
根據(jù)預(yù)設(shè)規(guī)則,將最終所得到的邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點。
可選地,所述根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片的步驟,包括:
根據(jù)所述分裂點,將所述目標數(shù)據(jù)分片的元數(shù)據(jù)信息分裂為子元數(shù)據(jù)信息;
將所述子元數(shù)據(jù)信息對應(yīng)的數(shù)據(jù)分片確定為邏輯子數(shù)據(jù)分片。
可選地,在所述將所述邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點的步驟之前,所述方法還包括:
在該邏輯子數(shù)據(jù)分片的qps不大于所述第一預(yù)設(shè)閾值的情況下,判斷該邏輯子數(shù)據(jù)分片的qps是否小于第五預(yù)設(shè)閾值;
若該邏輯子數(shù)據(jù)分片的qps小于所述第五預(yù)設(shè)閾值,確定所述目標數(shù)據(jù)分片的目標相鄰數(shù)據(jù)分片;其中,所述目標相鄰數(shù)據(jù)分片的qps在所述目標數(shù)據(jù)分片的相鄰數(shù)據(jù)分片的qps中最??;所述相鄰數(shù)據(jù)分片與所述目標數(shù)據(jù)分片在索引上連續(xù);
判斷所述目標相鄰數(shù)據(jù)分片的qps是否小于第六預(yù)設(shè)閾值;
若所述目標相鄰數(shù)據(jù)分片的qps小于所述第六預(yù)設(shè)閾值,將該邏輯子數(shù)據(jù)分片合并到所述目標相鄰數(shù)據(jù)分片上。
第二方面,本發(fā)明實施例提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,所述裝置包括:
監(jiān)測模塊,用于監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;
第一確定模塊,用于將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片;
采樣模塊,用于對所述目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;
第一判斷模塊,用于判斷所述目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;
第二確定模塊,用于在所述第一判斷模塊的判斷結(jié)果為是的情況下,確定所述采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);
第三確定模塊,用于根據(jù)所述第二確定模塊所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一所述預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;
第一分裂模塊,用于根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行分裂。
可選地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,還包括:
記錄模塊,用于當(dāng)所述監(jiān)測模塊監(jiān)測到所述目標數(shù)據(jù)分片的qps大于所述第一預(yù)設(shè)閾值,且不大于所述第二預(yù)設(shè)閾值的第一狀態(tài)時,記錄所述第一狀態(tài)對應(yīng)的第一持續(xù)時間;當(dāng)所述第一持續(xù)時間大于第三預(yù)設(shè)閾值時,觸發(fā)所述第二確定模塊。
可選地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,還包括:
第二判斷模塊,用于當(dāng)所述監(jiān)測模塊監(jiān)測到所述目標數(shù)據(jù)分片的qps小于所述第一預(yù)設(shè)閾值時,判斷已記錄的所述第一持續(xù)時間是否大于第四預(yù)設(shè)閾值;如果是,觸發(fā)所述第二確定模塊。
可選地,所述第一分裂模塊,包括:
分裂子模塊,用于根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片;
判斷子模塊,用于針對每一所述邏輯子數(shù)據(jù)分片,判斷該邏輯子數(shù)據(jù)分片的qps是否大于所述第一預(yù)設(shè)閾值;
更新子模塊,用于在所述判斷子模塊的判斷結(jié)果為是的情況下,以該邏輯子數(shù)據(jù)分片來更新所述目標數(shù)據(jù)分片,觸發(fā)所述采樣模塊;
分配子模塊,用于根據(jù)預(yù)設(shè)規(guī)則,將最終所得到的邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點。
可選地,所述分裂子模塊,具體用于:
根據(jù)所述分裂點,將所述目標數(shù)據(jù)分片的元數(shù)據(jù)信息分裂為子元數(shù)據(jù)信息;
將所述子元數(shù)據(jù)信息對應(yīng)的數(shù)據(jù)分片確定為邏輯子數(shù)據(jù)分片。
可選地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,所述裝置還包括:
第三判斷模塊,用于在所述分配子模塊將所述邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點之前,在該邏輯子數(shù)據(jù)分片的qps不大于所述第一預(yù)設(shè)閾值的情況下,判斷該邏輯子數(shù)據(jù)分片的qps是否小于第五預(yù)設(shè)閾值;
第四確定模塊,用于在所述第三判斷模塊的判斷結(jié)果為是的情況下,確定所述目標數(shù)據(jù)分片的目標相鄰數(shù)據(jù)分片;其中,所述目標相鄰數(shù)據(jù)分片的qps在所述目標數(shù)據(jù)分片的相鄰數(shù)據(jù)分片的qps中最?。凰鱿噜彅?shù)據(jù)分片與所述目標數(shù)據(jù)分片在索引上連續(xù);
第四判斷模塊,用于判斷所述目標相鄰數(shù)據(jù)分片的qps是否小于第六預(yù)設(shè)閾值;
合并模塊,用于在所述第四判斷模塊的判斷結(jié)果為是的情況下,將該邏輯子數(shù)據(jù)分片合并到所述目標相鄰數(shù)據(jù)分片上。
本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,首先,監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;判斷目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;若是,確定采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;根據(jù)分裂點,對目標數(shù)據(jù)分片進行分裂。
可以看出,本發(fā)明實施例提供的分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,與現(xiàn)有技術(shù)相比,由于本發(fā)明實施例對于qps過大的數(shù)據(jù)分片的訪問請求進行采樣獲得采樣數(shù)據(jù)流,根據(jù)采樣數(shù)據(jù)流確定分裂點進行分裂,實際是針對訪問熱點對應(yīng)的數(shù)據(jù)分片進行分裂,因此能夠消除請求訪問熱點,從而達到負載均衡。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法的流程示意圖;
圖2為本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
為實現(xiàn)訪問請求的負載均衡,本發(fā)明實施例提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法及裝置。
下面將首先對本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法進行介紹。
參見圖1,本發(fā)明實施例提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,包括如下步驟:
s101,監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值。
實際應(yīng)用中,分布式存儲系統(tǒng)中,對于每一個數(shù)據(jù)分片,通常都能夠獲取到對應(yīng)的qps,因此,可以對各個數(shù)據(jù)分片的qps進行監(jiān)測,qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片對應(yīng)的結(jié)點便可能是需要進行數(shù)據(jù)分裂的熱點。
s102,將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流。
其中,可以將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,并對目標數(shù)據(jù)分片的訪問請求進行監(jiān)控,然后對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;可以理解的是,采樣數(shù)據(jù)流是按照訪問請求的時間順序形成的,且形成的采樣數(shù)據(jù)流中的每一個點都與訪問請求的時間及對應(yīng)的索引鍵值相關(guān);此外,考慮到本發(fā)明實施例提供的方案的計算量及時間復(fù)雜度,可以按照預(yù)設(shè)比例或預(yù)設(shè)大小,對目標數(shù)據(jù)分片的訪問請求進行采樣,合理地減少相關(guān)的數(shù)據(jù)量。
需要說明的是,本發(fā)明實施例中所采樣的訪問請求對應(yīng)的索引鍵可以是主鍵,也可以不是主鍵,分布式存儲系統(tǒng)中設(shè)定能基于該鍵進行分片,且能夠獲取到對該鍵的鍵值訪問情況即可,在此不作限定。例如:假設(shè)在分布式存儲系統(tǒng)mongodb中,針對數(shù)據(jù)分片a,設(shè)定除了主鍵key_pri外,在鍵key1上建立索引后,也能夠基于鍵key1進行分片,且針對鍵key1的鍵值訪問情況通過mongodb可以獲取到,那么,針對數(shù)據(jù)分片a,應(yīng)用本發(fā)明實施例提供的分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,即可以基于主鍵key_pri進行分片,也可以基于鍵key1進行分片。
s103,判斷目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值,若是,執(zhí)行s104。
可以理解的是,若目標數(shù)據(jù)分片的qps大于第二預(yù)設(shè)閾值,即qps比較大,需要進行分裂,那么,此時便可以對目標數(shù)據(jù)分片進行強制分裂。
如果目標數(shù)據(jù)分片的qps不大于第二預(yù)設(shè)閾值,但大于第一預(yù)設(shè)閾值的狀態(tài)較長,則也可以判定該數(shù)據(jù)分片需要進行分裂。因此,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,在圖1所示發(fā)明實施例的基礎(chǔ)上,還可以包括:當(dāng)監(jiān)測到目標數(shù)據(jù)分片的qps大于第一預(yù)設(shè)閾值,且不大于第二預(yù)設(shè)閾值的第一狀態(tài)時,記錄第一狀態(tài)對應(yīng)的第一持續(xù)時間;
當(dāng)?shù)谝怀掷m(xù)時間大于第三預(yù)設(shè)閾值時,執(zhí)行s104。
此外,若目標數(shù)據(jù)分片的qps不大于第二預(yù)設(shè)閾值,并且在后面某時刻,其qps又突然下降,小于第一預(yù)設(shè)閾值,但它大于第一預(yù)設(shè)閾值的狀態(tài)維持了較長時間,如5分鐘,那么,則表明,在未來,用戶可能還會有類似的訪問請求導(dǎo)致qps上升,因此,也可以提前進行分裂,即是說,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,還可以包括:
當(dāng)監(jiān)測到目標數(shù)據(jù)分片的qps小于第一預(yù)設(shè)閾值時,判斷已記錄的第一持續(xù)時間是否大于第四預(yù)設(shè)閾值;如果是,則執(zhí)行s104。
s104,確定采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)。
其中,若采樣數(shù)據(jù)流中某預(yù)設(shè)時間段內(nèi)的索引鍵值為奇數(shù)個,那么所有值按照高低排序后,正中間的一個索引鍵值即為中位數(shù),若值有偶數(shù)個,通常取排序后最中間的兩個索引鍵值的平均數(shù)作為中位數(shù)。例如:假設(shè),采樣數(shù)據(jù)流中第二個預(yù)設(shè)時間段內(nèi)包括的索引鍵值為奇數(shù)個,分別為:10、14、17、20、23,那么,第二個預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)便為17;采樣數(shù)據(jù)流中第三個預(yù)設(shè)時間段包括的索引鍵值為偶數(shù)個,分別為:11、13、14、17、20、21、23、25,那么,第三個預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)便為:(17+20)÷2=18.5。
需要說明的是,在第一種實現(xiàn)方式中,可以從采樣開始,每預(yù)設(shè)時間段,確定一次這段時間內(nèi)形成的索引鍵值的中位數(shù),并進行記錄,在需要對目標數(shù)據(jù)分片進行分裂時,從記錄中確定出采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)。
舉例而言,預(yù)設(shè)時間段為10s,預(yù)設(shè)比例為10%,那么,監(jiān)測到數(shù)據(jù)分片data_slice1的qps大于第一預(yù)設(shè)閾值時,便可以從此刻開始,按照訪問請求的時間和10%的比例,對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于索引鍵值的采樣數(shù)據(jù)流data_stream,然后在采樣10s后,確定data_stream中第一個10s內(nèi)的索引鍵值的中位數(shù),采樣20s后,確定data_stream中第二個10s對應(yīng)的中位數(shù),以及在采樣30s后,確定data_stream中第三個10s對應(yīng)的中位數(shù)等,并進行記錄,以便根據(jù)記錄執(zhí)行后續(xù)步驟。
在第二種實現(xiàn)方式中,可以是在需要對目標數(shù)據(jù)分片進行分裂時,進行計算并確定出采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),關(guān)于第一種實現(xiàn)方式與第二種實現(xiàn)方式,都是可行的,具體根據(jù)實際需求進行選擇,在此不作限定。
在本發(fā)明實施例中,某一預(yù)設(shè)時間段內(nèi),可能訪問請求數(shù)非常少,對應(yīng)地,采樣得到的數(shù)據(jù)流中關(guān)于該預(yù)設(shè)時間段內(nèi)的點也比較少或者沒有,為了避免誤差太大,此時,可以采用現(xiàn)有技術(shù)中的滑動窗口算法,結(jié)合該預(yù)設(shè)時間段的前一預(yù)設(shè)時間段內(nèi)的部分點,來確定該預(yù)設(shè)時間段對應(yīng)的中位數(shù)。
具體地,可以在確定采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù)時,針對數(shù)據(jù)流點數(shù)少于預(yù)設(shè)采樣點數(shù)的預(yù)設(shè)時間段,根據(jù)滑動窗口算法的原理,基于預(yù)設(shè)窗口大小,向前滑動,其中,窗口大小可以為預(yù)設(shè)采樣點數(shù),窗口滑動大小由預(yù)設(shè)時間段決定。
舉例而言,預(yù)設(shè)時間段為10s,即每10秒取一次平均值,預(yù)設(shè)采樣點數(shù)為5,即窗口大小為5,假設(shè),目標數(shù)據(jù)分片在采樣的20秒內(nèi)形成的數(shù)據(jù)流中的點(采樣時間,索引鍵值)如下所示:
[(1,2),(2,5),(5,66),(7,23),(9,77),(11,32),(14,55),(18,4),(19,67)]
可以看出,第一個10s,對應(yīng)的窗口為:[(1,2),(2,5),(5,66),(7,23),(9,77)],點數(shù)大于5,因此可以直接求得這10s內(nèi)的索引鍵值的中位數(shù)為23;而第二個10s,對應(yīng)的數(shù)據(jù)流的點為[(11,32),(14,55),(18,4),(19,67)],小于5,那么,便可以從點(19,67)開始,向前滑動10s,即第二個窗口為[(9,77),(11,32),(14,55),(18,4),(19,67)],得出第二個10s內(nèi)的索引鍵值的中位數(shù)為55。
當(dāng)然,也可以用其他合理的方法來確定所形成的數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),此處不作限定。
s105,根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點。
可以理解的是,每一預(yù)設(shè)時間段的中位數(shù)都反映了訪問請求的分布情況,因此,可以根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),即下一預(yù)設(shè)時間段內(nèi)的訪問請求分布情況,并將預(yù)測獲得的中位數(shù)確定為分裂點。
此外,本發(fā)明實施例中,分布式存儲系統(tǒng)中,qps大于第一預(yù)設(shè)閾值的目標數(shù)據(jù)分片可能有多個,而對于目標數(shù)據(jù)分片來說,由于qps比較高,因此在訪問請求采樣過程中,即使按照比例進行采樣,得到的數(shù)據(jù)流中點數(shù)也可能會很多,鑒于此,可以采用現(xiàn)有技術(shù)中的二次指數(shù)平滑法來預(yù)測當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),可以理解的是,該算法適合海量數(shù)據(jù)流式處理的方法,即使數(shù)據(jù)量很大,也能保證在需要分裂時,預(yù)測獲得需要的中位數(shù)。
需要說明的是,二次指數(shù)平滑法是對一次指數(shù)平滑值再做一次指數(shù)平滑的方法。它不能單獨地進行預(yù)測,必須與一次指數(shù)平滑法配合,建立預(yù)測的數(shù)學(xué)模型,然后運用數(shù)學(xué)模型來確定預(yù)測值,二次指數(shù)平滑法實質(zhì)上是將歷史數(shù)據(jù)進行加權(quán)平均作為未來時刻的預(yù)測結(jié)果。其中,一次指數(shù)平滑法也屬于現(xiàn)有技術(shù),此處不再贅述。
二次指數(shù)平滑法預(yù)測模型為:
yt+t=at+bt×t
其中,yt+t為第t+t期的預(yù)測值,t為t期到預(yù)測期的間隔期數(shù),
而
可以理解的是,應(yīng)用二次指數(shù)平滑法對t+1期做出預(yù)測,我們只要在at的基礎(chǔ)上加一個變動趨勢值bt即可;要預(yù)測t+t期,只要在at基礎(chǔ)上加t個bt。
舉例而言,在本發(fā)明實施例中,假設(shè)預(yù)設(shè)時間段為10s,a的初始值為0.9,
那么,第9期,即第9個10s對應(yīng)的中位數(shù)為:
y7+2=a7+b7×2
而
s106,根據(jù)分裂點,對目標數(shù)據(jù)分片進行分裂。
其中,在確定分裂點后,可以根據(jù)分裂點,將目標數(shù)據(jù)分片中大于等于分裂點的數(shù)據(jù)分裂為一個數(shù)據(jù)分片,小于分裂點的數(shù)據(jù)分裂為另一個數(shù)據(jù)分片。
需要說明的是,在一些分布式存儲系統(tǒng)中,如hbase,對目標數(shù)據(jù)分片進行分裂包括兩步,即首先進行邏輯分裂,然后再將邏輯分裂后得到的子邏輯數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到分布式存儲系統(tǒng)的結(jié)點上,關(guān)于具體分配到哪個結(jié)點由分布式存儲系統(tǒng)中的調(diào)度系統(tǒng)決定,此為現(xiàn)有技術(shù),不再贅述。
而在應(yīng)用本發(fā)明實施例提供的技術(shù)方案對目標數(shù)據(jù)分片進行分裂的過程中,目標數(shù)據(jù)分片第一次分裂后得到的子數(shù)據(jù)分片可能仍需重復(fù)上述步驟,再進行多次分裂,為避免大量無意義的磁盤輸入輸出,針對上述類型的分布式存儲系統(tǒng),可以先對目標數(shù)據(jù)分片進行邏輯分裂,直到得到的邏輯子數(shù)據(jù)分片均不需再分裂后,才將分裂得到的每一邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到分布式存儲系統(tǒng)的結(jié)點上。
具體地,所述根據(jù)分裂點,對目標數(shù)據(jù)分片進行分裂的步驟,可以包括:
根據(jù)分裂點,對目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片;
針對每一邏輯子數(shù)據(jù)分片,判斷該邏輯子數(shù)據(jù)分片的qps是否大于第一預(yù)設(shè)閾值;
若該邏輯子數(shù)據(jù)分片的qps大于第一預(yù)設(shè)閾值,以該邏輯子數(shù)據(jù)分片來更新目標數(shù)據(jù)分片,返回執(zhí)行所述對目標數(shù)據(jù)分片的訪問請求進行采樣的步驟;
根據(jù)預(yù)設(shè)規(guī)則,將最終所得到的邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到分布式存儲系統(tǒng)中的存儲結(jié)點。
其中,預(yù)設(shè)規(guī)則與分布式存儲系統(tǒng)中的調(diào)度系統(tǒng)相關(guān)。
更具體地,所述根據(jù)分裂點,對目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片的步驟,可以包括:根據(jù)分裂點,將目標數(shù)據(jù)分片的元數(shù)據(jù)信息分裂為子元數(shù)據(jù)信息;將子元數(shù)據(jù)信息對應(yīng)的數(shù)據(jù)分片確定為邏輯子數(shù)據(jù)分片。即,修改目標數(shù)據(jù)分片的元數(shù)據(jù)信息,以分裂點為界限,分別將大于等于分裂點的數(shù)據(jù)的索引與小于分裂點的數(shù)據(jù)的索引生成兩個分區(qū),但生成的每一索引分區(qū)對應(yīng)數(shù)據(jù)的引用仍指向目標數(shù)據(jù)分片的數(shù)據(jù)文件,也就是說,從系統(tǒng)外部看,目標數(shù)據(jù)分片仍是一個整體。關(guān)于具體如何修改目標數(shù)據(jù)分片的元數(shù)據(jù)信息,屬于現(xiàn)有技術(shù),此處不再贅述。
此外,目標數(shù)據(jù)分片在每一次分裂過程中,可能會產(chǎn)生大量qps比較低的數(shù)據(jù)分片,這種數(shù)據(jù)分片一般不會發(fā)展成高qps的數(shù)據(jù)分片,因此,為它們重新分配存儲結(jié)點,對分布式存儲系統(tǒng)的內(nèi)存或調(diào)度資源來說,是一種浪費,為避免過多這種無效數(shù)據(jù)分片的產(chǎn)生,可以將它們合并到鄰近的低qps的數(shù)據(jù)分片上。
具體地,在所述將邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到分布式存儲系統(tǒng)中的存儲結(jié)點的步驟之前,本發(fā)明實施例中,還可以包括:
在該邏輯子數(shù)據(jù)分片的qps不大于第一預(yù)設(shè)閾值的情況下,判斷該邏輯子數(shù)據(jù)分片的qps是否小于第五預(yù)設(shè)閾值;
若該邏輯子數(shù)據(jù)分片的qps小于第五預(yù)設(shè)閾值,確定目標數(shù)據(jù)分片的目標相鄰數(shù)據(jù)分片;
判斷目標相鄰數(shù)據(jù)分片的qps是否小于第六預(yù)設(shè)閾值;
若目標相鄰數(shù)據(jù)分片的qps小于第六預(yù)設(shè)閾值,將該邏輯子數(shù)據(jù)分片合并到目標相鄰數(shù)據(jù)分片上。
其中,目標相鄰數(shù)據(jù)分片的qps在目標數(shù)據(jù)分片的相鄰數(shù)據(jù)分片的qps中最小;相鄰數(shù)據(jù)分片與目標數(shù)據(jù)分片在索引上連續(xù)。合并到目標相鄰數(shù)據(jù)分片上,可以防止合并后產(chǎn)生高qps的數(shù)據(jù)分片,而由于目標相鄰數(shù)據(jù)分片與目標數(shù)據(jù)分片在索引上連續(xù),可以在合并過程中,減少修改對應(yīng)的數(shù)據(jù)索引的計算量。
圖1所示發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,首先,監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;判斷目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;若是,確定采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;根據(jù)分裂點,對目標數(shù)據(jù)分片進行分裂。
可以看出,本發(fā)明實施例提供的分布式存儲系統(tǒng)的數(shù)據(jù)分裂方法,與現(xiàn)有技術(shù)相比,由于本發(fā)明實施例對于qps過大的數(shù)據(jù)分片的訪問請求進行采樣獲得采樣數(shù)據(jù)流,根據(jù)采樣數(shù)據(jù)流確定分裂點進行分裂,實際是針對訪問熱點對應(yīng)的數(shù)據(jù)分片進行分裂,因此能夠消除請求訪問熱點,從而達到負載均衡。
與上述方法流程相對應(yīng)地,本發(fā)明實施例提供了一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,如圖2所示,所述裝置包括:
監(jiān)測模塊201,用于監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;
第一確定模塊202,用于將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片;
采樣模塊203,用于對所述目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;
第一判斷模塊204,用于判斷所述目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;
第二確定模塊205,用于在所述第一判斷模塊204的判斷結(jié)果為是的情況下,確定所述采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);;
第三確定模塊206,用于根據(jù)所述第二確定模塊205所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一所述預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;
第一分裂模塊207,用于根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行分裂。
圖2所示發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,首先,監(jiān)測各個數(shù)據(jù)分片的每秒查詢率qps是否大于第一預(yù)設(shè)閾值;將qps大于第一預(yù)設(shè)閾值的數(shù)據(jù)分片確定為目標數(shù)據(jù)分片,對目標數(shù)據(jù)分片的訪問請求進行采樣,形成關(guān)于所采樣的訪問請求對應(yīng)的索引鍵值的采樣數(shù)據(jù)流;判斷目標數(shù)據(jù)分片的qps是否大于第二預(yù)設(shè)閾值;若是,確定采樣數(shù)據(jù)流中每預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù);根據(jù)所確定的中位數(shù),預(yù)測獲得當(dāng)前時刻對應(yīng)的下一預(yù)設(shè)時間段內(nèi)的索引鍵值的中位數(shù),并將所預(yù)測獲得的中位數(shù)確定為分裂點;根據(jù)分裂點,對目標數(shù)據(jù)分片進行分裂。
可以看出,本發(fā)明實施例提供的分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,與現(xiàn)有技術(shù)相比,由于本發(fā)明實施例對于qps過大的數(shù)據(jù)分片的訪問請求進行采樣獲得采樣數(shù)據(jù)流,根據(jù)采樣數(shù)據(jù)流確定分裂點進行分裂,實際是針對訪問熱點對應(yīng)的數(shù)據(jù)分片進行分裂,因此能夠消除請求訪問熱點,從而達到負載均衡。
具體地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,還可以包括:
記錄模塊,用于當(dāng)所述監(jiān)測模塊201監(jiān)測到所述目標數(shù)據(jù)分片的qps大于所述第一預(yù)設(shè)閾值,且不大于所述第二預(yù)設(shè)閾值的第一狀態(tài)時,記錄所述第一狀態(tài)對應(yīng)的第一持續(xù)時間;當(dāng)所述第一持續(xù)時間大于第三預(yù)設(shè)閾值時,觸發(fā)所述第二確定模塊205。
具體地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,還可以包括:
第二判斷模塊,用于當(dāng)所述監(jiān)測模塊201監(jiān)測到所述目標數(shù)據(jù)分片的qps小于所述第一預(yù)設(shè)閾值時,判斷已記錄的所述第一持續(xù)時間是否大于第四預(yù)設(shè)閾值;如果是,觸發(fā)所述第二確定模塊205。
具體地,所述第一分裂模塊206,可以包括:
分裂子模塊,用于根據(jù)所述分裂點,對所述目標數(shù)據(jù)分片進行邏輯分裂,得到邏輯子數(shù)據(jù)分片;
判斷子模塊,用于針對每一所述邏輯子數(shù)據(jù)分片,判斷該邏輯子數(shù)據(jù)分片的qps是否大于所述第一預(yù)設(shè)閾值;
更新子模塊,用于在所述判斷子模塊的判斷結(jié)果為是的情況下,以該邏輯子數(shù)據(jù)分片來更新所述目標數(shù)據(jù)分片,觸發(fā)所述采樣模塊203;
分配子模塊,用于根據(jù)預(yù)設(shè)規(guī)則,將最終所得到的邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點。
更具體地,所述分裂子模塊,具體可以用于:
根據(jù)所述分裂點,將所述目標數(shù)據(jù)分片的元數(shù)據(jù)信息分裂為子元數(shù)據(jù)信息;
將所述子元數(shù)據(jù)信息對應(yīng)的數(shù)據(jù)分片確定為邏輯子數(shù)據(jù)分片。
具體地,本發(fā)明實施例提供的一種分布式存儲系統(tǒng)的數(shù)據(jù)分裂裝置,還可以包括:
第三判斷模塊,用于在所述分配子模塊將所述邏輯子數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)分配到所述分布式存儲系統(tǒng)中的存儲結(jié)點之前,在該邏輯子數(shù)據(jù)分片的qps不大于所述第一預(yù)設(shè)閾值的情況下,判斷該邏輯子數(shù)據(jù)分片的qps是否小于第五預(yù)設(shè)閾值;
第四確定模塊,用于在所述第三判斷模塊的判斷結(jié)果為是的情況下,確定所述目標數(shù)據(jù)分片的目標相鄰數(shù)據(jù)分片;其中,所述目標相鄰數(shù)據(jù)分片的qps在所述目標數(shù)據(jù)分片的相鄰數(shù)據(jù)分片的qps中最??;所述相鄰數(shù)據(jù)分片與所述目標數(shù)據(jù)分片在索引上連續(xù);
第四判斷模塊,用于判斷所述目標相鄰數(shù)據(jù)分片的qps是否小于第六預(yù)設(shè)閾值;
合并模塊,用于在所述第四判斷模塊的判斷結(jié)果為是的情況下,將該邏輯子數(shù)據(jù)分片合并到所述目標相鄰數(shù)據(jù)分片上。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關(guān)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。