本申請涉及計算機領(lǐng)域,尤其涉及一種分布式存儲系統(tǒng)的負載監(jiān)控方法及設(shè)備。
背景技術(shù):
分布式存儲系統(tǒng)是一種使用集群提供存儲服務(wù)的分布式系統(tǒng),用戶使用鍵碼(Key)作為索引對相應(yīng)的鍵值(Value)進行讀寫等操作。對于一個鍵碼(Key),用戶可以對其進行寫入鍵值(Value)、讀取對應(yīng)的鍵值(Value)或者刪除對應(yīng)的鍵值(Value)等不同類型的操作,每個操作稱為一個請求。分布式存儲系統(tǒng)中的線程池是一種擁有一定數(shù)目線程的服務(wù)單元,請求先加入線程池的隊列中進行等待,線程池中的線程會在空閑的時候依次從隊列中取出請求進行處理。分區(qū)(Partition)是分布式存儲系統(tǒng)調(diào)度的基本單元,鍵碼(Key)通過分區(qū)(Partition)的開始鍵碼(BeginKey)和結(jié)束鍵碼(EndKey)來唯一的確定隸屬的分區(qū)(Partition),不同的分區(qū)(Partition)之間不存在重疊。分布式存儲系統(tǒng)中的服務(wù)器(Server)是提供服務(wù)的基本單元,每個服務(wù)器(Server)上擁有若干個分區(qū)(Partition),不同鍵碼(Key)的請求根據(jù)所屬的分區(qū)(Partition)的不同從而被不同的服務(wù)器(Server)所處理,服務(wù)器(Server)內(nèi)部使用線程池作為實際處理單元來處理不同的請求。
用戶的鍵碼(Key)是分成分區(qū)(Partition)然后按照順序存儲在分布式文件系統(tǒng)中,由于單個分區(qū)只能隸屬于一臺服務(wù)器(Server),因此,單個分區(qū)范圍內(nèi)的用戶請求增多的時候,會導(dǎo)致服務(wù)器的負載增大,用戶的延時(Latency)增高等,而且還會對這臺服務(wù)器上的其他分區(qū)造成影響。因此,為了保證充分利用集群內(nèi)部的所有服務(wù)器的服務(wù)能力,需要一種負載監(jiān)控的 方案來分散熱點,提高服務(wù)質(zhì)量。目前解決請求熱點的手段是分區(qū)的分裂和遷移。其中,分裂是將分區(qū)(Partition)按照不同的鍵碼范圍(Keys)分成多個分區(qū)(Partition),分裂之后的分區(qū)(Partition)會隨機分散到其他的服務(wù)器(Server)上;遷移是將分區(qū)(Partition)從一臺服務(wù)器(Server)移動到另外一臺服務(wù)器(Server)上。
已有的解決請求熱點的手段大致有如下三種:
1.當單個分區(qū)(Partition)的大小超過一定的限制之后,將Partition分成平均分裂成若干個分區(qū)(Partition)。但是,按照單個分區(qū)(Partition)的大小切分的方案中并不能準確的反映分區(qū)(Partition)的處理能力,用戶的請求模式不一致,導(dǎo)致分區(qū)(Partition)大小對其的影響也不一樣,有時候在很小的分區(qū)(Partition)大小的情況下也會因為用戶請求集中在很小范圍內(nèi)的原因?qū)е聼狳c的出現(xiàn)。
2.當單個分區(qū)(Partition)的請求的每秒查詢率(QPS)大于某個閾值之后,將分區(qū)(Partition)按照用戶請求的范圍進行分裂劃分。但是,按照請求的的每秒查詢率(QPS)作為閾值來劃分需要測定不同服務(wù)器(Server)的處理能力,因此在不同的服務(wù)器(Server)上需要配置不同的值,而且在服務(wù)器(Server)上還運行有其他的程序情況下有時候并不能達到理論的處理能力。
3.獲取請求執(zhí)行的一些參數(shù),比如IO操作時間,Cache命中次數(shù)等,然后配置一定的規(guī)則,當滿足預(yù)設(shè)的條件的時候執(zhí)行分裂。根據(jù)參數(shù)配置一定的規(guī)則來進行分裂的方案雖然具有很強的靈活性,但是,也正是因為這個原因,在不同的場景下配置的規(guī)則也不盡相同,而且需要根據(jù)用戶的請求模式更新規(guī)則,不夠自動化。
技術(shù)實現(xiàn)要素:
本申請的一個目的是提供一種用于分布式存儲系統(tǒng)的負載監(jiān)控方法及設(shè) 備,能夠解決分布式存儲系統(tǒng)的出現(xiàn)熱點的問題。
根據(jù)本申請的一個方面,提供了一種分布式存儲系統(tǒng)的負載監(jiān)控方法,該方法包括:
確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池;
對每個負載壓力超標的線程池進行報警或負載均衡。
進一步的,上述方法中,確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,包括:
獲取每臺服務(wù)器上的每個線程池的隊列中一個請求的等待時間與逗留時間的比值,所述逗留時間為每個線程池的隊列中一個請求的等待時間與實際處理時間之和;
當所述等待時間與逗留時間的比值超過預(yù)設(shè)超標閾值時,確定該請求所在的服務(wù)器上的線程池的負載壓力超標。
進一步的,上述方法中,所述預(yù)設(shè)超標閾值根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定,其中,所述線程池的請求到達率為請求到達線程池的隊列的速率與該線程池的單位時間的服務(wù)能力的比值,當線程池的請求到達率超過線程池的請求到達率的預(yù)設(shè)閾值時,對應(yīng)的等待時間與逗留時間的比值開始急劇上升,所述預(yù)設(shè)超標閾值超過所述開始急劇上升時等待時間與逗留時間的比值。
進一步的,上述方法中,對每個負載壓力超標的線程池進行負載均衡,包括:
將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列;
判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,
若是,對該請求個數(shù)最多的分區(qū)進行分裂操作。
進一步的,上述方法中,對該請求個數(shù)最多的分區(qū)進行分裂操作,包括:
將該分區(qū)分成若干個子分區(qū),將子分區(qū)分散到其它服務(wù)器上,其中,每個子分區(qū)對應(yīng)該分區(qū)的鍵碼范圍內(nèi)的一個子鍵碼范圍,每個子分區(qū)隸屬的請求個數(shù)基本相等。
進一步的,上述方法中,判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半之后,還包括:
若否,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半;
對選擇的分區(qū)進行遷移操作。
進一步的,上述方法中,將選擇的分區(qū)進行遷移操作,包括:
將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上。
進一步的,上述方法中,將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上,包括:
查找符合條件的沒有負載壓力超標的線程池的服務(wù)器,若查找到,將該選擇的分區(qū)遷移到該查找到的服務(wù)器上。
進一步的,上述方法中,所述符合條件的沒有負載壓力超標的線程池的服務(wù)器包括:
若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器。
進一步的,上述方法中,每個線程池的線程平均使用率通過如下公式(λ1+λ)*B/n獲取,其中,
λ1表示在遷移前服務(wù)器上的某個線程池中的請求到達線程池的隊列的速率;
λ表示待遷移到的目標服務(wù)器在遷移前其上的某個對應(yīng)線程池中的請求到達線程池的隊列的速率;
B表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的每個線程對一個請求的實際處理時間;
n表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的線程個數(shù)。
根據(jù)本申請的另一個方面,還提供一種分布式存儲系統(tǒng)的負載均衡設(shè)備,該設(shè)備包括:
負載監(jiān)控裝置,用于確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池;
報警或負載均衡裝置,用于對每個負載壓力超標的線程池進行報警或負載均衡。
進一步的,上述設(shè)備中,所述負載監(jiān)控裝置,用于獲取每臺服務(wù)器上的每個線程池的隊列中一個請求的等待時間與逗留時間的比值,所述逗留時間為每個線程池的隊列中一個請求的等待時間與實際處理時間之和;當所述等待時間與逗留時間的比值超過預(yù)設(shè)超標閾值時,確定該請求所在的服務(wù)器上的線程池的負載壓力超標。
進一步的,上述設(shè)備中,所述預(yù)設(shè)超標閾值根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定,其中,所述線程池的請求到達率為請求到達線程池的隊列的速率與該線程池的單位時間的服務(wù)能力的比值,當線程池的請求到達率超過線程池的請求到達率的預(yù)設(shè)閾值時,對應(yīng)的等待時間與逗留時間的比值開始急劇上升,所述預(yù)設(shè)超標閾值超過所述開始急劇上升時等待時間與逗留時間的比值。
進一步的,上述設(shè)備中,所述報警或負載均衡裝置,用于將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列;判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若 是,對該請求個數(shù)最多的分區(qū)進行分裂操作。
進一步的,上述設(shè)備中,所述報警或負載均衡裝置,用于將該分區(qū)分成若干個子分區(qū),將子分區(qū)分散到其它服務(wù)器上,其中,每個子分區(qū)對應(yīng)該分區(qū)的鍵碼范圍內(nèi)的一個子鍵碼范圍,每個子分區(qū)隸屬的請求個數(shù)基本相等。
進一步的,上述設(shè)備中,所述報警或負載均衡裝置,用于判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若否,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半;對選擇的分區(qū)進行遷移操作。
進一步的,上述設(shè)備中,所述報警或負載均衡裝置,用于將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上。
進一步的,上述設(shè)備中,所述報警或負載均衡裝置,用于查找符合條件的沒有負載壓力超標的線程池的服務(wù)器,若查找到,將該選擇的分區(qū)遷移到該查找到的服務(wù)器上。
進一步的,上述設(shè)備中,所述符合條件的沒有負載壓力超標的線程池的服務(wù)器包括:
若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器。
進一步的,上述設(shè)備中,每個線程池的線程平均使用率通過如下公式(λ1+λ)*B/n獲取,其中,
λ1表示在遷移前服務(wù)器上的某個線程池中的請求到達線程池的隊列的速率;
λ表示待遷移到的目標服務(wù)器在遷移前其上的某個對應(yīng)線程池中的請求到達線程池的隊列的速率;
B表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的每個線程對一個請求的實際處理時間;
n表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的線程個數(shù)。
與現(xiàn)有技術(shù)相比,本申請通過確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,對每個負載壓力超標的線程池進行報警或負載均衡,能夠根據(jù)服務(wù)器的線程池狀態(tài)即單臺服務(wù)器的負載超出服務(wù)能力,來進行報警或自動地在服務(wù)器之間均衡分配負載,不依賴于用戶請求模式,能正確的處理不同用戶同時達到的請求,也不依賴于服務(wù)器的服務(wù)能力,在分布式存儲系統(tǒng)的集群內(nèi)部服務(wù)器的服務(wù)能力不一致的情況下也能正確執(zhí)行的報警或負載均衡,從而防止出現(xiàn)熱點,提高分布式存儲系統(tǒng)服務(wù)質(zhì)量。
進一步的,本申請通過等待時間Wq與逗留時間W的比值和預(yù)設(shè)超標閾值th的比較,能夠精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
進一步的,本申請根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定精確的預(yù)設(shè)超標閾值,從而能夠更精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
進一步的,本申請將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列,當請求個數(shù)最多的分區(qū)的請求數(shù)量超過該線程池的所有分區(qū)的請求的總數(shù)的一半時,對該請求個數(shù)最多的分區(qū)進行分裂操作,可以精確找到需要進行分裂操作的分區(qū),從而有效地實現(xiàn)負載均衡。
進一步的,本申請中當請求個數(shù)最多的分區(qū)的請求數(shù)量未超過該線程池的所有分區(qū)的請求的總數(shù)的一半時,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半,對選擇的分區(qū)進行遷移操作,能夠精確地找到一個線程池中需要遷移的分區(qū),從而更好地實現(xiàn)負載均衡。
進一步的,本申請在查找符合條件的沒有負載壓力超標的線程池的服務(wù)器的前提下,才將選擇的分區(qū)遷移到該查找到的服務(wù)器上,從而更好地實現(xiàn)負載均衡。
進一步的,本申請中若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器,能夠精確地找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,從而更好地實現(xiàn)負載均衡。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1示出根據(jù)本申請一個方面的一種分布式存儲系統(tǒng)的負載監(jiān)控方法的流程圖;
圖2示出本申請分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例的流程圖;
圖3示出根據(jù)本申請一個實施例的預(yù)設(shè)超標閾值確定原理圖;
圖4示出根據(jù)本申請分布式存儲系統(tǒng)的負載監(jiān)控方法另一優(yōu)選的實施例的流程圖;
圖5示出根據(jù)本申請分布式存儲系統(tǒng)的負載監(jiān)控方法再一優(yōu)選的實施例的流程圖;
圖6示出根據(jù)本申請分布式存儲系統(tǒng)的負載監(jiān)控方法一具體應(yīng)用實施例的流程圖;
圖7示出根據(jù)本申請另一個方面的分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備的結(jié)構(gòu)圖。
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實施方式
下面結(jié)合附圖對本發(fā)明作進一步詳細描述。
在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
如圖1所示,本申請?zhí)峁┮环N分布式存儲系統(tǒng)的負載監(jiān)控方法,該方法包括:
步驟S1,確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池;
步驟S2,對每個負載壓力超標的線程池進行報警或負載均衡。本實施例中根據(jù)服務(wù)器(Server)的線程池狀態(tài)即單臺服務(wù)器(Server)的負載超出服務(wù)能力,來進行報警或自動地在服務(wù)器之間均衡分配負載,不依賴于用 戶請求模式,能正確的處理不同用戶同時達到的請求,也不依賴于服務(wù)器的服務(wù)能力,在分布式存儲系統(tǒng)的集群內(nèi)部服務(wù)器的服務(wù)能力不一致的情況下也能正確執(zhí)行的報警或負載均衡,從而防止出現(xiàn)熱點,提高分布式存儲系統(tǒng)服務(wù)質(zhì)量。具體的,可根據(jù)服務(wù)器(Server)的線程池基本信息,確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,或?qū)γ總€負載壓力超標的線程池進行報警或負載均衡。單個服務(wù)器(Server)上一般擁有若干個線程池,典型的線程池可以用一個單隊列模型來描述,線程池基本信息可體現(xiàn)為隊列參數(shù),具體的隊列參數(shù)可包括如下內(nèi)容:
a)Wq:表示某個線程池的隊列中一個請求的等待時間。
b)B:表示某個線程池的隊列中一個請求的實際處理時間。
c)W:表示某個線程池的隊列中一個請求的逗留時間,即等待時間Wq加上實際處理時間B。
d)λ:表示某個線程池中的請求到達該線程池的隊列的速率。
e)μ:表示某個線程池的單位時間的服務(wù)能力。
如圖2所示,本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,步驟S1,確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,包括:
步驟S11,獲取每臺服務(wù)器上的每個線程池的隊列中一個請求的等待時間Wq與逗留時間W的比值,所述逗留時間W為每個線程池的隊列中一個請求的等待時間Wq與實際處理時間B之和;
步驟S12,當所述等待時間Wq與逗留時間W的比值超過預(yù)設(shè)超標閾值th時,確定該請求所在的服務(wù)器上的線程池的負載壓力超標。對每臺服務(wù)上的每個線程池參數(shù)進行分析,找出負載壓力超標的線程池,關(guān)于如何判斷超標負載的線程池,可以使用如下公式判斷:
Wq/W>th
該公式的含義是當所述等待時間Wq與逗留時間W的比值超過預(yù)設(shè)超標閾值th時,確定該請求所在的服務(wù)器上的線程池的負載壓力超標。本實施例通過等待時間Wq與逗留時間W的比值和預(yù)設(shè)超標閾值th的比較,能夠精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,步驟S12中所述預(yù)設(shè)超標閾值根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定,其中,所述線程池的請求到達率為請求到達線程池的隊列的速率λ與該線程池的單位時間的服務(wù)能力μ的比值,當線程池的請求到達率λ/μ超過線程池的請求到達率的預(yù)設(shè)閾值時,對應(yīng)的等待時間與逗留時間的比值Wq/W開始急劇上升,所述預(yù)設(shè)超標閾值超過所述開始急劇上升時等待時間與逗留時間的比值Wq/W。具體的,線程池的請求到達率的預(yù)設(shè)閾值可以通過圖3來判斷,圖3中,每一條線表一個線程池,n分別表示對應(yīng)的線程池中的線程個數(shù),其中,第一個線程池中的線程有1個,第二個線程池中的線程有2個,第三個線程池中的線程有5個,第四個線程池中的線程有10個,第五個線程池中的線程有24個,圖3中橫坐標表示請求到達率λ/μ,縱坐標表示等待時間Wq與逗留時間W的比值Wq/W。從圖3中,可以看出Wq/W在請求到達率λ/μ超過一定的數(shù)值(線程池的請求到達率的預(yù)設(shè)閾值)之后就開始急劇上升,Wq/W的這一開始急劇上升的點的值即為拐點,因此Wq/W的預(yù)設(shè)超標閾值只要超過拐點即可,例如,實際中可將拐點的值設(shè)定為0.5,則所述預(yù)設(shè)超標閾值只要大于0.5即可。本實施例根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定精確的預(yù)設(shè)超標閾值,從而能夠更精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
如圖4所示,本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,步驟S2中的對每個負載壓力超標的線程池進行負載均衡,包括:
步驟S21,將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計, 統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列;
步驟S22,判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若是,轉(zhuǎn)到步驟S23,
步驟S23,對該請求個數(shù)最多的分區(qū)進行分裂操作。具體的,例如,某個負載壓力超標的線程池中有三個分區(qū)分別為分區(qū)A、分區(qū)B和分區(qū)C,其中,隸屬于分區(qū)A的請求數(shù)為100,隸屬于分區(qū)B的請求數(shù)為20,隸屬于分區(qū)C的請求數(shù)為10,則求個數(shù)最多的分區(qū)A的請求數(shù)量100超過了該線程池的所有分區(qū)的請求的總數(shù)的一半65=(100+20+10)/2。本實施例中,對于每個負載壓力超標的線程池提取請求信息進行分析,因為線程池和分區(qū)(Partition)并不是一一對應(yīng)的,分區(qū)(Partition)只是一個邏輯單元,隸屬于該分區(qū)(Partition)的請求可能會使用多個線程池進行處理。將經(jīng)過該線程池的請求按照分區(qū)(Partition)進行統(tǒng)計,統(tǒng)計出隸屬于不同分區(qū)(Partition)的請求個數(shù),然后按照請求個數(shù)降序排列。如果一個線程池中請求數(shù)目最多的某個分區(qū)(Partition)請求數(shù)目超過了該線程池的所有分區(qū)的請求的總數(shù)的一半,那么選擇將該分區(qū)(Partition)并跳轉(zhuǎn)到步驟S23,步驟S23中,因為隸屬于該選擇的分區(qū)(Partition)的請求數(shù)目占了該線程池的所有分區(qū)的請求的總數(shù)的一半或一半以上,因此,需要對該選擇的分區(qū)(Partition)進行分裂,分裂之后處理結(jié)束。本實施例中通過找到超過該線程池的所有分區(qū)的請求的總數(shù)的一半的請求個數(shù)最多的分區(qū),該分區(qū)可以認為是該線程池中的對負載壓力超標有顯著影響的分區(qū),因此,需要將其選擇出來,對其進行分裂,從而有效地實現(xiàn)負載均衡。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,步驟S23,對該請求個數(shù)最多的分區(qū)進行分裂操作,包括:
將該分區(qū)分成若干個子分區(qū),將子分區(qū)分散到其它服務(wù)器上,其中,每個子分區(qū)對應(yīng)該分區(qū)的鍵碼范圍內(nèi)的一個子鍵碼范圍,每個子分區(qū)隸屬的請 求個數(shù)基本相等。具體的,分裂點是從該分區(qū)(Partition)落在該線程池上的請求排序之后按照分區(qū)范圍內(nèi)的請求數(shù)平均選取,例如,某個分區(qū)范圍的鍵碼范圍是0.1~0.4,其中,0.1~0.2范圍的請求個數(shù)有200個,0.2~0.3范圍的請求個數(shù)有200個,0.3~0.4范圍的請求個數(shù)有200個,則可以將該分區(qū)分成三個子分區(qū),對應(yīng)的子鍵碼范圍分別為0.1~0.2、0.2~0.3和0.3~0.4,從而更好地實現(xiàn)負載均衡。
如圖5所示,本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,步驟S22,判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半之后,還包括:
若否,則轉(zhuǎn)到步驟S24,
步驟S24,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半;
步驟S25,對選擇的分區(qū)進行遷移操作。在此,若請求個數(shù)最多的分區(qū)未超過該線程池的所有分區(qū)的請求的總數(shù)的一半,則將從該線程池中降序排列的第一個分區(qū)(Partition)開始依次往后選擇分區(qū)(Partition)直到剩下的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半,并跳轉(zhuǎn)到步驟S25,步驟S25中,因為,請求個數(shù)最多的分區(qū)未超過該線程池的所有分區(qū)的請求的總數(shù)的一半,所以該線程池的請求中沒有具有顯著影響的分區(qū)(Partition),因此將從第一分區(qū)開始依次選擇出來的分區(qū)(Partition)進行逐個遷移。例如,某個負載壓力超標的線程池中有五個分區(qū)分別為分區(qū)D、分區(qū)E、分區(qū)F、分區(qū)G和分區(qū)H,其中,隸屬于分區(qū)D的請求數(shù)為100,隸屬于分區(qū)E的請求數(shù)為100,隸屬于分區(qū)F的請求數(shù)為100,隸屬于分區(qū)G的請求數(shù)為100,隸屬于分區(qū)H的請求數(shù)為100,則需要選擇前三個分區(qū)D、E和F進行逐個遷移,從而剩下的分區(qū)G和H所隸屬的請求的總數(shù)200=100+100小于該線程池的所有分區(qū)的請求的總數(shù)的一半250= (100+100+100+100+100)/2。本實施例能夠精確地找到一個線程池中需要遷移的分區(qū),從而更好地實現(xiàn)負載均衡。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,將選擇的分區(qū)進行遷移操作,包括:
將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上,從而實現(xiàn)負載均衡。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上,包括:
查找符合條件的沒有負載壓力超標的線程池的服務(wù)器,若查找到,將該選擇的分區(qū)遷移到該查找到的服務(wù)器上。本實施例在查找符合條件的沒有負載壓力超標的線程池的服務(wù)器的前提下,才將選擇的分區(qū)遷移到該查找到的服務(wù)器上,從而更好地實現(xiàn)負載均衡。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,所述符合條件的沒有負載壓力超標的線程池的服務(wù)器包括:
若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器。具體的,從待遷移集合即所有選擇的分區(qū)中取一個分區(qū)(Partition),獲取其在目前服務(wù)器上所有線程池上的請求數(shù)目,例如,服務(wù)器M上某個選擇的分區(qū)使用兩個線程池處理隸屬于其的請求,分別為讀請求線程池Q1和寫請求線程池Q2,在沒有超負載線程池的服務(wù)器集合中隨機選擇一個,例如選擇了服務(wù)器N,然后計算該選擇的分區(qū)(Partition)的讀請求線程池Q1和寫請求線程池Q2分別遷移到服務(wù)器N上對應(yīng)的讀請求線程池Q1+和寫請求線程池Q2+之后,即將讀請求線程池Q1遷移到讀請求線程池Q1+,及將寫請求線程池Q2遷移到寫請求線程池Q2+之后,服務(wù)器N上讀請求線程池Q1+和寫請求線程池Q2+的線程平均使 用率均沒有超過預(yù)設(shè)使用率閾值,預(yù)設(shè)使用率閾值可以是一經(jīng)驗值,即如果遷移之后所有的對應(yīng)線程池的使用率都不超過預(yù)設(shè)使用率閾值,則判定允許遷移,否則選擇另外一臺沒有負載壓力超標的線程池的服務(wù)器重復(fù)本過程,直到所有的沒有負載壓力超標的線程池的服務(wù)器都已經(jīng)檢查完畢,沒有找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,即放棄遷移該分區(qū)(Partition)。本實施例能夠精確地找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,從而更好地實現(xiàn)負載均衡。
本申請的分布式存儲系統(tǒng)的負載監(jiān)控方法一優(yōu)選的實施例中,每個線程池的線程平均使用率通過如下公式(λ1+λ)*B/n獲取,其中,
λ1表示在遷移前服務(wù)器上的某個線程池中的請求到達該線程池的隊列的速率;
λ表示待遷移到的目標服務(wù)器在遷移前其上的某個對應(yīng)線程池中的請求到達該線程池的隊列的速率;
B表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的每個線程對一個請求的實際處理時間;
n表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的線程個數(shù)。具體的,以上述遷移前的服務(wù)器M和待遷移到的目標服務(wù)器N為例,需要分別計算讀請求線程池Q1+和寫請求線程池Q2+的線程平均使用率是否均沒有沒有超過預(yù)設(shè)使用率閾值,其中,讀請求線程池Q1+的線程平均使用率計算公式為(λQ1+λQ1+)*BQ1+/nQ1+,寫請求線程池Q2+的線程平均使用率的計算公式為(λQ2+λQ2+)*BQ2+/nQ2+,本實施例可以精確地計算得到每個線程池的線程平均使用率,從而更好地實現(xiàn)負載均衡。
如圖6所示,本申請一具體的應(yīng)用實例中,分布式存儲系統(tǒng)的負載監(jiān)控方法包括如下步驟:
步驟S61,獲取分布式存儲系統(tǒng)中未處理的一個線程池,并判斷是否獲取到,若未獲取到,則轉(zhuǎn)到步驟S62,若獲取到,則轉(zhuǎn)到步驟S63,
步驟S62,結(jié)束;
步驟S63,獲取該線程池的隊列中一個請求的等待時間Wq與逗留時間W的比值,所述逗留時間W為該線程池的隊列中一個請求的等待時間Wq與實際處理時間B之和;
步驟S64,判斷所述等待時間Wq與逗留時間W的比值是否超過預(yù)設(shè)超標閾值th,若否,轉(zhuǎn)到步驟S61,若是,轉(zhuǎn)到步驟S65,
步驟S65,將經(jīng)過該線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列,判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若是,轉(zhuǎn)到步驟S66,若否,轉(zhuǎn)到步驟S67,
步驟S66,對該請求個數(shù)最多的分區(qū)進行分裂操作;
步驟S67,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半;
步驟S68,判斷所述選擇的分區(qū)中是否有未處理的分區(qū),若有,則轉(zhuǎn)到步驟S69,若無,則轉(zhuǎn)到步驟S61,
步驟S69,取下一個未處理的分區(qū);
步驟S70,查找符合條件的沒有負載壓力超標的線程池的服務(wù)器,并判斷是否查找到,若未查找到,則轉(zhuǎn)到步驟S68,以從所述選擇的分區(qū)中取下一個未處理的分區(qū)并進行后續(xù)處理,直到所有選擇的分區(qū)(Partition)都處理完畢,若查找到,則轉(zhuǎn)到步驟S71,
步驟S71,將該選擇的分區(qū)遷移到該查找到的服務(wù)器上后,轉(zhuǎn)到步驟S68。
如圖7所示,根據(jù)本申請的另一面,還提供一種分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備,該設(shè)備100包括:
負載監(jiān)控裝置1,用于確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池;
報警或負載均衡裝置2,用于對每個負載壓力超標的線程池進行報警或負載均衡。本實施例中根據(jù)服務(wù)器(Server)的線程池狀態(tài)即單臺服務(wù)器(Server)的負載超出服務(wù)能力,來進行報警或自動地在服務(wù)器之間均衡分配負載,不依賴于用戶請求模式,能正確的處理不同用戶同時達到的請求,也不依賴于服務(wù)器的服務(wù)能力,在分布式存儲系統(tǒng)的集群內(nèi)部服務(wù)器的服務(wù)能力不一致的情況下也能正確執(zhí)行的報警或負載均衡,從而防止出現(xiàn)熱點,提高分布式存儲系統(tǒng)服務(wù)質(zhì)量。具體的,可根據(jù)服務(wù)器(Server)的線程池基本信息,確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,或?qū)γ總€負載壓力超標的線程池進行報警或負載均衡。單個服務(wù)器(Server)上一般擁有若干個線程池,典型的線程池可以用一個單隊列模型來描述,線程池基本信息可體現(xiàn)為隊列參數(shù),具體的隊列參數(shù)可包括如下內(nèi)容:
a)Wq:表示某個線程池的隊列中一個請求的等待時間。
b)B:表示某個線程池的隊列中一個請求的實際處理時間。
c)W:表示某個線程池的隊列中一個請求的逗留時間,即等待時間Wq加上實際處理時間B。
d)λ:表示某個線程池中的請求到達該線程池的隊列的速率。
e)μ:表示某個線程池的單位時間的服務(wù)能力。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述負載監(jiān)控裝置1,用于獲取每臺服務(wù)器上的每個線程池的隊列中一個請求的等待時間Wq與逗留時間W的比值,所述逗留時間W為每個線程池的隊列中一個請求的等待時間Wq與實際處理時間B之和;當所述等待時間Wq與逗留時間W的比值超過預(yù)設(shè)超標閾值th時,確定該請求所在的服務(wù)器上的線程池的負 載壓力超標。對每臺服務(wù)上的每個線程池參數(shù)進行分析,找出負載壓力超標的線程池,關(guān)于如何判斷超標負載的線程池,可以使用如下公式判斷:
Wq/W>th
該公式的含義是當所述等待時間Wq與逗留時間W的比值超過預(yù)設(shè)超標閾值th時,確定該請求所在的服務(wù)器上的線程池的負載壓力超標。本實施例通過等待時間Wq與逗留時間W的比值和預(yù)設(shè)超標閾值th的比較,能夠精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述預(yù)設(shè)超標閾值根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定,其中,所述線程池的請求到達率為請求到達線程池的隊列的速率與該線程池的單位時間的服務(wù)能力μ的比值,當線程池的請求到達率超過線程池的請求到達率λ/μ的預(yù)設(shè)閾值時,對應(yīng)的等待時間與逗留時間的比值Wq/W開始急劇上升,所述預(yù)設(shè)超標閾值超過所述開始急劇上升時等待時間與逗留時間的比值Wq/W。每一條線表一個線程池,n分別表示對應(yīng)的線程池中的線程個數(shù),其中,第一個線程池中的線程有1個,第二個線程池中的線程有2個,第三個線程池中的線程有5個,第四個線程池中的線程有10個,第五個線程池中的線程有24個,圖3中橫坐標表示請求到達率λ/μ,縱坐標表示等待時間Wq與逗留時間W的比值Wq/W。從圖3中,可以看出Wq/W在請求到達率λ/μ超過一定的數(shù)值(線程池的請求到達率的預(yù)設(shè)閾值)之后就開始急劇上升,Wq/W的這一開始急劇上升的點的值即為拐點,因此Wq/W的預(yù)設(shè)超標閾值只要超過拐點即可,例如,實際中可將拐點的值設(shè)定為0.5,則所述預(yù)設(shè)超標閾值只要大于0.5即可。本實施例根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定精確的預(yù)設(shè)超標閾值,從而能夠更精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述報警或 負載均衡裝置2,用于將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列;判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若是,對該請求個數(shù)最多的分區(qū)進行分裂操作。具體的,例如,某個負載壓力超標的線程池中有三個分區(qū)分別為分區(qū)A、分區(qū)B和分區(qū)C,其中,隸屬于分區(qū)A的請求數(shù)為100,隸屬于分區(qū)B的請求數(shù)為20,隸屬于分區(qū)C的請求數(shù)為10,則求個數(shù)最多的分區(qū)A的請求數(shù)量100超過了該線程池的所有分區(qū)的請求的總數(shù)的一半65=(100+20+10)/2。本實施例中,對于每個負載壓力超標的線程池提取請求信息進行分析,因為線程池和分區(qū)(Partition)并不是一一對應(yīng)的,分區(qū)(Partition)只是一個邏輯單元,隸屬于該分區(qū)(Partition)的請求可能會使用多個線程池進行處理。將經(jīng)過該線程池的請求按照分區(qū)(Partition)進行統(tǒng)計,統(tǒng)計出隸屬于不同分區(qū)(Partition)的請求個數(shù),然后按照請求個數(shù)降序排列。如果一個線程池中請求數(shù)目最多的某個分區(qū)(Partition)請求數(shù)目超過了該線程池的所有分區(qū)的請求的總數(shù)的一半,那么選擇將該分區(qū)(Partition)并跳轉(zhuǎn)到步驟S23,步驟S23中,因為隸屬于該選擇的分區(qū)(Partition)的請求數(shù)目占了該線程池的所有分區(qū)的請求的總數(shù)的一半或一半以上,因此,需要對該選擇的分區(qū)(Partition)進行分裂,分裂之后處理結(jié)束。本實施例中通過找到超過該線程池的所有分區(qū)的請求的總數(shù)的一半的請求個數(shù)最多的分區(qū),該分區(qū)可以認為是該線程池中的對負載壓力超標有顯著影響的分區(qū),因此,需要將其選擇出來,對其進行分裂,從而有效地實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述報警或負載均衡裝置2,用于將該分區(qū)分成若干個子分區(qū),將子分區(qū)分散到其它服務(wù)器上,其中,每個子分區(qū)對應(yīng)該分區(qū)的鍵碼范圍內(nèi)的一個子鍵碼范圍,每個子分區(qū)隸屬的請求個數(shù)基本相等。具體的,分裂點是從該分區(qū)(Partition)落在該線程池上的請求排序之后按照分區(qū)范圍內(nèi)的請求數(shù)平均選取,例如, 某個分區(qū)范圍的鍵碼范圍是0.1~0.4,其中,0.1~0.2范圍的請求個數(shù)有200個,0.2~0.3范圍的請求個數(shù)有200個,0.3~0.4范圍的請求個數(shù)有200個,則可以將該分區(qū)分成三個子分區(qū),對應(yīng)的子鍵碼范圍分別為0.1~0.2、0.2~0.3和0.3~0.4,從而更好地實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述報警或負載均衡裝置2,用于判斷請求個數(shù)最多的分區(qū)的請求數(shù)量是否超過該線程池的所有分區(qū)的請求的總數(shù)的一半,若否,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半;對選擇的分區(qū)進行遷移操作。在此,若請求個數(shù)最多的分區(qū)未超過該線程池的所有分區(qū)的請求的總數(shù)的一半,則將從該線程池中降序排列的第一個分區(qū)(Partition)開始依次往后選擇分區(qū)(Partition)直到剩下的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半,并對選擇的分區(qū)進行遷移操作,因為,請求個數(shù)最多的分區(qū)未超過該線程池的所有分區(qū)的請求的總數(shù)的一半,所以該線程池的請求中沒有具有顯著影響的分區(qū)(Partition),因此將從第一分區(qū)開始依次選擇出來的分區(qū)(Partition)進行逐個遷移。例如,某個負載壓力超標的線程池中有五個分區(qū)分別為分區(qū)D、分區(qū)E、分區(qū)F、分區(qū)G和分區(qū)H,其中,隸屬于分區(qū)D的請求數(shù)為100,隸屬于分區(qū)E的請求數(shù)為100,隸屬于分區(qū)F的請求數(shù)為100,隸屬于分區(qū)G的請求數(shù)為100,隸屬于分區(qū)H的請求數(shù)為100,則需要選擇前三個分區(qū)D、E和F進行逐個遷移,從而剩下的分區(qū)G和H所隸屬的請求的總數(shù)200=100+100小于該線程池的所有分區(qū)的請求的總數(shù)的一半250=(100+100+100+100+100)/2。本實施例能夠精確地找到一個線程池中需要遷移的分區(qū),從而更好地實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述報警或負載均衡裝置2,用于將每個選擇的分區(qū)遷移到?jīng)]有負載壓力超標的線程池的服務(wù)器上,從而實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述報警或負載均衡裝置2,用于查找符合條件的沒有負載壓力超標的線程池的服務(wù)器,若查找到,將該選擇的分區(qū)遷移到該查找到的服務(wù)器上。本實施例在查找符合條件的沒有負載壓力超標的線程池的服務(wù)器的前提下,才將選擇的分區(qū)遷移到該查找到的服務(wù)器上,從而更好地實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,所述符合條件的沒有負載壓力超標的線程池的服務(wù)器包括:
若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器。具體的,從待遷移集合即所有選擇的分區(qū)中取一個分區(qū)(Partition),獲取其在目前服務(wù)器上所有線程池上的請求數(shù)目,例如,服務(wù)器M上某個選擇的分區(qū)使用兩個線程池處理隸屬于其的請求,分別為讀請求線程池Q1和寫請求線程池Q2,在沒有超負載線程池的服務(wù)器集合中隨機選擇一個,例如選擇了服務(wù)器N,然后計算該選擇的分區(qū)(Partition)的讀請求線程池Q1和寫請求線程池Q2分別遷移到服務(wù)器N上對應(yīng)的讀請求線程池Q1+和寫請求線程池Q2+之后,即將讀請求線程池Q1遷移到讀請求線程池Q1+,及將寫請求線程池Q2遷移到寫請求線程池Q2+之后,服務(wù)器N上讀請求線程池Q1+和寫請求線程池Q2+的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,預(yù)設(shè)使用率閾值可以是一經(jīng)驗值,即如果遷移之后所有的對應(yīng)線程池的使用率都不超過預(yù)設(shè)使用率閾值,則判定允許遷移,否則選擇另外一臺沒有負載壓力超標的線程池的服務(wù)器重復(fù)本過程,直到所有的沒有負載壓力超標的線程池的服務(wù)器都已經(jīng)檢查完畢,沒有找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,即放棄遷移該分區(qū)(Partition)。本實施例能夠精確地找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,從而更好地實現(xiàn)負載均衡。
本申請分布式存儲系統(tǒng)的負載監(jiān)控設(shè)備一優(yōu)選的實施例中,每個線程池的線程平均使用率通過如下公式(λ1+λ)*B/n獲取,其中,
λ1表示在遷移前服務(wù)器上的某個線程池中的請求到達線程池的隊列的速率;
λ表示待遷移到的目標服務(wù)器在遷移前其上的某個對應(yīng)線程池中的請求到達線程池的隊列的速率;
B表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的每個線程對一個請求的實際處理時間;
n表示待遷移到的目標服務(wù)器的某個對應(yīng)線程池中的線程個數(shù)。具體的,以上述遷移前的服務(wù)器M和待遷移到的目標服務(wù)器N為例,需要分別計算讀請求線程池Q1+和寫請求線程池Q2+的線程平均使用率是否均沒有沒有超過預(yù)設(shè)使用率閾值,其中,讀請求線程池Q1+的線程平均使用率計算公式為(λQ1+λQ1+)*BQ1+/nQ1+,寫請求線程池Q2+的線程平均使用率的計算公式為(λQ2+λQ2+)*BQ2+/nQ2+,本實施例可以精確地計算得到每個線程池的線程平均使用率,從而更好地實現(xiàn)負載均衡。
綜上所述,本申請通過確定分布式存儲系統(tǒng)中每臺服務(wù)器上所有負載壓力超標的線程池,對每個負載壓力超標的線程池進行報警或負載均衡,能夠根據(jù)服務(wù)器的線程池狀態(tài)即單臺服務(wù)器的負載超出服務(wù)能力,來進行報警或自動地在服務(wù)器之間均衡分配負載,不依賴于用戶請求模式,能正確的處理不同用戶同時達到的請求,也不依賴于服務(wù)器的服務(wù)能力,在分布式存儲系統(tǒng)的集群內(nèi)部服務(wù)器的服務(wù)能力不一致的情況下也能正確執(zhí)行的報警或負載均衡,從而防止出現(xiàn)熱點,提高分布式存儲系統(tǒng)服務(wù)質(zhì)量。
進一步的,本申請通過等待時間Wq與逗留時間W的比值和預(yù)設(shè)超標閾值th的比較,能夠精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
進一步的,本申請根據(jù)線程池的請求到達率的預(yù)設(shè)閾值確定精確的預(yù) 設(shè)超標閾值,從而能夠更精確地得到每臺服務(wù)器上所有負載壓力超標的線程池。
進一步的,本申請將經(jīng)過每個負載壓力超標的線程池的請求按照分區(qū)進行統(tǒng)計,統(tǒng)計出該線程池中隸屬于不同分區(qū)的請求的個數(shù),并將分區(qū)按請求的個數(shù)降序排列,當請求個數(shù)最多的分區(qū)的請求數(shù)量超過該線程池的所有分區(qū)的請求的總數(shù)的一半時,對該請求個數(shù)最多的分區(qū)進行分裂操作,可以精確找到需要進行分裂操作的分區(qū),從而有效地實現(xiàn)負載均衡。
進一步的,本申請中當請求個數(shù)最多的分區(qū)的請求數(shù)量未超過該線程池的所有分區(qū)的請求的總數(shù)的一半時,在所述降序排列的分區(qū)中從第一分區(qū)開始依次選擇一個或多個分區(qū),直至未選擇的剩余的分區(qū)所隸屬的請求的總數(shù)小于該線程池的所有分區(qū)的請求的總數(shù)的一半,對選擇的分區(qū)進行遷移操作,能夠精確地找到一個線程池中需要遷移的分區(qū),從而更好地實現(xiàn)負載均衡。
進一步的,本申請在查找符合條件的沒有負載壓力超標的線程池的服務(wù)器的前提下,才將選擇的分區(qū)遷移到該查找到的服務(wù)器上,從而更好地實現(xiàn)負載均衡。
進一步的,本申請中若將某個選擇的分區(qū)遷移到某個沒有負載壓力超標的線程池的服務(wù)器的對應(yīng)線程池上后,當該遷移到的目標服務(wù)器的每個對應(yīng)線程池的線程平均使用率均沒有超過預(yù)設(shè)使用率閾值,則該服務(wù)器為符合條件的沒有負載壓力超標的線程池的服務(wù)器,能夠精確地找到符合條件的沒有負載壓力超標的線程池的服務(wù)器,從而更好地實現(xiàn)負載均衡。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實施,例 如,可采用專用集成電路(ASIC)、通用目的計算機或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本發(fā)明的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本發(fā)明的一部分可被應(yīng)用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本發(fā)明的方法和/或技術(shù)方案。而調(diào)用本發(fā)明的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設(shè)備的工作存儲器中。在此,根據(jù)本發(fā)明的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本發(fā)明的多個實施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。